实时图表WPF需要始终在X轴上显示硬编码步骤

时间:2019-01-25 16:24:57

标签: c# wpf charts livecharts

我正在尝试做一些我认为应该很容易的事情。 我想显示均匀分布的1到30值,因为我进行了代表30分钟数据的数据运行。有时有500个数据点,但有时又有数千个(尽管我可以轻松确定点数)。

基本上,我在Xaxis上的代码如下所示,但它没有满足我的要求。代码下面是正在发生的情况的屏幕截图,下面是我想要的屏幕截图。

        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
            }
        });

当前的错误图表(试图为每个数据点贴上分钟标签) Bug Chart 只需要30分钟的标签(也许我的算法计算步骤需要调整,目前我将数据点总数除以30) Desired 我看了这两篇文章,但这是一个不同的问题 LiveChart doesn't show all Labels on x-axis WPF

Force all axis labels to show

1 个答案:

答案 0 :(得分:1)

问题在于,实时图表为每个点标签生成,并且标签数必须是点数。有两种解决方法。

首先,您更改ChartValues<double> to ChartValues<ObservablePoint>

chart.Series = new LiveCharts.SeriesCollection()
{
    new LineSeries()
    {
        Title = "Some series",
        Values = new ChartValues<ObservablePoint>
        {
            new ObservablePoint(1,5),
            new ObservablePoint(1.5,7.6),
            new ObservablePoint(2,21),
            new ObservablePoint(5,25),
            new ObservablePoint(10,30),
            new ObservablePoint(17,30),
            new ObservablePoint(19.6,30),
            new ObservablePoint(30,40),

        }
    }
};
chart.AxisX = new LiveCharts.Wpf.AxesCollection()
{
    new LiveCharts.Wpf.Axis()
    {
        Title= "Minutes",
        Separator = new LiveCharts.Wpf.Separator()
        {
            Step = 1.0,
            IsEnabled = false
        }

    }
};

请注意,在可观察点中,您指定了X和Y。点之间的距离可能不同(不规则间隔)

第二种解决方案可能是通过以下方式定义了标签数组,因此您使标签数组与点数一样大,但是您声明只有30个项目,其余项目为空。

chart.AxisX.First().Labels = new List<string>() { "1", "","2","","","3",.... "30" };