我正在使用System.Windows.Forms.DataVisualization.Charting.Chart()创建图表png文件。我有以下代码:
string t = @"<Chart>
<ChartAreas>
<ChartArea Name=""Default"" _Template_=""All"">
<AxisX Interval=""1""></AxisX>
</ChartArea>
</ChartAreas>
</Chart>";
var chart = new System.Windows.Forms.DataVisualization.Charting.Chart()
{
Size = new Size(x, y),
Titles = { chartName },
};
var series = new Series("Savings");
series.ChartType = SeriesChartType.Line;
series.Points.DataBindXY(preparedGraphCollection.Keys, preparedGraphCollection.Values);
chart.ChartAreas.Add(new ChartArea());
chart.ChartAreas[0].AxisX.Interval = 1;
chart.Series.Add(series);
System.IO.Directory.CreateDirectory(graphTempFilePath);
chart.SaveImage(graphTempFilePath + filename + ".png", ChartImageFormat.Png);
preparedGraphCollection包含一个KayValuePair列表,其中的键代表星期数,值是每个星期的递增数,就像这样
50 => 310
51 => 335
52 => 340
1 => 350
2 => 375
我的问题是,即使我还没有在图表中发送任何排序信息,图表还是会以一种方式对星期数进行排序,从而以最小的数字出现在图表上。这给出了一个看起来很奇怪的图表。即使没有对键和值进行这种排序,也可以通过这种排序来创建图表。为了像上面那样显示它,它就像图表一样接收到数据:
1 => 350
2 => 375
50 => 310
51 => 335
52 => 340
您有什么建议吗?
答案 0 :(得分:1)
由于您的x值是数字,因此将它们添加到位。
要使其按照您添加的顺序显示,您可以
任一设置Series.IsXValueIndexed = true
或将它们添加为DateTime
,并将各个Labels
设置为星期数。
或,您可以添加它们并添加字符串。
一些注意事项:
前者确实很简单,但不会产生比例间距。由于您可能不想/不需要,建议将序列设置为索引。
第二个选项比较棘手,因为周数不易转换为正确的日期。
不建议将x值添加为字符串,因为它会丢失实际值! (即使标签看起来仍然可以。)
IsXValueIndexed
通常还用于避免周末等数据的空缺。
请注意,现在还必须为同一Series
中的所有其他{strong> 编制索引。