创建多个图表以及图表、系列和图表区之间的关系

9

我已经使用MSChart生成图表一段时间了,但我从未在一个图表对象内创建多个图表。思考这个任务揭示了我知识上的空白。

创建图表的思路如下:

  1. 创建图表对象
  2. 将ChartArea对象添加到Chart对象中
  3. 创建序列并添加数据
  4. 将序列添加到图表中

对象结构最终看起来像这样:

                 Chart
               /       \
          ChartArea   Series

过去,我所了解的是ChartArea仅仅是我设置标签等内容的区域。如果想要添加其他内容,我需要添加另一个ChartArea和一个或多个系列。

           ___________________ Chart ___________________
          /                  /       \                  \
       ChartArea0      ChartArea1   Series0            Series1

我应该如何将Series0与ChartArea0关联起来?将一个系列添加到图表区域似乎是有意义的,但这是不可能的。将系列与图表关联而不是图表区域有什么好处呢?

3个回答

8

系列与图表区域相关联,如下所示

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

3
系列应该添加到图表中,而不是 ChartArea。第三行应该是{Chart Object}.Series.Add(Series0)。 - CigarDoug

5

图表可以分为多个区域,一个区域可以是柱状图,另一个可以是饼图。

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;


0

之前的答案会破坏图表的宽度,而这个示例使用了elementposition对象,特别是设置为100%(所有数字都是百分比)。此示例名为“垂直分为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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接