我一直在使用MSChart生成图表已有一段时间了,但我从未在一个图表对象中创建多个图表。对这项任务的思考揭示了我的知识差距。
我如何考虑创建图表
对象结构最终看起来像这样
Chart
/ \
ChartArea Series
就我过去一直关注的问题而言,ChartArea就是我设置标签的区域。要添加另一个,我将要添加另一个ChartArea和一个或多个系列。
___________________ Chart ___________________
/ / \ \
ChartArea0 ChartArea1 Series0 Series1
如何将Series0与ChartArea0相关联?将一个系列添加到ChartArea是有意义的,但这是不可能的。为什么将系列与图表相关联而不是ChartArea是有益的?
答案 0 :(得分:6)
系列与图表区域相关联,如此
Chart Chart0 = new Chart();
ChartArea ChartArea0 = new ChartArea("name");
Chart0.ChartAreas.Add(ChartArea0);
Series Series0 = new Series();
Chart0.Series.Add(Series0);
// link series to area here
Series0.ChartArea = "name";
答案 1 :(得分:4)
图表可以分为多个区域,其中一个区域可以是条形图,其他区域可以是饼图。
System.Windows.Forms.DataVisualization.Charting.Chart chart1 = new System.Windows.Forms.DataVisualization.Charting.Chart();
System.Windows.Forms.DataVisualization.Charting.ChartArea chartarea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
System.Windows.Forms.DataVisualization.Charting.ChartArea chartarea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
chart1.ChartAreas.Clear();
chart1.ChartAreas.Add(chartarea1);
chart1.ChartAreas.Add(chartarea2);
然后你创建一些系列;每个系列都将与图表区域相关联。如果您创建5系列并将series1,series2和series3关联到chartarea1,那么这些系列必须是相同或兼容的图表类型。否则将发生运行时错误。多个系列在相同的图表区域中,在某些情况下可能具有不同的x轴组件。例如,在下面的代码中:series1有3个数据点,series2有5个,在这种情况下,chartarea将显示来自series1的前三个x值和来自series2的下两个x值。
chart1.Series.Clear();
chart1.Series.Add("Series1");
chart1.Series[0].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column;
chart1.Series[0].ChartArea = chart1.ChartAreas[0].Name;
chart1.Series[0].Points.AddXY("Point1", 20);
chart1.Series[0].Points.AddXY("Point2", 50);
chart1.Series[0].Points.AddXY("Point3",30);
chart1.Series.Add("Series2");
chart1.Series[1].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column;
chart1.Series[1].ChartArea = chart1.ChartAreas[0].Name;
chart1.Series[1].Points.AddXY("newname1", 10);
chart1.Series[1].Points.AddXY("newname2", 20);
chart1.Series[1].Points.AddXY("newname3", 30);
chart1.Series[1].Points.AddXY("newname4", 40);
chart1.Series[1].Points.AddXY("newname5", 50);
this.tabPage3.Controls.Add(chart1);
chart1.Dock = System.Windows.Forms.DockStyle.Fill;
chart1.Series[0].Points.AddXY("Point1", 20);
chart1.Series[0].Points.AddXY("Point2", 50);
chart1.Series[0].Points.AddXY("Point3",30);
chart1.Series.Add("Series2");
chart1.Series[1].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column;
chart1.Series[1].ChartArea = chart1.ChartAreas[0].Name;
chart1.Series[1].Points.AddXY("newname1", 10);
chart1.Series[1].Points.AddXY("newname2", 20);
chart1.Series[1].Points.AddXY("newname3", 30);
chart1.Series[1].Points.AddXY("newname4", 40);
chart1.Series[1].Points.AddXY("newname5", 50);
this.tabPage3.Controls.Add(chart1);
chart1.Dock = System.Windows.Forms.DockStyle.Fill;
答案 2 :(得分:0)
先前的答案中断了图表的宽度,此示例使用elementposition对象,专门设置为100%(所有nr均为%() 此示例:“两个图表区域,垂直划分为80/20”:
ElementPosition ePos = new ElementPosition();
ePos.Width = 100; ePos.Y = 0; ePos.X = 2; ePos.Height = 80;
ElementPosition ePos2 = new ElementPosition();
ePos2.Width = 100; ePos2.Y = 80; ePos2.X = 2; ePos2.Height = 20;
chartCandleStick.ChartAreas[0].Position = ePos;
chartCandleStick.ChartAreas[1].Position = ePos2;