1

我正在使用 beto-rodriguez 的 WPF 实时图表。我从 xml 文件中获取图表的数据,然后在另一个之上绘制图表,表示数据的图表在 X 轴上具有相同数量的点,并且使用 ch.Zoom = ZoomingOptions.X 启用 ZOOM 和 PAN;和 ch.Pan = PanningOptions.X; 我的问题是可以缩放或平移这些图表中的一个(无关紧要),并且所有这些图表都被缩放或平移,以便我垂直对齐所有图表的 X 轴?基本上,如果我在一个图表上缩放或平移,所有其他图表都应该同时缩放和平移相同的数量。

4

2 回答 2

4

您需要做的是为每个图形轴上的事件“RangeChanged”创建一个事件处理程序

<lvc:CartesianChart.AxisX>
            <lvc:Axis Title="Time" RangeChanged="Axis_RangeChanged" Separator="{x:Static lvc:DefaultAxes.CleanSeparator}" DisableAnimations="True" />
        </lvc:CartesianChart.AxisX>

然后,在事件处理程序中,您可以提取轴的新最小值和最大值,并将其应用于页面上的所有图表

private void Axis_RangeChanged(LiveCharts.Events.RangeChangedEventArgs eventArgs)
    {
        //sync the graphs
        double min = ((Axis)eventArgs.Axis).MinValue;
        double max= ((Axis)eventArgs.Axis).MaxValue;

        this.lvcChart2.AxisX[0].MinValue = min;
        this.lvcChart2.AxisX[0].MaxValue = max;

        this.lvcChart.AxisX[0].MinValue = min;
        this.lvcChart.AxisX[0].MaxValue = max;

        //Repeat for as many graphs as you have
    }

通过使用命令和绑定可能还有其他一些很酷的方法,但这至少可以帮助您入门。

于 2017-11-28T14:58:30.980 回答
0

我设法在 X 轴上垂直平移和缩放。首先,我创建了一个读取 xml 并创建为实时图表库准备的对象的类,然后我动态创建图表并为每个轴命名

            Axis axisX = new Axis();
            Axis axisY = new Axis();
            axisX.Name = "X";
            axisY.Name = "Y";

然后创建一个在范围更改时触发的事件,如@Kevin Ross提到的,并在该事件循环的方法中通过所有轴并检查轴的名称,然后像这样更改 minValue 和 maxValue :

        void axisX_RangeChanged(LiveCharts.Events.RangeChangedEventArgs eventArgs)
    {
        double min = ((Axis)eventArgs.Axis).MinValue;
        double max = ((Axis)eventArgs.Axis).MaxValue;


        int p = 0;
        string name;
        foreach (Axis CartChart in FindVisualChildren<Axis>(TestGrid))
        {
            // do something with CartChart here
            name = CartChart.Name;
            if (name == "Y")
            {
                continue;
            }
            else if (name == "X")
            {
                CartChart.MinValue = min;
                CartChart.MaxValue = max;
            }

            p++;
        }

    }
于 2017-11-29T18:58:42.103 回答