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

Jef*_*eff 6 c# mschart

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

我如何看待创建图表

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

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

                 Chart
               /       \
          ChartArea   Series
Run Code Online (Sandbox Code Playgroud)

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

           ___________________ Chart ___________________
          /                  /       \                  \
       ChartArea0      ChartArea1   Series0            Series1
Run Code Online (Sandbox Code Playgroud)

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

zeF*_*chy 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";
Run Code Online (Sandbox Code Playgroud)

  • 系列添加到CHARTS,而不是ChartAreas.第三行应该是{Chart Object} .Series.Add(Series0).http://msdn.microsoft.com/en-us/library/system.web.ui.datavisualization.charting.chart(v=vs.100).aspx (3认同)

小智 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;
Run Code Online (Sandbox Code Playgroud)