您可以按照“section”列将数据分开,并使用节名称作为索引进入“Series”集合,而不使用“i”。
最好将部分名称用作“Series.Name”。我建议使用一个包含两个数字和字符串并将它们收集在“List<Dataclass>”中的数据类。然后为不同的部分创建“Series”。 然后循环遍历它们。
以下是一些代码示例:
定义您的数据的“class”:
public class Data3
{
public int N1 { get; set;}
public double N2 { get; set;}
public string S1 { get; set;}
public Data3(double n2, int n1, string s1)
{
N1 = n1; N2 = n2; S1 = s1;
}
}
选择您自己的名称!可选但始终建议:添加一个好的
ToString()
重载!
声明一个类级变量:
List<Data3> data = new List<Data3>()
在读取数据时,这里有一些需要注意的地方:
data.Add(new Data3(Convert.ToDouble(pieces[1]), Convert.ToInt32(pieces[0]), pieces[2]))
首先创建Series
来绘制图表:
var sections= data.Select(x => x.S1).Distinct<string>()
foreach (string s in sections)
chart.Series.Add(new Series(s) { ChartType = SeriesChartType.Line })
然后绘制数据;这些系列可以按其名称
进行索引:
foreach (var d in data) chart.Series[d.S1].Points.AddXY(d.N1, d.N2);
我省略了将代码集成到您的应用程序中的细节;如果遇到问题,请通过编辑您的问题展示新代码!
几个注意事项:
- 当不确定时,始终创建一个类来保存您的数据。
- 当不确定时,始终选择类而不是结构体。
- 当不确定时,始终选择
List<T>
而不是数组。
- 尽量将您的代码分解为具有有用名称的小块。
例如:要读取 csv 文件中的所有数据,请创建一个函数来执行此操作。
public void AppendCsvToDataList(string file, List<Data3> list)
{
if (File.Exists(file))
{
var lines = File.ReadAllLines(file);
for (int l = 1; l < lines.Length; l++)
{
var pieces = lines[l].Split(',');
list.Add(new Data3(Convert.ToInt32(pieces[1]),
Convert.ToDouble(pieces[0]), pieces[2]));
}
}
}