我可以从数组创建折线图吗?

时间:2014-07-08 15:36:18

标签: arrays vb.net charts series

我有6个数据数组longs。我想找到一种方法将所有六个数组图形化为Chart Control上的单独行。

我已经创建了Chart对象,在我的Series Collection Editor我有6个成员,但我找不到一个按chart1.series1.setData(myArray)行做某事的函数。

我知道我可以通过并在每个点上调用.add(),但我想知道是否有直接的方法将数组分配给Series

2 个答案:

答案 0 :(得分:3)

除了数据绑定之外,没有内置方法可以添加整个范围。正如您所说,您可以调用系列中AddXY属性(或类型Points中的一个相关方法)的DataPointCollection方法,如下所示:

'Add data from Array1 to the first series of the chart
Chart.Series(0).Points.Clear() 'Clear all points
For i = 0 to Array1.Count - 1
   Chart.Series(0).Points.AddXY(i, Array1(i)) 'Adds the data from the array to the first series
Next

如果您拥有多维数据(例如Dim Data()() As Long),则可以执行类似

的操作
For a = 0 to Data.Count - 1
   Chart.Series(a).Points.Clear() 'Clear all points from the ath series
   For i = 0 to Data(a).Count - 1
      Chart.Series(a).Points.AddXY(i, Data(a)(i)) 'Adds the data from the ath array to the ath series
   Next      
Next

注意,由于您没有提供进一步的信息,因此X值只是一个索引(0到数组的计数 - 1)。

或者您可以在新的Module

中编写扩展方法
Public Module Extensions
    <System.Runtime.CompilerServices.Extension>
    Public Sub AddRange(d As System.Windows.Forms.DataVisualization.Charting.DataPointCollection, data() As Long)
        Dim meCount As Integer = d.Count
        For i = 0 To data.Count - 1
            d.AddXY(meCount + i, data(i))
        Next
    End Sub
End Module

现在,您只需为该系列的AddRange属性调用Points方法:

Chart.Series(0).Points.AddRange(Array1)

答案 1 :(得分:2)

你可以通过Jens提到的逐点添加来实现,这可以找到。另一种应该正常工作的方法是:

For a as integer = 0 to AmountOfSeries.count - 1 step 1
    Chart1.Series(a).Points.DataBindXY(ArrayX1, ArrayY1)
Next

这可能更接近您所寻找的 - 一种将两个数组设置为系列的方法。

这里只有一个系列会是什么样子:

Dim xs As Double() = {0, 1, 2, 3, 4}
Dim ys As Double() = {0, 1, 2, 3, 4}
Chart1.Series(0).Points.DataBindXY(xs, ys)