C# 实时图表WPF需要始终在X轴上显示硬编码的步骤
我正在尝试做一些我认为应该很容易的事情。 我想显示1到30的值,间隔均匀,因为我运行的数据表示30分钟的数据。有时有500个数据点,但有时有数千个(尽管我可以很容易地确定点的数量) 基本上,我为Xaxis编写的代码是这样的,但它并不是我想要的。代码下面是正在发生的事情的截图,下面是我想要的截图C# 实时图表WPF需要始终在X轴上显示硬编码的步骤,c#,wpf,charts,livecharts,C#,Wpf,Charts,Livecharts,我正在尝试做一些我认为应该很容易的事情。 我想显示1到30的值,间隔均匀,因为我运行的数据表示30分钟的数据。有时有500个数据点,但有时有数千个(尽管我可以很容易地确定点的数量) 基本上,我为Xaxis编写的代码是这样的,但它并不是我想要的。代码下面是正在发生的事情的截图,下面是我想要的截图 cartChart.AxisX.Add(new Axis { // TODO fix this to acutally show real time
cartChart.AxisX.Add(new Axis
{
// TODO fix this to acutally show real time
Title = "Minutes",
//Labels= { "1", "2", "4", "6", "8", "10", "12", "14", "16", "18", "20", "22", "24", "26", "28", "30" },
Separator = new LiveCharts.Wpf.Separator
{
Step = listOfChartValues[i].Count / 30 > 0 ? listOfChartValues[i].Count / 30 : 1, // this is making the assumtion that data arrivals follow uniform distribution
IsEnabled = false
}
});
当前错误图表(尝试为每个数据点添加分钟标签)
只需要30分钟的标签(可能我计算步长的算法需要调整,目前我将数据点总数除以30)
我看了这两篇文章,但这是一个不同的问题
问题在于,实时图表为每个点标签生成,标签的数量必须是点的数量。这个问题有两种解决办法 首先将
ChartValues更改为ChartValues
chart.Series=新的LiveCharts.SeriesCollection()
{
新LineSeries()
{
Title=“一些系列”,
值=新值
{
新观测点(1,5),
新观测点(1.5,7.6),
新观测点(2,21),
新观测点(5,25),
新观测点(10,30),
新观测点(17,30),
新观测点(19.6,30),
新观测点(30,40),
}
}
};
chart.axix=new LiveCharts.Wpf.AxesCollection()
{
新的LiveCharts.Wpf.Axis()
{
Title=“分钟”,
Separator=newlivecharts.Wpf.Separator()
{
阶跃=1.0,
IsEnabled=false
}
}
};
请注意,在观测点中指定X和Y。点之间的距离可能不同(不规则间隔)
第二种解决方案是,您可以按照以下方式定义标签数组,这样您可以使标签数组与点数一样大,但您声明只有30个项目,其余项目为空
chart.AxisX.First().Labels = new List<string>() { "1", "","2","","","3",.... "30" };
chart.axix.First().Labels=newlist(){“1”、“2”、“2”、“3”、“30”};
问题在于,live chart为每个点标签生成,标签的编号必须是点的编号。这个问题有两种解决办法
首先将ChartValues更改为ChartValues
chart.Series=新的LiveCharts.SeriesCollection()
{
新LineSeries()
{
Title=“一些系列”,
值=新值
{
新观测点(1,5),
新观测点(1.5,7.6),
新观测点(2,21),
新观测点(5,25),
新观测点(10,30),
新观测点(17,30),
新观测点(19.6,30),
新观测点(30,40),
}
}
};
chart.axix=new LiveCharts.Wpf.AxesCollection()
{
新的LiveCharts.Wpf.Axis()
{
Title=“分钟”,
Separator=newlivecharts.Wpf.Separator()
{
阶跃=1.0,
IsEnabled=false
}
}
};
请注意,在观测点中指定X和Y。点之间的距离可能不同(不规则间隔)
第二种解决方案是,您可以按照以下方式定义标签数组,这样您可以使标签数组与点数一样大,但您声明只有30个项目,其余项目为空
chart.AxisX.First().Labels = new List<string>() { "1", "","2","","","3",.... "30" };
chart.axix.First().Labels=newlist(){“1”、“2”、“2”、“3”、“30”};
这是问题的解决方案,但卡斯帕的回答很有教育意义,帮助我找到了这个解决方案。因此,我接受了他的回答,因为他值得表扬
我解决这个问题的方法是:在创建图表时,我将绑定到ListofLabelValues;创建图表后,我将编辑添加到此列表,如代码底部循环所示:
private List<string> listOfLableValues = new List<string>();
//... other WPF code
// loop through all charts and to create them
SeriesCollection = new SeriesCollection
{
new StepLineSeries
{
Values = listOfChartValues[i],
PointGeometry = null,
// Fill = Brushes.Transparent
},
};
//... other Livecharts code
int lableCount = 1;
for (int i = 0; i < listOfChartValues.Count; i++)
{
listOfChartValues[i].AddRange(de.ListOfListPlottedAmpData[i]);
if (0 == i % (listOfChartValues[i].Count / 30))
listOfLableValues.Add(lableCount++.ToString());
else
listOfLableValues.Add("");
}
private List listofLabelValues=new List();
//... 其他WPF代码
//循环浏览所有图表并创建它们
SeriesCollection=新的SeriesCollection
{
新Steplines系列
{
Values=listOfChartValues[i],
PointGeometry=null,
//填充=画笔。透明
},
};
//... 其他Livecharts代码
int-lableCount=1;
for(int i=0;i
这是问题的解决方案,但卡斯帕的回答很有教育意义,帮助我找到了这个解决方案。因此,我接受了他的回答,因为他值得表扬
我解决这个问题的方法是:在创建图表时,我将绑定到ListofLabelValues;创建图表后,我将编辑添加到此列表,如代码底部循环所示:
private List<string> listOfLableValues = new List<string>();
//... other WPF code
// loop through all charts and to create them
SeriesCollection = new SeriesCollection
{
new StepLineSeries
{
Values = listOfChartValues[i],
PointGeometry = null,
// Fill = Brushes.Transparent
},
};
//... other Livecharts code
int lableCount = 1;
for (int i = 0; i < listOfChartValues.Count; i++)
{
listOfChartValues[i].AddRange(de.ListOfListPlottedAmpData[i]);
if (0 == i % (listOfChartValues[i].Count / 30))
listOfLableValues.Add(lableCount++.ToString());
else
listOfLableValues.Add("");
}
private List listofLabelValues=new List();
//... 其他WPF代码
//循环浏览所有图表并创建它们
SeriesCollection=新的SeriesCollection
{
新Steplines系列
{
Values=listOfChartValues[i],
PointGeometry=null,
//填充=画笔。透明
},
};
//... 其他Livecharts代码
int-lableCount=1;
for(int i=0;i