Windows Forms のChart を使う~SeriesChartType:グラフ系列種別~
最近Windows FormsのChartを使用する機会があったので、備忘録として使い方を残します。
まず今回はChartにどんな種類のグラフが使用できるのか見ていきます。
Chartの系列は"Series"プロパティでアクセスすることができます。
この系列の種類を変えるには、ChartType プロパティを変更すればOKです。
ChartTypeプロパティは、列挙体のSeriesChartType 型ですが、これは以下の種別が定義されています。
なので、ここに定義されているグラフの種類=Chartで表現できる種類 ということです。
- SeriesChartType定義一覧
種別名 | 内容 |
---|---|
Point | ポイント グラフ |
FastPoint | FastPoint グラフ |
Bubble | バブル チャート |
Line | 折れ線グラフ |
Spline | スプライン グラフ |
StepLine | StepLine グラフ |
FastLine | FastLine グラフ |
Bar | 横棒グラフ |
StackedBar | 積み上げ横棒グラフ |
StackedBar100 | 100% 積み上げ横棒グラフ |
Column | 縦棒グラフ |
StackedColumn | 積み上げ縦棒グラフ |
StackedColumn100 | 100% 積み上げ縦棒グラフ |
Area | 面グラフ |
SplineArea | スプライン面グラフ |
StackedArea | 積み上げ面グラフ |
StackedArea100 | 100% 積み上げ面グラフ |
Pie | 円グラフ |
Doughnut | ドーナツ グラフ |
Stock | 株価チャート |
Candlestick | ローソク足チャート |
Range | 範囲グラフ |
SplineRange | スプライン範囲グラフ |
RangeBar | RangeBar グラフ |
RangeColumn | 範囲縦棒グラフ |
Radar | レーダー チャート |
Polar | 極座標グラフ |
ErrorBar | 誤差範囲グラフ |
BoxPlot | ボックス プロット グラフ |
Renko | 練行足チャート |
ThreeLineBreak | ThreeLineBreak グラフ |
Kagi | かぎ足チャート |
PointAndFigure | PointAndFigure グラフ |
Funnel | じょうごグラフ |
Pyramid | ピラミッド グラフ |
グラフの種類がわかったところで、試しに使用してみます。
開発環境は以下の通り。
- Visual Studio 2015
- .NET Framework 4.5.1
<ChartData.cs>
こちらは、グラフに表示するためのデータクラスです。
namespace Chart01Sample { public class ChartData { public int X { get; set; } public int Y { get; set; } } }
<Form1.cs>
グラフを表示するフォームです。
namespace Chart01Sample { using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; public partial class Form1 : Form { // // 選択できるSeriesChartTypeを分けているのは、SeriesChartTypeを切り替えた場合にInvalidOperationExceptionがスローされるため。 // あるグラフ系列種別から別の系列種別へ切り替えると上記の例外がスローされる。 // 以下の2つのリストはその例外がスローされない種類で分けている。 // private readonly List<SeriesChartType> _chartTypes1 = new List<SeriesChartType> { SeriesChartType.Point, SeriesChartType.FastPoint, SeriesChartType.Bubble, SeriesChartType.Line, SeriesChartType.Spline, SeriesChartType.StepLine, SeriesChartType.FastLine, SeriesChartType.Column, SeriesChartType.StackedColumn, SeriesChartType.StackedColumn100, SeriesChartType.Area, SeriesChartType.SplineArea, SeriesChartType.StackedArea, SeriesChartType.StackedArea100, SeriesChartType.Stock, SeriesChartType.Candlestick, SeriesChartType.ErrorBar, SeriesChartType.BoxPlot }; private readonly List<SeriesChartType> _chartTypes2 = new List<SeriesChartType> { SeriesChartType.Bar, SeriesChartType.StackedBar, SeriesChartType.StackedBar100, SeriesChartType.Pie, SeriesChartType.Range, SeriesChartType.SplineRange, SeriesChartType.RangeBar, SeriesChartType.RangeColumn, SeriesChartType.Doughnut, SeriesChartType.Radar, SeriesChartType.Polar, SeriesChartType.ThreeLineBreak, SeriesChartType.Kagi, SeriesChartType.Renko, SeriesChartType.PointAndFigure, SeriesChartType.Funnel, SeriesChartType.Pyramid }; public Form1() { InitializeComponent(); // Chartには、最初からSeriesが設定されているので削除しておく。 chart1.Series.Clear(); chart2.Series.Clear(); List<ChartData> data = new List<ChartData> { new ChartData {X = 0, Y = 3}, new ChartData {X = 1, Y = 4}, new ChartData {X = 2, Y = 8}, new ChartData {X = 3, Y = 6}, new ChartData {X = 4, Y = 7}, new ChartData {X = 5, Y = 3}, new ChartData {X = 6, Y = 1}, new ChartData {X = 7, Y = 0}, new ChartData {X = 8, Y = 5}, new ChartData {X = 9, Y = 2} }; chart1.DataSource = data; Series series = chart1.Series.Add("Sample"); series.XValueMember = "X"; series.YValueMembers = "Y"; series.Color = Color.Blue; chart2.DataSource = data; Series series2 = chart2.Series.Add("Sample"); series2.XValueMember = "X"; series2.YValueMembers = "Y"; series2.Color = Color.Blue; } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { if (comboBox1.SelectedItem != null) { chart1.Series["Sample"].ChartType = (SeriesChartType) comboBox1.SelectedItem; } } private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) { if (comboBox2.SelectedItem != null) { chart2.Series["Sample"].ChartType = (SeriesChartType) comboBox2.SelectedItem; } } private void Form1_Load(object sender, EventArgs e) { comboBox1.DataSource = _chartTypes1; comboBox2.DataSource = _chartTypes2; } } }
実行結果はこんな感じです。
ComboBoxの選択項目を変更すると、ぐりぐりグラフの種類が切り替わります。
今回使用したサンプルはこちら↓↓↓
github.com