Wpf 动态显示图表绘图仪滚动水平轴

Wpf 动态显示图表绘图仪滚动水平轴,wpf,charts,dynamic-data-display,Wpf,Charts,Dynamic Data Display,由于缺乏文档,我对这个库仍然相当粗略 我有一个ChartPlotter对象,它通过从设备捕获数据实时显示数据。 每当我有来自设备的新数据时,都会调用以下事件: private void OnRawDataChanged(object sender, RawDataChangedEventArgs e) { System.Diagnostics.Debugger.Log(0, "event", "event received from data manager\n"

由于缺乏文档,我对这个库仍然相当粗略

我有一个ChartPlotter对象,它通过从设备捕获数据实时显示数据。 每当我有来自设备的新数据时,都会调用以下事件:

    private void OnRawDataChanged(object sender, RawDataChangedEventArgs e)
    {
        System.Diagnostics.Debugger.Log(0, "event", "event received from data manager\n");
        System.Diagnostics.Debugger.Log(0, "event", e.NewRawDataSet.Length + " tuples of data returned\n");

        var batchSize = e.NewRawDataSet.Length;

        // Expected tuples of 2 values + 2 threshold values
        Point[][] points = new Point[4][];

        for (int i = 0; i < 4; i++)
        {
            points[i] = new Point[batchSize];
        }

        double period = 1.0 / Properties.Settings.Default.SamplingRate;

        for (int i = 0; i < batchSize; i++)
        {
            // Time is expressed in milliseconds
            double t = e.NewRawDataSet[i].Time / 1000.0;

            points[0][i] = new Point(t, e.NewRawDataSet[i].Sensors[0]);
            points[1][i] = new Point(t, e.NewRawDataSet[i].Sensors[1]);
            points[2][i] = new Point(t, parentForm.PressureHisteresysOpen);
            points[3][i] = new Point(t, parentForm.PressureHisteresysClose);
        }

        plotter.Dispatcher.Invoke(DispatcherPriority.Normal,
            new Action(() =>
                {
                    sensor0.AppendMany(points[0]);
                    sensor1.AppendMany(points[1]);
                    pressureOpen.AppendMany(points[2]);
                    pressureClose.AppendMany(points[3]);
                }));
    }
private void OnRawDataChanged(对象发送方,RawDataChangedEventArgs e)
{
System.Diagnostics.Debugger.Log(0,“事件”,“从数据管理器接收的事件\n”);
System.Diagnostics.Debugger.Log(0,“事件”,e.NewRawDataSet.Length+“返回的数据元组\n”);
var batchSize=e.NewRawDataSet.Length;
//应为2个值+2个阈值的元组
点[][]点=新点[4][];
对于(int i=0;i<4;i++)
{
点[i]=新点[batchSize];
}
双周期=1.0/Properties.Settings.Default.SamplingRate;
对于(int i=0;i
{
传感器0.多个(点[0]);
传感器1.多个(点[1]);
压力附录(点[2]);
压力关闭。许多(点[3]);
}));
}
使用图表绘图仪的标准设置,图形将自动适应窗口。 我想让水平轴自动向左滚动,仅显示最后10秒(例如)的捕获。有没有办法做到这一点


感谢

要实现此目的,您必须修改plotter.ViewPort.Visible属性。此属性接受使用值构造的DataRect对象以形成矩形。每次收到新数据时,都必须重新计算该矩形,以便图形滚动到视图

以下是构造DataRect的示例:

        double yMin = 1;
        double yMax = 10;
        double xMin = 1;
        double xMax = 10;
        plotter.ViewPort.Visible = new DataRect(xMin, yMin, xMax - xMin, yMax - yMin); 
mins和maxs将基于轴上的数据类型