スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

C# Chartクラスでグラフ表示をするフォームアプリケーションの話

前の記事見たけど、なんであんなにコードの改行ががたがたなんだろうか(´・ω・`)

さて、とても簡単なChartクラスによるグラフ表示のサンプルコード。

参考:C# Chartクラス

例によってVisual studioには頼らない構えを見せていく。
※デザイナーコードは参考にさせていただいています。


Sin波とCos波をひとつのグラフに重ねて表示します。


ChartSample1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

namespace myapp
{
class ChartSample1
{
public partial class Form3 : Form
{
//Chartオブジェクトを生成
private System.Windows.Forms.DataVisualization.Charting.Chart chart;

//コンストラクタ
public Form3(){
//フォームおよびフォームに配置されるコンポーネントを初期化
//InitializeComponent();

//フォームのサイズを設定
this.Size = new Size(400,400);

//Formにロードイベントを追加
this.Load += new System.EventHandler(this.Form3_Load);
}
private void Form3_Load(object sender, EventArgs e)
{
//Chartをインスタンス化
this.chart = new System.Windows.Forms.DataVisualization.Charting.Chart();

//Chartの各要素のクリア
chart.ChartAreas.Clear();
chart.Titles.Clear();
chart.Series.Clear();

//ChartArea(グラフ領域)
ChartArea area = new ChartArea("area1");

//Title(グラフのタイトル)
Title title = new Title("title1");

//ChartAreaにTitleを紐付ける
title.DockedToChartArea = "area1";

//Series(グラフに表示されるひとつの系列)
Series series1 = new Series();
Series series2 = new Series();

//Seriesの種類を設定
series1.ChartType = SeriesChartType.Line;
series2.ChartType = SeriesChartType.Line;

//Seriesのデータを設定(Sin波,Cos波)
for(int i=0;i<360;i++)
{
series1.Points.AddXY(i,Math.Sin(i*Math.PI/180.0) );
series2.Points.AddXY(i,Math.Cos(i*Math.PI/180.0) );
}

//ChartAreaにSeriesを紐付ける
series1.ChartArea = "area1";
series2.ChartArea = "area1";

//ChartArea,Title,SeriesをChartに追加
chart.ChartAreas.Add(area);
chart.Titles.Add(title);
chart.Series.Add(series1);
chart.Series.Add(series2);

//Chartをフォームのコントロールに追加
this.Controls.Add(this.chart);
}
}
static void Main() {
Application.Run(new Form3());
}
}
}


※コマンドプロンプトからコンパイルするときは、System.Windows.Forms.DataVisualization.dllファイルも指定してコンパイルしてください。

コマンド
csc /reference:using System.Windows.Forms.DataVisualization.dll ChartSample1.cs


実行結果



解説

Chartクラスを使ったグラフ表示、ちょっと構造が入り組んでるので気を付けてください。

参考:
Chartコントロールを使う 
C#:Chartコントロールを使う
C#でグラフを描く(Chartコントロールによる方法)
[C#]Chartコントロールを使用して、タスクマネージャー風のグラフを作成する 

Chartクラスはグラフ群全体を指します。
Chartクラスは大きく3つの要素を持っています。


  • ChartArea:グラフ全体の中の一つのグラフ領域

  • Title:グラフまたはグラフ領域のタイトル

  • Series:グラフ領域に描画される系列



言葉で説明するとよくわからないですね。
図にするとこうです。




ChartクラスはプロパティとしてChartAreaやTitle、Seriesを持ちます。
コレクションってのは、クラスの配列みたいなものです。配列と違って可変長です。




TitleやSeriesはChartAreaに関連付けることができます。

こんな感じに。



title.DockedToChartArea = "area1";
series1.ChartArea = "area1";


上のサンプルではここでTitleとSeriesをChartAreaに関連付けています。

未検証ですが、ひとつのSeriesに関連付けられるのはひとつのChartAreaだけのようです。

逆に、ひとつのChartAreaは複数のSeriesを持つ(?)ことができます。
サンプルのChartAreaも、Sin波とCos波の二つのSeriesを持っていますね。

というわけで、上のサンプルコードを見ていただければわかると思いますが、
グラフの表示を行う流れとしては


  1. Chartをインスタンス化

  2. Chartの要素をクリア(初期化)

  3. ChartAreaをインスタンス化

  4. Titleをインスタンス化

  5. ChartAreaにタイトルを付ける場合はTitleをChartAreaに関連付け

  6. Seriesをインスタンス化

  7. Seriesの種類を指定

  8. Seriesにデータを追加

  9. Seriesを表示させるChartAreaに関連付け

  10. 作成したChartAreaをChartにすべて追加

  11. 作成したTitleをChartにすべて追加

  12. 作成したSeriesをChartにすべて追加

  13. Chartをフォームに追加



これでうまくいくのではないかと。

ちなみに、折れ線グラフ(細かくて折れ線に見えないですが)の他にもいろいろ種類があるので、
また機会があればまとめたいと思います。



それでは、今回はこのあたりで。
関連記事

コメント

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます
非公開コメント
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。