如何使用livecharts库缩小和锅盘多个图表



我正在为WPF使用beto-rodriguez的livecharts。我从XML文件中获取图表的数据,并且比我在另一个上方绘制图表,代表数据的图表在X轴和Zoom和Zoom和Pan上具有相同数量的斑点,并且使用CH.ZOOM = ZoomingOptions.x;和ch.pan = panningoptions.x;我的问题可以放大或锅中的一个图表中的哪个图表,并且所有图表都被缩放或放置,以便我在所有图表上垂直对齐X轴?基本上,如果我在一个图表上放大或锅,所有其他图都应同时放大和锅,并以相同的数量放大。

您要做的就是为每个图表上的事件" 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
    }

使用命令和绑定可能还有其他一些很酷的方法,但这至少会让您开始。

我设法垂直执行pan并放大x轴。首先,我创建了一个读取XML并创建为LiveCharts库准备的对象的类

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

相关内容

  • 没有找到相关文章

最新更新