memo

プログラミング備忘録

【C#】Chart折れ線グラフ1

今まで、家ではVisual Studio 2017を使っていたのですが、やっと2019をインストールしました。
今後は2019で作成していきます。


定期的に更新されるグラフを作成します。

todo
1. 折れ線
2. 1000msec毎にグラフが更新
3. データ数は10、最大100、最小0とする
4. 新しいデータは右側、前のデータはどんどん左側に移動するように表示
5. 表示するデータは、3の範囲で設定した乱数


久しぶりにVisual C#をやるので、こんな感じだっけ……と思いながら作成しました。
新規プロジェクトを作成すると、C#のフォームアプリ作成……といった項目が出てくるので、とりあえずこれを選択。

Form.cs
特に私の方で何もしない状態だと、Form.csは以下のようになっていました。
Form()がコンストラクタだっけ……みたいな、かなり記憶喪失のような状態でしたが、
とりあえずInitializeComponent();の後に、初期でやっておきたい処理を書いていきます。

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;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}

グラフはChartで作成。
何もツールボックスでとりあえずchart1を作成しますが、何も設定しないと白い画像が表示されるだけです。
Chartの初期設定をする関数を作成します。
引数にChart型を使おうとしたらVSに注意されました。
「using System.Windows.Forms.DataVisualization.Charting;」を指示に従って追加します。

初期設定の関数は以下のようにしました。
Chartの種類(折れ線、ポイント、棒等……)は引数で設定出来るようにしました。
ちなみに、初期で表示する値は乱数ではなく適当です。

        private void initChart(Chart chart, SeriesChartType type)
        {
            // 初期化
            chart.Series.Clear();
            chart.ChartAreas.Clear();

            // chart設定
            string Name1 = "Bar1";
            string AreaName1 = "chartArea1";
            chart.Series.Add(Name1);// Series追加
            chart.ChartAreas.Add(AreaName1);
            chart.Series[Name1].ChartType = type;

            //max, min 目盛設定
            chart.ChartAreas[AreaName1].AxisY.Maximum = 100;
            chart.ChartAreas[AreaName1].AxisY.Minimum = 0;
            chart.ChartAreas[AreaName1].AxisY.Interval = 20;

            // 目盛線ちょっと出てるところがなくなる
            chart.ChartAreas[AreaName1].AxisX.MajorTickMark.Enabled = false;


            // データ設定
            for (int i = 0; i < 10; i++)
            {
                chart.Series[Name1].Points.AddXY(i, i * 10);
            }
        }

Timerを作成していき、こちらもコンストラクタで初期設定します。
上で作成したChartの初期設定の関数もコンストラクタで呼び、今のところ以下のようになりました。

        public Form1()
        {
            // コンストラクタ
            InitializeComponent();

            // chart
            initChart(chart1, SeriesChartType.Line);//折れ線

            // timer
            timer1.Interval = 1000; // msec
            timer1.Enabled = true;
            timer1.Start();
        }
f:id:shinopikapi:20210124194132p:plain
Chart初期設定後


todoの1-3までは終わりました。
この後、定期的にChartを更新する処理を作成していきます。
続きはまた



参考
https://docs.microsoft.com/ja-jp/dotnet/api/system.timers.timer?view=net-5.0
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.datavisualization.charting.chart?view=netframework-4.8

www.shinopp.com