默认的LineSeries实现按固定值对数据点进行排序。对于这样的数据,这给了我奇怪的结果:
是否可以绘制一个线系列,其中在原始顺序中的点之间绘制线条?
答案 0 :(得分:5)
我目前通过继承LineSeries来解决这个问题:
class UnorderedLineSeries : LineSeries
{
protected override void UpdateShape()
{
double maximum = ActualDependentRangeAxis.GetPlotAreaCoordinate(
ActualDependentRangeAxis.Range.Maximum).Value;
Func<DataPoint, Point> PointCreator = dataPoint =>
new Point(
ActualIndependentAxis.GetPlotAreaCoordinate(
dataPoint.ActualIndependentValue).Value,
maximum - ActualDependentRangeAxis.GetPlotAreaCoordinate(
dataPoint.ActualDependentValue).Value);
IEnumerable<Point> points = Enumerable.Empty<Point>();
if (CanGraph(maximum))
{
// Original implementation performs ordering here
points = ActiveDataPoints.Select(PointCreator);
}
UpdateShapeFromPoints(points);
}
bool CanGraph(double value)
{
return !double.IsNaN(value) &&
!double.IsNegativeInfinity(value) &&
!double.IsPositiveInfinity(value) &&
!double.IsInfinity(value);
}
}
结果:
答案 1 :(得分:0)
值得指出的是,要使用上面的@ hansmaad建议,您需要创建一个新的命名空间并将XAML指向此而不是程序集。 即。
<强> XAML:强>
xmlns:chart="clr-namespace:MyApplication.UserControls.Charting"
<强> C#:强>
using System.Windows.Controls.DataVisualization.Charting;
using System.Windows;
namespace MyApplication.UserControls.Charting {
class Chart : System.Windows.Controls.DataVisualization.Charting.Chart {}
class UnorderedLineSeries : LineSeries {
....
}
}