我有一个折线图,并且在右侧添加了每个新点后,我希望所有旧折线点在x轴上向左滚动一个点位置,以便它似乎向左滑动。
我已经使用.AddXY来添加所有要填充图表的点,并且可行。
Me.Chart_window.Series( my_series ).Points.AddXY( x_axis_point, y_value)
但是我不知道该怎么办
但是我不知道如何操作.Series.Points DataPointCollection以使显示的线点看起来向左滚动。
我尝试了.RemoteAt(0),但这仅删除了(0)处的点,而不会影响其他点的显示位置。
我想到了在添加新点之前将所有现有点向左复制到一个x轴位置,但是我不知道怎么做。
if CHART_IS_FILLING
' Graph not full of points yet, so new samples appear appending rightward.
' Show previous samples as same as before, and next samples appending:
Me.Chart_antenna_window.ChartAreas("ChartArea1").AxisX.IntervalAutoMode = IntervalAutoMode.VariableCount
' Plot next point:
Me.Chart_antenna_window.Series( present_series_name & "_I" & graph_freq_index).Points.AddXY( x_axis_point, antenna_amplitude_I)
x_axis_point += 1
else ' CHART IS FULL, SO START SLIDING LEFTWARD
' (Overaly graph is now full, so scroll it leftward by deleting leftmost sample before each new sample appended at right.)
' Scroll graph leftward:
' (ie. Remove left-point point, which is now beyond overlay window x-axis (ie. time) size):
' Shift all points leftward:
Me.Chart_antenna_window.Series( present_series_name & "_I" & graph_freq_index).Points.RemoveAt(0)
' HOW DO I SHIFT ALL THE POINTS LEFTWARD? I can't see a way to read a point from DataPointCollection so that I can
' store it in the next index down.
' (All points shift left.)
Me.Chart_antenna_window.ChartAreas("ChartArea1").AxisX.IntervalAutoMode = IntervalAutoMode.VariableCount
' Plot next point at right-most chart point:
Me.Chart_antenna_window.Series( present_series_name & "_I" & graph_freq_index).Points.AddXY( x_axis_point, antenna_amplitude_I)
end if
答案 0 :(得分:0)
这是一个完整的猜测,因为我还没有看到/使用过这种图表功能,但是在删除第一个点后必须循环遍历点的集合,然后将x递减1以将所有点向左移动:< / p>
ForEach p as Point in Me.Chart_antenna_window.Series( present_series_name & "_I" & graph_freq_index).Points
p.X -= 1
Next p
我不确定在Points集合中是哪种类型的对象-希望将其称为Point,但是您可能需要进行调整(也许是图表点或其他)。这些天我也不太适应VB.Net,也许有更短的方式编写foreach-在c#中,如果编译器可以解决问题,我们不必总是声明变量的类型,所以{{ 1}}在c#中可能没问题,也许vb具有等效功能; VB.NET equivalent to C# var keyword可能有帮助
如果您在所有代码之外声明一个指向foreach(var p in ...Points)
的变量,也会对自己有所帮助:
Me.Chart_antenna_window.Series( present_series_name & "_I" & graph_freq_index)
每当您发现自己一遍又一遍地复制并粘贴相同的冗长的代码行时,请对其进行变量引用,并以此来提高代码的可读性
答案 1 :(得分:0)
我建议使用Collection.RemoveAt(index)方法,其中index是要删除的元素的从零开始的索引,在您的情况下为0