コードから棒グラフを作成する例を紹介します。
Chartコントロールに表示するデータは1つずつ追加することも可能ですが、データベースから取得して表示する場合もあるのではないでしょうか?
このような場合にはDataSourceプロパティを使用して、取得したデータをバインドして使用することが可能です。
グラフのタイトルはTitlesプロパティのAddメソッドで追加します。
データ系列はSeriesプロパティのAddメソッドで追加を行います。紹介するサンプルコードの中ではデータテーブルの2列目と3列目が系列になるように設定しています。
グラフの種類はSeriesプロパティのChartTypeプロパティで設定を行います。今回は棒グラフとするためSeriesChartType.Columnを指定しています。
軸値の設定はSeriesプロパティのXValuMemberプロパティとYValueMemberプロパティで行います。
また、今回はX軸のグリッドを非表示にしたいのでMajorGridとMinorGridプロパティのEnabledプロパティにFalseを設定しています。
最後に軸のタイトルですがAxisXおよびAxisYプロパティのTitleプロパティで設定します。
下記はコードから棒グラフを作成する例です。
VBの例
Imports System.Windows.Forms.DataVisualization.Charting
' フォームロード時の処理
Private Sub Form3_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
'初期化
Chart1.Series.Clear()
'データの取得
Dim ds As DataSet = GetData()
'Chartコントロールにデータソースを設定
Chart1.DataSource = ds
'Chartコントロールにタイトルを設定
Chart1.Titles.Add("アクセス数とユニークユーザー数")
'グラフの種類,系列,軸の設定
For I As Integer = 1 To ds.Tables(0).Columns.Count - 1
'列名の取得
Dim columnName As String = ds.Tables(0).Columns(I).ColumnName
'系列の設定
Chart1.Series.Add(columnName)
'グラフの種類
Chart1.Series(columnName).ChartType = SeriesChartType.Column
'X軸
Chart1.Series(columnName).XValueMember = ds.Tables(0).Columns(0).ColumnName.ToString
Chart1.ChartAreas(0).AxisX.MajorGrid.Enabled = False
Chart1.ChartAreas(0).AxisX.MinorGrid.Enabled = False
'Y軸
Chart1.Series(columnName).YValueMembers = columnName
Next
'X軸タイトル
Chart1.ChartAreas(0).AxisX.Title = "月"
Chart1.DataBind()
End Sub
' データの設定
Private Function GetData() As DataSet
Dim ds As New DataSet
Dim dt As New DataTable
Dim dtRow As DataRow
'列の作成
dt.Columns.Add("月", Type.GetType("System.String"))
dt.Columns.Add("アクセス数", Type.GetType("System.Int32"))
dt.Columns.Add("ユニークユーザー数", Type.GetType("System.Int32"))
ds.Tables.Add(dt)
'データの追加
dtRow = ds.Tables(0).NewRow
dtRow(0) = "2011/01"
dtRow(1) = "945"
dtRow(2) = "4203"
ds.Tables(0).Rows.Add(dtRow)
dtRow = ds.Tables(0).NewRow
dtRow(0) = "2011/02"
dtRow(1) = "1023"
dtRow(2) = "3302"
ds.Tables(0).Rows.Add(dtRow)
dtRow = ds.Tables(0).NewRow
dtRow(0) = "2011/03"
dtRow(1) = "2121"
dtRow(2) = "7065"
ds.Tables(0).Rows.Add(dtRow)
dtRow = ds.Tables(0).NewRow
dtRow(0) = "2011/04"
dtRow(1) = "2179"
dtRow(2) = "7753"
ds.Tables(0).Rows.Add(dtRow)
dtRow = ds.Tables(0).NewRow
dtRow(0) = "2011/05"
dtRow(1) = "2063"
dtRow(2) = "6373"
ds.Tables(0).Rows.Add(dtRow)
dtRow = ds.Tables(0).NewRow
dtRow(0) = "2011/06"
dtRow(1) = "2107"
dtRow(2) = "4210"
ds.Tables(0).Rows.Add(dtRow)
Return (ds)
End Function
C#の例
using System.Windows.Forms.DataVisualization.Charting;
// フォームロード時の処理
private void Form3_Load(object sender, EventArgs e)
{
// 初期化
chart1.Series.Clear();
// データの取得
DataSet ds = GetData();
// Chartコントロールにデータソースを設定
chart1.DataSource = ds;
// Chartコントロールにタイトルを設定
chart1.Titles.Add("アクセス数とユニークユーザー数");
// グラフの種類,系列,軸の設定
for( int i = 1; i < ds.Tables[0].Columns.Count; i++ )
{
// 列名の取得
string columnName = ds.Tables[0].Columns[i].ColumnName;
// 系列の設定
chart1.Series.Add(columnName);
// グラフの種類
chart1.Series[columnName].ChartType = SeriesChartType.Column;
// X軸
chart1.Series[columnName].XValueMember = ds.Tables[0].Columns[0].ColumnName.ToString();
chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
chart1.ChartAreas[0].AxisX.MinorGrid.Enabled = false;
// Y軸
chart1.Series[columnName].YValueMembers = columnName;
}
// X軸タイトル
chart1.ChartAreas[0].AxisX.Title = "月";
chart1.DataBind();
}
/// データの設定
private DataSet GetData()
{
DataSet ds = new DataSet();
DataTable dt = new DataTable();
DataRow dtRow;
// 列の作成
dt.Columns.Add("月", Type.GetType("System.String"));
dt.Columns.Add("アクセス数", Type.GetType("System.Int32"));
dt.Columns.Add("ユニークユーザー数", Type.GetType("System.Int32"));
ds.Tables.Add(dt);
// データの追加
dtRow = ds.Tables[0].NewRow();
dtRow[0] = "2011/01";
dtRow[1] = "945";
dtRow[2] = "4203";
ds.Tables[0].Rows.Add(dtRow);
dtRow = ds.Tables[0].NewRow();
dtRow[0] = "2011/02";
dtRow[1] = "1023";
dtRow[2] = "3302";
ds.Tables[0].Rows.Add(dtRow);
dtRow = ds.Tables[0].NewRow();
dtRow[0] = "2011/03";
dtRow[1] = "2121";
dtRow[2] = "7065";
ds.Tables[0].Rows.Add(dtRow);
dtRow = ds.Tables[0].NewRow();
dtRow[0] = "2011/04";
dtRow[1] = "2179";
dtRow[2] = "7753";
ds.Tables[0].Rows.Add(dtRow);
dtRow = ds.Tables[0].NewRow();
dtRow[0] = "2011/05";
dtRow[1] = "2063";
dtRow[2] = "6373";
ds.Tables[0].Rows.Add(dtRow);
dtRow = ds.Tables[0].NewRow();
dtRow[0] = "2011/06";
dtRow[1] = "2107";
dtRow[2] = "4210";
ds.Tables[0].Rows.Add(dtRow);
return ds;
}
Please follow and like us:


コメント