朧の.Netの足跡
問合せ先:support@oborodukiyo.info サイト内検索はこちら 
MSチャート 2つのグラフを3Dで重ねて表示





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;
        }
    }
}








良いやや良い普通やや悪い悪い
1 0 0 0 0

投稿日時評価コメント