如何在Winform图表上添加尖峰?

时间:2015-04-28 01:56:47

标签: c# winforms charts linegraph

我在图表上用从文本文件中读取的数字绘制一条线。文件的每一行上都有一个数字,对应于X坐标,而Y坐标是它所在的行。 Graph - with out spikes

现在,要求已更改为包含“特殊事件”,如果该行上的数字后跟特殊字词,则尖峰将显示如下图所示:Desired graph - with spikes

目前我能找到的唯一方法是为每个尖峰使用一条线,但是可能存在大量的这些特殊事件,因此需要模块化。这似乎是一种有效且不好的编程方式。

是否可以将尖峰添加到同一图形线?或者是否可以仅使用一条额外的线并使其断开(不可见)并仅显示尖峰的位置?

我已经看过使用条形图,但由于图表上的其他项目我不能。

1 个答案:

答案 0 :(得分:4)

DataPoints Line的{​​{1}} 已连接,因此无法真正将其分开。但是,导致Chart的每个段都可以有自己的颜色,并且包含DataPoint,这有助于简单的技巧..

如果不添加额外的Color.TransparentSeries,您的两个问题就可以解决:

  • 只需添加' spikes'你在第二张图中给我们看,你需要做的就是插入2个合适的数据点,第二个与尖峰连接的点相同。

  • 要添加未连接的线路,您需要跳转'通过添加一个透明色的额外点来开始。

enter image description here

以下是两个示例方法:

Annotations

您可以这样称呼它们:

void addSpike(Series s, int index, double spikeWidth)
{
    DataPoint dp = s.Points[index];
    DataPoint dp1 = new DataPoint(dp.XValue + spikeWidth, dp.YValues[0]);

    s.Points.Insert(index+1, dp1);
    s.Points.Insert(index+2, dp);
}


void addLine(Series s, int index, double spikeDist, double spikeWidth)
{
    DataPoint dp = s.Points[index];
    DataPoint dp1 = new DataPoint(dp.XValue + spikeDist, dp.YValues[0]);
    DataPoint dp2 = new DataPoint(dp.XValue + spikeWidth, dp.YValues[0]);
    DataPoint dp0 = dp.Clone();

    dp1.Color = Color.Transparent;
    dp2.Color = dp.Color;
    dp2.BorderWidth = 2;             // optional
    dp0.Color = Color.Transparent;

    s.Points.Insert(index + 1, dp1);
    s.Points.Insert(index + 2, dp2);
    s.Points.Insert(index + 3, dp0);
}

请注意,他们会向Points集合中添加2或3个DataPoints!

当然你可以根据需要设置额外线条的颜色和宽度(又名BorderWidth),并将它们包含在参数列表中。

如果你想保持积分不变,你也可以简单地创建一个尖峰系列'并在那里添加尖峰点。诀窍是跳跃'透明线到新点!