2016-03-31 11 views
1

Momentan werden meine Daten in einer LineSeries mit beiden Achsen numerisch angezeigt. Der X-Wert jedes Punktes ist ein sehr kleines Zeitintervall. Ich muss diesen Wert auf eine benutzerdefinierte Weise anzeigen. Ich möchte vermeiden, ein DateTimeAxis für die Daten zu verwenden, wenn möglich. Kann ich die LinearAxis auf eine bestimmte Art formatieren?LinearAxis StringFormat zum Anzeigen einer DateTime?

Antwort

1

Dies scheint für mich zu arbeiten. Ich hoffe, ich interpretiere hier nichts falsch, die Antwort ist zu einfach.

//Start point of the data (arbitrary in this example) 
var startOfData = DateTime.Now.Subtract(TimeSpan.FromDays(1)); 

//https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx 
var formatString = "m.ss.fffff"; 

Func<double, string> labelFormatter = 
    milliseconds => 
     startOfData 
      .Add(TimeSpan.FromMilliseconds(milliseconds)) 
      .ToString(formatString); 

Verwendungsbeispiel:

var pm = new PlotModel(); 
pm.Axes.Add(new OxyPlot.Axes.LinearAxis { Position = AxisPosition.Left }); 
pm.Axes.Add(new OxyPlot.Axes.LinearAxis { Position = AxisPosition.Bottom, LabelFormatter = labelFormatter }); 

Random random = new Random(Guid.NewGuid().GetHashCode()); 

var datapoints = 
    Enumerable.Range(1, 100) 
     .Select(milliseconds => new DataPoint(milliseconds, random.Next(0, 10))); 

var lineSeries = new OxyPlot.Series.LineSeries(); 
lineSeries.Points.AddRange(datapoints); 

pm.Series.Add(lineSeries); 

Show(pm); 

Komplette Arbeits LINQPad Skript hier https://github.com/kennethito/StackOverflowReferences/blob/master/Oxyplot-CustomAxis/oxyplot.linq

enter image description here

+0

Dank Kenneth. Ich vertraue darauf, dass Ihre Lösung funktioniert, aber ich hatte noch keine Gelegenheit, sie zu validieren. Ich werde es bald tun (12-24 Stunden, Gott will) und updaten. – Daniel

Verwandte Themen