Ich versuche TimeSeries
Daten in Java mit JFreeChart
zu zeichnen, aber die Daten bestehen aus doubles, die die Ausgabe von Aufrufen an Renjin
sind. Der Code, die Daten an die TimeSeries
hinzuzufügen, ist wie folgt:JFreeChart TimeSeries Axis in nichtmilitärischer Zeit
for (int i=0; i<series2Values.length; i++) {
if (!Double.isNaN(series2Values[i])) {
series2.add(new Hour((int)times[i], new Day()), series2Values[i]);
} else {
series2.add(new Hour((int)times[i], new Day()), null);
}
}
final TimeSeriesCollection dataset2 = new TimeSeriesCollection();
dataset2.addSeries(series2);
JFreeChart chart2 = ChartFactory.createTimeSeriesChart(title, "Time (Hour)", "Vehicles Parked", dataset2, true, true, false);
ChartFrame frame2 = new ChartFrame(title, chart2, false);
frame2.pack();
frame2.setIconImage(img.getImage());
frame2.setVisible(true);
Das Problem ist, dass, wann immer die Daten graphisch dargestellt wird, werden die Zeiten auf der X-Achse in 24-Stunden-militärische Zeit angezeigt, und wenn die time[]
Array enthält alle doppelten Werte der folgenden SeriesException
geworfen wird:
Exception in thread "AWT-EventQueue-0" org.jfree.data.general.SeriesException: You are attempting to add an observation for the time period [6,12/7/2016] but the series already contains an observation for that time period. Duplicates are not permitted. Try using the addOrUpdate() method.
die addOrUpdate()
von der Exception empfohlene Methode wird nur der Punkt eher früher für diese Zeit 12 Stunden anstelle ersten Daten überschreiben, als einen neuen zu machen. Ich möchte stattdessen die Daten im 12-Stunden-Format mit AM und PM anzeigen lassen.
Gibt es eine bequeme Möglichkeit, dies mit JFreeChart
zu tun, oder würde es bequemer sein, den Code zu ändern, so dass meine Anrufe zu Renjin
return etwas formatieren, anstatt einfach nur ganze Zahlen zwischen 1 und 24? (z. B. bereits formatierte Zeitzeichenfolgen)?
große Arbeitete, hatte ich ein bisschen Casting zu tun, und dies war die letzte Zeile des Codes ich musste '((DateAxis) chart2.getXYPlot(). GetDomainAxis()). SetDateFormatOverride (neu Simple ("hh: mm a")); ' – jstrieb