如何使折线图中的所有点都显示为向左滚动,并在右侧添加每个新点

时间:2019-06-17 22:17:36

标签: c# vb.net charts

我有一个折线图,并且在右侧添加了每个新点后,我希望所有旧折线点在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

2 个答案:

答案 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