代码之家  ›  专栏  ›  技术社区  ›  LBajlo

如何使用livecharts库缩放和平移多个图表

  •  1
  • LBajlo  · 技术社区  · 6 年前

    我正在使用贝托·罗德里格斯的实况图表制作WPF。我从xml文件中获取图表的数据,然后一个接一个地绘制图表,表示数据的图表在X轴上有相同数量的点,缩放和平移是通过ch启用的。缩放=缩放选项。十、和ch.Pan=平移选项。十、 我的问题是,可以缩放或平移这些图表中的一个(无论是哪一个),并且所有这些图表都被缩放或平移,这样我就可以垂直对齐所有图表的X轴?基本上,如果我在一个图表上缩放或平移,所有其他图表都应该在相同的时间以相同的数量缩放和平移。

    2 回复  |  直到 6 年前
        1
  •  4
  •   Kevin Ross    6 年前

    您需要做的是为每个图的轴上的事件“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
        }
    

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

        2
  •  0
  •   LBajlo    6 年前

    我设法在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++;
            }
    
        }