创建多个图表以及Chart,Series,ChartArea之间的关系

时间:2013-06-25 17:07:12

标签: c# mschart

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

我如何考虑创建图表

  1. 创建图表对象
  2. 将ChartArea对象添加到Chart对象
  3. 创建系列并添加数据
  4. 将系列添加到图表
  5. 对象结构最终看起来像这样

                     Chart
                   /       \
              ChartArea   Series
    

    就我过去一直关注的问题而言,ChartArea就是我设置标签的区域。要添加另一个,我将要添加另一个ChartArea和一个或多个系列。

               ___________________ Chart ___________________
              /                  /       \                  \
           ChartArea0      ChartArea1   Series0            Series1
    

    如何将Series0与ChartArea0相关联?将一个系列添加到ChartArea是有意义的,但这是不可能的。为什么将系列与图表相关联而不是ChartArea是有益的?

3 个答案:

答案 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;