如何在C#图表中添加两个不同的类型系列?

时间:2016-08-26 15:49:44

标签: c# winforms charts

我有很好的工作图表和股票类型图表。当我试图在这个图表区域添加线型系列时,我得到了大红色X.

Series ser = new Series(seriesName);
ser.ChartArea = "Default";
ser.Name = seriesName;
ser.ChartType=SeriesChartType.Line;
ser.Points.AddXY(1, 1);
ser.Points.AddXY(1, 2);
chart1.Series.Add(ser);

是否可以在一个图表区域中添加不同类型的系列?

修改

我尝试按照TaW的提议应用更改,但仍然会出现同样的错误。

string seriesName =  dataGridView1.Rows[rowSelected].Cells[0].Value + "_" + curPeriod + "_" +"line" +dataPoints.Length;
Series ser = new Series(seriesName);
chart1.Series.Add(ser);
chart1.Series[seriesName].ChartArea = chart1.ChartAreas[0].Name;
chart1.Series[seriesName].ChartType = SeriesChartType.Line;
chart1.Series[seriesName].Points.AddXY(1, 1);
chart1.Series[seriesName].Points.AddXY(1, 2);

这是我的图表的初始化。

chart1.ChartAreas.Add(new ChartArea("Default"));
chart1.Series.Add(new Series("Series1"));
chart1.ChartAreas.Add(new ChartArea("Option"));
chart1.Series.Add(new Series("Series2"));
chart1.Series.Add(new Series("Series3"));
chart1.Series["Series2"].ChartArea = "Option";
chart1.Series["Series3"].ChartArea = "Option";
chart1.Series["Series1"].ChartArea = "Default";
chart1.Series["Series1"].ChartType = SeriesChartType.Stock;
chart1.Series["Series2"].ChartType = SeriesChartType.Line;
chart1.Series["Series3"].ChartType = SeriesChartType.Line;
chart1.Series["Series1"].BorderColor = Color.Green;
chart1.Series["Series1"].Color = Color.GreenYellow;
chart1.Series["Series2"].Color = Properties.Settings.Default.InnerPrice;
chart1.Series["Series3"].Color = Properties.Settings.Default.TemporaryPrice;
chart1.Series["Series1"]["PriceUpColor"] = "Red";
chart1.Series["Series1"]["PriceDownColor"] = "Yellow";
chart1.Series["Series1"].IsXValueIndexed = true;
chart1.Series["Series2"].IsXValueIndexed = false;
chart1.Series["Series3"].IsXValueIndexed = false;
chart1.Series["Series1"].XValueType = ChartValueType.DateTime;

Screen of working chart 可能有人可以提供帮助。我需要在图表中绘制线条!提前致谢!

1 个答案:

答案 0 :(得分:1)

您的问题很可能来自于您在Series 准备} 之前准备Chart的方式。

我发现在添加到图表之前,我甚至无法为Stock系列添加点数!我收到的错误声称我只能为DataPoints添加一个y值,这显然是错误的,因为已经设置了SeriesChartType.Stock

所以试试这个顺序:

chart1.Series.Clear();

string seriesName1 = "stock";
Series ser1 =  chart1.Series.Add(seriesName1);

ser1.ChartArea = chart1.ChartAreas[0].Name;
ser1.Name = seriesName1;
ser1.ChartType = SeriesChartType.Stock;

ser1.BorderWidth = 3;

ser1.Points.AddXY(1, 44, 11, 34, 37);  // x, high, low, open, close
ser1.Points.AddXY(2, 33, 11, 22, 33);


string seriesName2 = "line";
Series ser2 = chart1.Series.Add(seriesName2);

ser2.ChartArea = chart1.ChartAreas[0].Name;
ser2.Name = seriesName2;
ser2.ChartType = SeriesChartType.Line;
ser2.Points.AddXY(1, 44);
ser2.Points.AddXY(2, 33);

enter image description here

还要确保seriesName变量包含正确的字符串!

<强>更新

查看到目前为止发布的完整代码,您似乎正在向Series“默认”添加一个或多个ChartArea,其中已包含已编入索引系列( “系列1”)。只有当Series中的所有(其他)ChartArea与第一个对齐时,才允许这样做,即包含相同数量的值。由于您只添加2 DataPoints,我怀疑它们是......

MSDN:

  

将Series.IsXValueIndexed属性设置为true会导致所有系列   分配到相同的图表区域和X轴(主要或次要)到   被索引。您必须确保系列对齐。除此以外,   Chart控件抛出异常。有关更多信息,请参阅   对齐数据。

注意

当尝试显示未对齐系列以及索引系列时,您可以获得:

  • 一个例外,解释了问题(从VS运行时)
  • 或Red X解释什么,从exe运行或忽略try-catch块中的异常时。