How to refresh oxyplot plot when data changes

前端 未结 7 1350
予麋鹿
予麋鹿 2021-02-07 02:10

\"GUI

Oxyplot graphs 13 points which are derived from the 6 user input text boxes. The values in

7条回答
  •  醉话见心
    2021-02-07 02:38

    After having the same question with the same issue, it would seem that the only working solution (at least to my point of view) is as followed :

    PlotView.InvalidatePlot(true)

    Doing so, after updating one or multple Series do refresh your PlotView.

    The refresh rate depends on how often, or at which rate your serie(s) is/are updated.

    Here is a code snippet (on Xamarin Android but should work anyway) :

    PlotView resultsChart = FindViewById(Resource.Id.resultsChart);
    PlotModel plotModel = new PlotModel
    {
        // set here main properties such as the legend, the title, etc. example :
        Title = "My Awesome Real-Time Updated Chart",
        TitleHorizontalAlignment = TitleHorizontalAlignment.CenteredWithinPlotArea,
        LegendTitle = "I am a Legend",
        LegendOrientation = LegendOrientation.Horizontal,
        LegendPlacement = LegendPlacement.Inside,
        LegendPosition = LegendPosition.TopRight
        // there are many other properties you can set here
    }
    
    // now let's define X and Y axis for the plot model
    
    LinearAxis xAxis = new LinearAxis();
    xAxis.Position = AxisPosition.Bottom;
    xAxis.Title = "Time (hours)";
    
    LinearAxis yAxis = new LinearAxis();
    yAxis.Position = AxisPosition.Left;
    yAxis.Title = "Values";
    
    plotModel.Axes.Add(xAxis);
    plotModel.Axes.Add(yAxis);
    
    // Finally let's define a LineSerie
    
    LineSeries lineSerie = new LineSeries
     {
        StrokeThickness = 2,
        CanTrackerInterpolatePoints = false,
        Title =  "Value",
        Smooth = false
      };
    plotModel.Series.Add(lineSerie);
    resultsChart.Model = plotModel;
    

    Now, whenever you need to add DataPoints to your LineSerie and to updated automatically the PlotView accordingly, just do as followed :

    resultsChart.InvalidatePlot(true);
    

    Doing so will automatically refresh your PlotView.

    On a side note, the PlotView will also be updated when an event occurs such as a touch, a pinch to zoom, or any kind of UI-related events.

    I hope I could help. I had trouble with this for a very long time.

提交回复
热议问题