C# 以编程方式创建 xyseries
C# Programmatically creating xyseries
我正在尝试以编程方式为我的 Datatable
的每一列创建一个 XyDataSeries
以用于图表 (SciChart)。我需要这样做是因为事先不知道列的数量和名称。
对于任何给定的系列,x 值始终只是从 0 开始递增的整数,y 值是列值。
我正在将 excel 数据导入 Datatable
,然后将每一列作为 List
传递给 Dictionary
,其中 header 列是List
的名称由以下;
dict = dt.Columns.Cast<DataColumn>().ToDictionary(c => c.ColumnName, c => dt.AsEnumerable().Select(r => r[c]).ToList());
我可以在 Dictionary<string, XyDataSeries<double, double>>
的地方做类似上面的事情吗?
假设我确实知道列的数量和它们的名称,我可以为每个 column/list 做这样的事情;
手动创建 XyDataSeries
并遍历列表以附加值。然后,我将图表(在 XAML 中定义)的 chartseries.DataSeries 设置为相应的 XyDataSeries
.
var list = dict["ListName"];
XyDataSeries<double, double> xyseries;
xyseries = new XyDataSeries<double, double>() { SeriesName = "ListName" };
foreach (var i in list)
{
double x = 1;
var d = Convert.ToDouble(i);
xyseries.Append(x++, d);
}
chartseries.DataSeries = xyseries;
我还必须在 XAML 中声明系列 - 我可以解决这个问题吗?
虽然必须这样做超过 600 次远非理想,但我真的非常渴望为此找到一个优雅的解决方案。
Can i do something like the above where Dictionary<string, XyDataSeries<double, double>>
?
ToDictionary
方法接受 Func<TSource, TElement>
作为它的第二个参数。因此,您可以在其中创建和填充 XyDataSeries<double, double>
。像这样:
dict = dt.Columns.Cast<DataColumn>()
.ToDictionary(c => c.ColumnName, c =>
{
var dataSeries = new XyDataSeries<double, double>();
double x = 1.0;
dataSeries.Append(dt.AsEnumerable().Select(_ => x++), dt.AsEnumerable().Select(r => Convert.ToDouble(r[c])));
return dataSeries;
});
我正在尝试以编程方式为我的 Datatable
的每一列创建一个 XyDataSeries
以用于图表 (SciChart)。我需要这样做是因为事先不知道列的数量和名称。
对于任何给定的系列,x 值始终只是从 0 开始递增的整数,y 值是列值。
我正在将 excel 数据导入 Datatable
,然后将每一列作为 List
传递给 Dictionary
,其中 header 列是List
的名称由以下;
dict = dt.Columns.Cast<DataColumn>().ToDictionary(c => c.ColumnName, c => dt.AsEnumerable().Select(r => r[c]).ToList());
我可以在 Dictionary<string, XyDataSeries<double, double>>
的地方做类似上面的事情吗?
假设我确实知道列的数量和它们的名称,我可以为每个 column/list 做这样的事情;
手动创建 XyDataSeries
并遍历列表以附加值。然后,我将图表(在 XAML 中定义)的 chartseries.DataSeries 设置为相应的 XyDataSeries
.
var list = dict["ListName"];
XyDataSeries<double, double> xyseries;
xyseries = new XyDataSeries<double, double>() { SeriesName = "ListName" };
foreach (var i in list)
{
double x = 1;
var d = Convert.ToDouble(i);
xyseries.Append(x++, d);
}
chartseries.DataSeries = xyseries;
我还必须在 XAML 中声明系列 - 我可以解决这个问题吗?
虽然必须这样做超过 600 次远非理想,但我真的非常渴望为此找到一个优雅的解决方案。
Can i do something like the above where
Dictionary<string, XyDataSeries<double, double>>
?
ToDictionary
方法接受 Func<TSource, TElement>
作为它的第二个参数。因此,您可以在其中创建和填充 XyDataSeries<double, double>
。像这样:
dict = dt.Columns.Cast<DataColumn>()
.ToDictionary(c => c.ColumnName, c =>
{
var dataSeries = new XyDataSeries<double, double>();
double x = 1.0;
dataSeries.Append(dt.AsEnumerable().Select(_ => x++), dt.AsEnumerable().Select(r => Convert.ToDouble(r[c])));
return dataSeries;
});