9

一段时间以来,我一直在使用 MSChart 生成图表,但我从未在一个图表对象中创建多个图表。思考这个任务揭示了我的知识差距。

我如何看待创建图表

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

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

                 Chart
               /       \
          ChartArea   Series

就我过去所关心的而言,ChartArea 只是我设置标签之类的区域。要添加另一个,我会想要添加另一个 ChartArea 和一个或多个系列。

           ___________________ Chart ___________________
          /                  /       \                  \
       ChartArea0      ChartArea1   Series0            Series1

如何将 Series0 关联到 ChartArea0?将 Series 添加到 ChartArea 是有意义的,但这是不可能的。为什么将 Series 与 Chart 而非 ChartArea 相关联是有益的?

4

3 回答 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";
于 2013-06-27T08:24:12.587 回答
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;

于 2013-12-26T13:17:07.110 回答
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;
于 2019-04-01T11:28:59.030 回答