数组到点对列表(ZedGraph)

array to pointpairlist (ZedGraph)

我正在尝试使用 ZedGraph 显示一些数据。数据是从文件中读取的,然后存储在一个名为 heart_rate[x] 的数组中,我试图将其传递给点对列表,但是,它不接受字符串数组。经过搜索,我认为它需要先转换为 double 。我已经试过了,但没有成功。

下面是通过从文件中读取数据来创建数组的代码。理想情况下我不想更改它,因为我有其他数组以相同的方式编写,这将需要重新编写整个程序。

                for (x = 0; x < hrm_data.Length; x = x + 6)
                {
                    heart_rate.Add(hrm_data[x]);
                }

这是我设置 ZedGraph 的地方,显然缺少将数组传递给点对列表的代码。

            GraphPane myPane = z_graph.GraphPane;
            myPane.Title = "HRM Data";
            myPane.XAxis.Title = "Time";
            myPane.YAxis.Title = "Readings";                
            PointPairList heart_rate_list = new PointPairList();                                             
            LineItem heart_rate_curve = myPane.AddCurve("Heart Rate", heart_rate_list, Color.Red, SymbolType.Diamond);                
            z_graph.AxisChange();

编辑

这是我正在读取的文件的示例。第一列数据是心率读数,使用 for 循环我只选择第一列并将其添加到数组中

91 43 56 78 45 78
91 43 56 78 45 78
91 43 56 78 45 78
91 43 56 78 45 78

编辑 2

感谢您提供的所有帮助,我真的很感激,但是,我认为我让每个人都对我的要求感到困惑。这是一个学生项目,我知道一些同学已经完成了这个可以提供帮助。

您应该能够简单地获取 hrm_data 的字符串项,拆分它们,选择拆分的第一项并使用 Double.Parse 方法转换为 double:s .

然后使用 PointPairList(double[], double[]) 构造函数(参见 here)创建所需的点对列表:

PointPairList heart_rate_list = new PointPairList(
    Enumerable.Range(0, hrm_data.Length).Select(i => (double)i).ToArray(),
    hrm_data.Select(item => Double.Parse(item.Split(' ')[0])). ToArray());

请注意,x 坐标是通过创建一个索引集合生成的,该索引集合被转换为 double 集合。

是的,正如您提到的代码不完整。

  PointPairList heart_rate_list = new PointPairList(); 

既然你已经定义了列表,但你忘了为它设置参数。基本上是 (x,y) ..因此你必须输入所有数组值作为 x 或 y 的参数之一。只是使用 foreach 循环插入数组的值。 //将 int x 作为秒数的时间添加使用

        foreach(int value in heart_rate) 
       {        y=value;
         heart_rate_list.Add(x,y)
        };

//现在将它添加到曲线中,就像上面所做的那样