我无法在单个图表上绘制多个Y值。以下代码仅适用于单个y值,但不会从同一csv数据文件中绘制多个y值。
csv文件的格式为: datestamp,value 1,value 2,value 3
我可以让图表显示csv文件中的日期戳与任何列y数据点,但不会显示其他y值。
是的,很明显我是OOP和winforms的新手,但我正在努力。在我编程的那天,它是PDP11上的Fortran。
无论如何,这段代码来自这里,但我找不到我要找的答案
表单是图表控件和按钮。
感谢您的帮助
7/27。
这段代码有效,但是有更好的方法可以加载多个Y值吗?
此外,代码已被修订版分解。
如果将它们加载到数据表中,则将数据表绑定到图表。这不会占用内存空间吗?
private void button1_Click(object sender, EventArgs e)
{
// Full path to the data source file
string file = "testlog2.csv";
string path = @"g:\";
// Create a connection string.
string filepPathConnectStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
path + ";Extended Properties=\"Text;HDR=No;FMT=CSVDelimited\"";
// Create Connection Object
OleDbConnection myConnection = new OleDbConnection(filepPathConnectStr);
// Create a database command on the connection using query
string mySelectQuery = "Select * from " + file;
OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection);
// Open the connection and create the reader
myCommand.Connection.Open();
OleDbDataReader myReader = myCommand.ExecuteReader();
// Column 1 is a time value, column 2 is a double
// databind the reader to the chart using the DataBindXY method
Chart1.Series["Series1"].Points.DataBindXY(myReader, "0", myReader, "1");
//Chart1.Series["Series2"].Points.DataBindY(myReader, "3");
myReader.Close();
myConnection.Close();
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
// Full path to the data source file
string file = "testlog2.csv";
string path = @"g:\";
// Create a connection string.
string filepPathConnectStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
path + ";Extended Properties=\"Text;HDR=No;FMT=CSVDelimited\"";
// Create Connection Object
OleDbConnection myConnection = new OleDbConnection(filepPathConnectStr);
// Create a database command on the connection using query
string mySelectQuery = "Select * from " + file;
OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection);
// Open the connection and create the reader
myCommand.Connection.Open();
OleDbDataReader myReader = myCommand.ExecuteReader();
// Column 1 is a time value, column 2 is a double
// databind the reader to the chart using the DataBindY method
Chart1.Series["Series2"].Points.DataBindY(myReader, "3");
myReader.Close();
myConnection.Close();
}
}
}
答案 0 :(得分:0)
您只是1 y列的数据绑定点。如果要显示多个y列,可以执行以下两项操作之一:
而不是数据绑定,手动添加点。这将需要循环遍历csv中的所有行,并为每行添加2个(或更多)点:
series.Points.AddXY(csvLine[0], csvLine[3]);
series.Points.AddXY(csvLine[0], csvLine[4]);
您可以更改不同列中的点的颜色以区分它们,但图例不会反映不同的颜色。
创建多个Series
个对象,并将每个对象数据绑定到不同的y列。像
Series series2 = chart1.Series.Add("Series2");
series2.Points.DataBindXY(myReader, "0", myReader, "4");
然后,您可以将series2
的属性设置为具有不同的颜色等。这是首选方式,因为它可以为您处理很多内容。