我在图表上用从文本文件中读取的数字绘制一条线。文件的每一行上都有一个数字,对应于X坐标,而Y坐标是它所在的行。
现在,要求已更改为包含“特殊事件”,如果该行上的数字后跟特殊字词,则尖峰将显示如下图所示:
目前我能找到的唯一方法是为每个尖峰使用一条线,但是可能存在大量的这些特殊事件,因此需要模块化。这似乎是一种有效且不好的编程方式。
是否可以将尖峰添加到同一图形线?或者是否可以仅使用一条额外的线并使其断开(不可见)并仅显示尖峰的位置?
我已经看过使用条形图,但由于图表上的其他项目我不能。
答案 0 :(得分:4)
DataPoints
Line
的{{1}} 已连接,因此无法真正将其分开。但是,导致Chart
的每个段都可以有自己的颜色,并且包含DataPoint
,这有助于简单的技巧..
如果不添加额外的Color.Transparent
或Series
,您的两个问题就可以解决:
只需添加' spikes'你在第二张图中给我们看,你需要做的就是插入2个合适的数据点,第二个与尖峰连接的点相同。
要添加未连接的线路,您需要跳转'通过添加一个透明色的额外点来开始。
以下是两个示例方法:
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),并将它们包含在参数列表中。
如果你想保持积分不变,你也可以简单地创建一个尖峰系列'并在那里添加尖峰点。诀窍是跳跃'透明线到新点!