数组到点对列表(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)
};
//现在将它添加到曲线中,就像上面所做的那样
我正在尝试使用 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)
};
//现在将它添加到曲线中,就像上面所做的那样