Ich arbeite mit diesem exemple, die rondom dynamische Daten in ein TimeSeriesCollection-Diagramm setzen.Speichern/Laden jFreeChart TimeSeriesCollection-Diagramm von XML
Mein Problem ist, dass ich nicht finden können, wie:
1- eine Spur der alten Daten Stellen (der letzten Stunde), wenn sie passieren die linke Begrenzung (weil sich die Datenpunkte von rechts nach links bewegen) des Ansichtsbereichs, indem Sie eine horizontale Bildlaufleiste implementieren.
2- Ist XML eine gute Wahl, um meine Daten zu speichern, wenn ich alle die Geschichte der Daten haben möchte?
public class DynamicDataDemo extends ApplicationFrame {
/** The time series data. */
private TimeSeries series;
/** The most recent value added. */
private double lastValue = 100.0;
public DynamicDataDemo(final String title) {
super(title);
this.series = new TimeSeries("Random Data", Millisecond.class);
final TimeSeriesCollection dataset = new TimeSeriesCollection(this.series);
final JFreeChart chart = createChart(dataset);
final ChartPanel chartPanel = new ChartPanel(chart);
final JPanel content = new JPanel(new BorderLayout());
content.add(chartPanel);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(content);
}
private JFreeChart createChart(final XYDataset dataset) {
final JFreeChart result = ChartFactory.createTimeSeriesChart(
"Dynamic Data Demo",
"Time",
"Value",
dataset,
true,
true,
false
);
final XYPlot plot = result.getXYPlot();
ValueAxis axis = plot.getDomainAxis();
axis.setAutoRange(true);
axis.setFixedAutoRange(60000.0); // 60 seconds
axis = plot.getRangeAxis();
axis.setRange(0.0, 200.0);
return result;
}
public void go() {
final double factor = 0.90 + 0.2 * Math.random();
this.lastValue = this.lastValue * factor;
final Millisecond now = new Millisecond();
System.out.println("Now = " + now.toString());
this.series.add(new Millisecond(), this.lastValue);
}
public static void main(final String[] args) throws InterruptedException {
final DynamicDataDemo demo = new DynamicDataDemo("Dynamic Data Demo");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
while(true){
demo.go();
Thread.currentThread().sleep(1000);
}
}
}
Vielen Dank, aber für den ersten Teil hemm das ist nicht genau das, was ich haben möchte, indem ich die TimeSeries.setMaximumItemAge (long) überprüft habe, dass es das Diagramm komprimiert, um die alten Daten im Ansichtsbereich zu behalten, anstatt hinzuzufügen eine horizontale Bildlaufleiste. weil ich den Graphen behalten möchte wie er war und die alten Daten in der gleichen Zeit verfolgen muss. –
Sie möchten das Modell und die Ansicht weiter trennen. Es wird ein Paging-Ansatz [hier] vorgeschlagen (http://stackoverflow.com/a/6849654/230513). – trashgod