コンパイルは
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;
}
}
軸があって見易くなった。

