Πώς να σχεδιάσετε MULTIPLE LineSeries σε ένα γράφημα OxyPlot;

Πώς να σχεδιάσετε MULTIPLE LineSeries σε ένα γράφημα OxyPlot;

Αυτός είναι ο τρόπος με τον οποίο έχω δημιουργήσει πολλές γραμμές σε ένα γράφημα OxyPlot στο παρελθόν. Το κλειδί είναι η δημιουργία ενός συνόλου DataPoints για κάθε σειρά - που ονομάζονται circlePoints &linePoints στο ακόλουθο παράδειγμα κώδικα, στη συνέχεια συνδέονται με τις CircleSeries και LineSeries:

var xAxis = new DateTimeAxis
{
    Position = AxisPosition.Bottom,
    StringFormat = Constants.MarketData.DisplayDateFormat,
    Title = "End of Day",
    IntervalLength = 75,
    MinorIntervalType = DateTimeIntervalType.Days,
    IntervalType = DateTimeIntervalType.Days,
    MajorGridlineStyle = LineStyle.Solid,
    MinorGridlineStyle = LineStyle.None,
};

var yAxis = new LinearAxis
{
    Position = AxisPosition.Left,
    Title = "Value",
    MajorGridlineStyle = LineStyle.Solid,
    MinorGridlineStyle = LineStyle.None
};

var plot = new PlotModel();
plot.Axes.Add(xAxis);
plot.Axes.Add(yAxis);

var circlePoints = new[]
{
    new ScatterPoint(DateTimeAxis.ToDouble(date1), value1),
    new ScatterPoint(DateTimeAxis.ToDouble(date2), value2),
};

var circleSeries =  new ScatterSeries
{
    MarkerSize = 7,
    MarkerType = MarkerType.Circle,
    ItemsSource = circlePoints
};

var linePoints = new[]
{
    new DataPoint(DateTimeAxis.ToDouble(date1), value1),
    new DataPoint(DateTimeAxis.ToDouble(date2), value2),
};

var lineSeries = new LineSeries
{
    StrokeThickness = 2,
    Color = LineDataPointColor,
    ItemsSource = linePoints
};

plot.Series.Add(circleSeries);
plot.Series.Add(lineSeries);

Επιτυχία!!!!

AwkwardCoder, σας ευχαριστώ για τη βοήθεια, αλλά συνειδητοποίησα ότι το λάθος μου ήταν απλώς ότι είχα παραβλέψει ορισμένα πράγματα!

Εδώ είναι η έκδοση του κώδικα που λειτουργεί:

        // Make a new plotmodel
    private PlotModel model = new PlotModel();

    // Create the OxyPlot graph for Salt Split
    private OxyPlot.Wpf.PlotView plot = new OxyPlot.Wpf.PlotView();

    // Function to plot data
    private void plotData(double numWeeks, double startingSS)
    {
        List<LineSeries> listPointAray = new List<LineSeries>();

        // Initialize new Salt Split class for acess to data variables
        Salt_Split_Builder calcSS = new Salt_Split_Builder();
        calcSS.compute(numWeeks, startingSS, maxDegSS);

        // Create new Line Series
        LineSeries linePoints = new LineSeries() 
        { StrokeThickness = 1, MarkerSize = 1, Title = numWeeks.ToString() + " weeks" };


        // Add each point to the new series
        foreach (var point in calcSS.saltSplitCurve)
        {
            DataPoint XYpoint = new DataPoint();
            XYpoint = new DataPoint(point.Key, point.Value * 100);
            linePoints.Format("%", XYpoint.Y);
            linePoints.Points.Add(XYpoint);
        }

        listPointAray.Add(linePoints);

        // Add Chart Title
        model.Title = "Salt Split Degradation";

        // Add Each series to the
        foreach (var series in listPointAray)
        {
            // Define X-Axis
            OxyPlot.Axes.LinearAxis Xaxis = new OxyPlot.Axes.LinearAxis();
            Xaxis.Maximum = numWeeks;
            Xaxis.Minimum = 0;
            Xaxis.Position = OxyPlot.Axes.AxisPosition.Bottom;
            Xaxis.Title = "Number of Weeks";
            model.Axes.Add(Xaxis);

            //Define Y-Axis
            OxyPlot.Axes.LinearAxis Yaxis = new OxyPlot.Axes.LinearAxis();
            Yaxis.MajorStep = 15;
            Yaxis.Maximum = calcSS.saltSplitCurve.Last().Value * 100;
            Yaxis.MaximumPadding = 0;
            Yaxis.Minimum = 0;
            Yaxis.MinimumPadding = 0;
            Yaxis.MinorStep = 5;
            Yaxis.Title = "Percent Degradation";
            //Yaxis.StringFormat = "{0.00} %";
            model.Axes.Add(Yaxis);

            model.Series.Add(series);
        }


        // Add the plot to the window

        plot.Model = model;
        plot.InvalidatePlot(true);
        SaltSplitChartGrid.Children.Clear();
        SaltSplitChartGrid.Children.Add(plot);

    }

Εδώ είναι τα πολλά πράγματα που έκανα λάθος:

  1. Στο βρόχο της σειράς foreach var, πρόσθετα την αρχική σειρά που είχε ήδη προστεθεί και ΟΧΙ την επόμενη σειρά var στη λίστα! (χαζό!)
  2. Δημιουργούσα ένα νέο μοντέλο κάθε φορά που εκτελούσα τη μέθοδο. Αυτό σημαίνει ότι κάθε φορά που έτρεχε ο κώδικας, πρόσθεσα μια σειρά που υπήρχε ήδη στο προηγούμενο μοντέλο. (επίσης χαζός!)
  3. Δημιουργούσα μια νέα πλοκή κάθε φορά και προσπαθούσα να προσθέσω ένα μοντέλο στη νέα πλοκή που ανήκε ήδη σε προηγούμενη πλοκή. (παίρνει βλέμμα..)
  4. Η γραφική παράσταση προστέθηκε στο πλέγμα κάθε φορά που εκτελούσα τη μέθοδο, επομένως έπρεπε πρώτα να ΚΑΘΑΡΙΣΩ τα παιδιά του πλέγματος πριν προσθέσω ξανά την ίδια γραφική παράσταση.
  5. Δεν ανανέωσα την πλοκή.

Ήταν πολλά λάθη, αλλά τα κατάφερα. Ας ελπίσουμε ότι αυτό θα βοηθήσει κάποιον στο μέλλον. Επίσης, ξέρω ότι δεν χρησιμοποιώ συνηθισμένες τεχνικές δέσμευσης δεδομένων, αλλά αυτό, τουλάχιστον, λειτουργεί.

Τελικό αποτέλεσμα: