在C#中对图表排序问题

时间:2019-02-14 09:49:00

标签: c# sorting charts

我正在使用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

您有什么建议吗?

1 个答案:

答案 0 :(得分:1)

由于您的x值是数字,因此将它们添加到位

要使其按照您添加的顺序显示,您可以

  • 任一设置Series.IsXValueIndexed = true

  • 将它们添加为DateTime,并将各个Labels设置为星期数。

  • ,您可以添加它们并添加字符串。

一些注意事项:

  • 前者确实很简单,但不会产生比例间距。由于您可能不想/不需要,建议将序列设置为索引。

  • 第二个选项比较棘手,因为周数不易转换为正确的日期。

  • 不建议
  • 不建议将x值添加为字符串,因为它会丢失实际值! (即使标签看起来仍然可以。)

IsXValueIndexed通常还用于避免周末等数据的空缺。

请注意,现在还必须为同一Series中的所有其他{strong> 编制索引。