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

How to add spikes to line on Winform chart?

我正在根据从文本文件中读取的数字在图表上画一条线。文件的每一行都有一个数字,对应于 X co-ordinate 而 Y co-ordinate 是它所在的行。

要求现已更改为包括 "special events",如果行中的数字后跟“特殊”一词,则会出现尖峰,如下图所示:

目前我能找到的唯一方法是为每个峰值使用一条线,但是可能会有大量这样的特殊事件,因此需要模块化。这似乎是一种高效但糟糕的编程方式。

是否可以将尖峰添加到同一条图表线?或者是否可以只使用一根额外的线并将其断开(不可见)并且只显示应该看到尖峰的位置?

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

Line ChartDataPoints 相连的 因此不可能真正将其分开。然而,通往 DataPoint 的每个段都可以有自己的颜色,其中包括 Color.Transparent 这有助于一个简单的技巧..

不添加额外的SeriesAnnotations,你的两个问题可以这样解决:

  • 要简单地添加您在第二张图中向我们展示的 'spikes',您需要做的就是插入 2 个合适的数据点,第二个与尖峰连接的点相同到。

  • 要添加一条未连接的线,您需要 'jump' 添加一个透明颜色的额外点。

这里有两个示例方法:

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);
}

你可以这样称呼他们:

addSpike(chart1.Series[0], 3, 50d);
addLine(chart1.Series[0], 6, 30d,  80d);

请注意,他们向点集合添加了 2 或 3 个数据点!

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

如果您想保持积分集合不变,您也可以简单地创建一个 'spikes series' 并在其中添加尖峰积分。诀窍是'jump'到新点用透明线!