【C#】で Chartコントロール を使ってみる

C#を活用したプログラミングでは、視覚的なデータ表現が重要な役割を果たします。本記事では、Windows環境下でC#を使用して、.NET Framework 4.6.1をターゲットにしたChartコントロールを用いて折れ線グラフを描く方法を解説します。


Visual Studio Community 2017を使用し、日付データをX軸に、ランダムデータをY軸に配置し折れ線グラフ表示の具体的な手順をみてみましょう。

動作確認環境

  • Windows10
  • Visual studio Community 2017 
  • ターゲットフレームワーク .NET Framework 4.6.1

Chartに対する設定

フォームのクライアント領域いっぱいにチャートを表示する

この設定により、フォームのクライアントエリア全体にチャートを表示することができます。コードの詳細は以下の通りです。

chart1.Location = new Point(0, 0);
chart1.Size = this.ClientSize;

解説

  1. Locationプロパティ
    • このプロパティをnew Point(0, 0)とすることで、チャートの表示位置をフォームの左上隅 (X=0, Y=0) に固定しています。
    • 他の位置に表示したい場合は、new Point(x, y)の形式で値を変更できます。
  2. Sizeプロパティ
    • this.ClientSizeを使用して、フォームのクライアント領域の幅と高さを取得し、チャートのサイズに設定します。
    • クライアント領域とは、ウィンドウのタイトルバーや枠線を除いた、実際に内容が表示される領域を指します。

これにより、フォームのサイズが変更されても、チャートがクライアントエリア全体にフィットするようになります。さらに、フォームのResizeイベントを利用することで、リサイズ時の動的な調整も可能です。

ChartのX軸に対する設定

X軸に日付を設定し、目盛りのフォーマットやラベルの角度を調整する方法について解説しています。それぞれのコードと設定の意味について詳しく説明します。

1.X軸に日付型を設定

seriesLine.XValueType = ChartValueType.DateTime;

解説:

  • XValueTypeChartValueType.DateTimeに設定することで、X軸に日付型のデータを扱うよう指定しています。
  • これにより、グラフ上のX軸が適切に日付形式で表示されます。
  • データを追加する際には、DateTime.ToOADate()を使用して、日付データをOADate形式(数値形式)に変換する必要があります。

2.X軸目盛のフォーマット指定

area1.AxisX.LabelStyle.Format = "yyyy/MM/dd";

解説

  • LabelStyle.Formatで、X軸の目盛りラベルの表示形式を指定します。
  • この例では"yyyy/MM/dd"(年/月/日)の形式を指定していますが、カスタマイズして以下のように変更できます。
    • "MM/dd": 月/日
    • "yyyy/MM": 年/月
    • "dd-MM-yyyy": 日-月-年(ヨーロッパ風)

3.X軸目盛の表示を-90°回転

chart1.ChartAreas[0].AxisX.LabelStyle.Angle = -90;

解説

  • ラベルの角度を-90度に設定することで、縦書きに表示されます。
  • ラベルが長い場合や、データが多くラベルが重なる場合に役立つ設定です。

フォームのプログラムコード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
namespace ChartControl1
{
    public partial class Form1 : Form
  {
        public Form1()
        {
            InitializeComponent();
    }
        public const int AxisX = 240; //X軸のサイズ
        //Form1のLoadイベントハンドラ
        private void Form1_Load(object sender, EventArgs e)
        {
            // サイズと位置を設定する。
            chart1.Location = new Point(0, 0);
            chart1.Size = this.ClientSize;
            // チャートをクリアする
            chart1.ChartAreas.Clear();
            chart1.Titles.Clear();
            chart1.Series.Clear();

            // チャートのタイトルを設定する。
            Title title1 = new Title("タイトル");

            // series
            Random rdm = new Random();
            Series seriesLine = new Series(); //折れ線データ
            seriesLine.ChartType = SeriesChartType.Line; //折れ線グラフ
            seriesLine.LegendText = "Legend:Line";
            seriesLine.BorderWidth = 2;
            seriesLine.MarkerStyle = MarkerStyle.None;
            seriesLine.MarkerSize = 12;
            // サンプル用のデータです。
            double[] pointX = new double[AxisX];
            double[] pointY = new double[AxisX];

            // 基準の日時用に現在日時を取得します
            DateTime baseDt = DateTime.Now;

            // 日付情報格納用配列です
            DateTime[] dtArray = new DateTime[AxisX];

            // X軸の日付データとY軸のポイントデータを生成します
            for (int i = 0; i < dtArray.Length; i++)
            {
                // 基準の日時 + 1日の日時を生成します
                DateTime tempDt = baseDt.AddDays(i);

                // 生成した日時をDouble型に変換します
                pointX[i] = tempDt.ToOADate();

                // Y軸用のデータ配列に格納します
                pointY[i] = rdm.Next(100, 180);
            }
            // X軸の値を日付としてセットします
            seriesLine.XValueType = ChartValueType.DateTime;
            // 系列のポイント情報をセットします
            for (int i = 0; i < AxisX; i++)
            {
                seriesLine.Points.AddXY(pointX[i], pointY[i]);
            }
            // chartarea
            ChartArea area1 = new ChartArea();
            area1.AxisX.Title = "Title-XAxis"; //X座標タイトル
            area1.AxisY.Title = "Title-YAxis"; //Y座標タイトル
            area1.AxisX.LabelStyle.Format = "yyyy/MM/dd";

            area1.AxisX.Interval = 10;
            chart1.Titles.Add(title1);
            chart1.ChartAreas.Add(area1);
            chart1.Series.Add(seriesLine);
            chart1.ChartAreas[0].AxisX.LabelStyle.Angle = -90; 
        }
        //Form1のResizeイベントハンドラ
        private void Form1_Resize(object sender, EventArgs e)
        {
            //フォームをリサイズした時にチャートもリサイズする
            chart1.Size = this.ClientSize;

        }

    }
}

実行結果

まとめ

今回の解説では、Windows 10上のVisual Studio Community 2017を用いて、Chartコントロールで折れ線グラフを描くプロセスを簡単に示しました。

フォームの全クライアント領域を活用してグラフを表示し、日付型のデータをX軸に設定する方法、さらに目盛りの角度調整といった高度な設定も行いました。この一連のステップを通じて、C#で簡単にデータを折れ線グラフを表現できる方法を掴むことができるでしょう。

タイトルとURLをコピーしました