MS Chartでは複数のグラフを同一の領域に2Dでも3Dでも表示できます。その時にちょっとしたコツを提示したいと思います。グラフも別にすることも可能です。
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.Data.SqlClient;
using System.Windows.Forms.DataVisualization.Charting;
namespace ChartTest
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
Chart chart1 = new Chart();
DataSet ds = new DataSet();
private void Form2_Load(object sender, EventArgs e)
{
//チャートに表示するグラフのデータの取得
SqlConnectionStringBuilder bldr = new SqlConnectionStringBuilder();
bldr.DataSource = @".\SQLExpress";
bldr.InitialCatalog = "pubs";
bldr.IntegratedSecurity = true;
SqlConnection conn = new SqlConnection();
conn.ConnectionString = bldr.ConnectionString;
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "SELECT SUM(qty * price) AS Total, SUM(qty) AS Quantity,CONVERT(VARCHAR, YEAR(ord_date)) + '/' + CONVERT(VARCHAR,MONTH(ord_date))+'/' +CONVERT(VARCHAR, DAY(ord_date)) AS SalesDate FROM sales AS s INNER JOIN titles AS t ON s.title_id = t.title_id GROUP BY ord_date ORDER BY SalesDate";
cmd.Connection = conn;
SqlDataAdapter sda = new SqlDataAdapter();
sda.SelectCommand = cmd;
sda.Fill(ds);
//チャートで使用するデータソースの設定
chart1.DataSource = ds.Tables[0];
//グラフを表示する領域のインスタンス生成
chart1.ChartAreas.Add(new ChartArea("Sales"));
//凡例を追加する
chart1.Legends.Add(new Legend("legend"));
//グラフのことをSeriesと呼ぶ
chart1.Series.Add(new Series("Qty"));
chart1.Series.Add(new Series("Price"));
//グラフを表示する領域を設定
chart1.Series[0].ChartArea = "Sales";
chart1.Series[1].ChartArea = "Sales";
//凡例に表示する
chart1.Series[0].Legend = "legend";
chart1.Series[0].LegendText = "売上合計";
chart1.Series[1].Legend = "legend";
chart1.Series[1].LegendText = "売上総数";
//グラフを呼び出すのにインデックスでも可能。
//X軸の値のカラム名を設定する
chart1.Series[0].XValueMember = "SalesDate";
chart1.Series[1].XValueMember = "SalesDate";
//X軸の値のデータタイプを設定
chart1.Series[0].XValueType = ChartValueType.Date;
chart1.Series[1].XValueType = ChartValueType.Date;
//同じくY軸についても設定
chart1.Series["Qty"].YValueMembers = "Quantity";
chart1.Series["Qty"].YValueType = ChartValueType.Int32;
chart1.Series["Qty"].YAxisType = AxisType.Secondary;
chart1.Series["Price"].YValueMembers = "Total";
chart1.Series["Price"].YValueType = ChartValueType.Double;
chart1.Series["Price"].YAxisType = AxisType.Primary;
//グラフの種類を設定。ここでは棒グラフ
chart1.Series[0].ChartType = SeriesChartType.Column;
chart1.Series[1].ChartType = SeriesChartType.Column;
//折れ線グラフなら次のようにします
//chart1.Series[1].ChartType = SeriesChartType.Line;
//3D表示にする
chart1.ChartAreas[0].Area3DStyle.Enable3D = true;
//グラフを2つ重ねるので透過の設定で色指定する
chart1.Series[0].Color = Color.FromArgb(150, Color.Red);
chart1.Series[1].Color = Color.FromArgb(150, Color.Blue);
this.Controls.Add(chart1);
chart1.Dock = DockStyle.Fill;
}
}
}
