コンパイルは
csc ChartTest2.cs /r:System.Windows.Forms.DataVisualization.dll
using System.Runtime.InteropServices; using System; using System.Drawing; using System.Drawing.Printing; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; public class ChartTest:Form { private Chart chart; public ChartTest() { this.SuspendLayout(); Size = new Size(500,500); SetChart(); this.ResumeLayout(); } //チャート画面の作成 private void SetChart() { //チャート画面の作成 chart = new Chart(); //1つ目のチャートエリア chart.ChartAreas.Add(new ChartArea("chart1")); chart.ChartAreas["chart1"].AxisX.Interval = 5; //2つ目のチャートエリア chart.ChartAreas.Add(new ChartArea("chart2")); //チャートエリアサイズ chart.Size = new Size(400,400); Controls.Add(chart); //チャート1の描画 chart.Series.Add(new Series()); Series series; series = chart.Series[0]; series.ChartArea = "chart1"; series.ChartType = SeriesChartType.Candlestick; //データの作成(ローソク足) int ii; for(ii = 1; ii < 10 ; ii++) { double[] d = new double[4]; d[0] = ii * 10; // 高値 d[1] = ii * 3; // 安値 d[2] = ii * 5; // 始値 d[3] = ii * 8; // 終値 DataPoint dp = new DataPoint(ii,d); series.Points.Add(dp); } //チャート2の描画(出来高) chart.Series.Add(new Series()); Series series2; series2 = chart.Series[1]; series2.ChartArea = "chart2"; series2.ChartType = SeriesChartType.StackedColumn; //データの作成(出来高) for(ii = 1; ii < 10 ; ii++) { DataPoint dp = new DataPoint(ii,ii*10000); series2.Points.Add(dp); } } public static int Main(string[] args) { ChartTest ct = new ChartTest(); ct.ShowDialog(); return 0; } }
ただ、このままだと、上と下でY軸の線が合わずにみづらいので、
chart.ChartAreas["chart1"].AlignWithChartArea = "chart2";
を追加して、軸合わせする。
(上下の軸合わせしたいだけなのに、探すのに手間取った。
Chartクラスは、凄い便利だと思うけど、使い方に癖があって
慣れないと使いづらい。)
で、直した版はこんな感じ。
using System; using System.Drawing; using System.Drawing.Printing; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; public class ChartTest:Form { private Chart chart; public ChartTest() { this.SuspendLayout(); Size = new Size(500,500); SetChart(); this.ResumeLayout(); } //チャート画面の作成 private void SetChart() { //チャート画面の作成 chart = new Chart(); //1つ目のチャートエリア chart.ChartAreas.Add(new ChartArea("chart1")); chart.ChartAreas["chart1"].AxisX.Interval = 5; //2つ目のチャートエリア chart.ChartAreas.Add(new ChartArea("chart2")); //チャートエリアサイズ chart.Size = new Size(400,400); Controls.Add(chart); //チャート1の描画 chart.Series.Add(new Series()); Series series; series = chart.Series[0]; series.ChartArea = "chart1"; series.ChartType = SeriesChartType.Candlestick; //データの作成(ローソク足) int ii; for(ii = 1; ii < 10 ; ii++) { double[] d = new double[4]; d[0] = ii * 10; // 高値 d[1] = ii * 3; // 安値 d[2] = ii * 5; // 始値 d[3] = ii * 8; // 終値 DataPoint dp = new DataPoint(ii,d); series.Points.Add(dp); } //チャート2の描画(出来高) chart.Series.Add(new Series()); Series series2; series2 = chart.Series[1]; series2.ChartArea = "chart2"; series2.ChartType = SeriesChartType.StackedColumn; //データの作成 for(ii = 1; ii < 10 ; ii++) { DataPoint dp = new DataPoint(ii,ii*10000); series2.Points.Add(dp); } /**** 上のチャートと下のチャートのY軸位置調整 ******/ chart.ChartAreas["chart1"].AlignWithChartArea = "chart2"; /***************************************************/ } public static int Main(string[] args) { ChartTest ct = new ChartTest(); ct.ShowDialog(); return 0; } }
軸があって見易くなった。