Frage

Ich habe eine JFreeChart Liniendiagramm, das für jede Iteration meines Algorithmus dynamisch mit einem Datenpunkt aktualisiert wird. Da die Anzahl der Datenpunkte schnell sehr groß werden kann, habe ich die setFixedAutoRange (double) Methode auf der Domäne-Achse. Dies schränkt die Kurve, die die n letzte Iterationen (200 in meinem Fall) zur Anzeige.

Das funktioniert gut, außer während der ersten 200 Iterationen. Das Problem ist, dass, bis es 200 Iterationen worden ist, wobei die Achse negative Werte enthält (beispielsweise nach 50 Iterationen, ist der Bereich von -150 bis 50). Negative Wiederholungen machen keinen Sinn. Ich mag die Achse bei Null beginnen, anstatt einem negativen Wert. Wie kann ich erreichen das?

Ich habe nichts dagegen, ob die Achse von 0 bis 200 geht zunächst (mit dem rechten Teil des Diagramms leer gelassen, bis die Handlung es füllt sich), oder ob es beginnt bei 0 bis 1 und wächst (so dass die Handlung immer über die volle Breite des Diagramms) gestreckt. Entweder wäre akzeptabel, obwohl ich eine leichte Präferenz für das ehemalige haben.

Dinge, die ich habe versucht:

Irgendwelche Ideen?

War es hilfreich?

Lösung

Es sieht aus wie Sie nach einer Lösung suchen, die JFreeChart beinhaltet die Konfiguration, es zu tun für Sie, anstatt manuell den Bereich einstellen.

Ich kann nicht helfen .... aber hier sind einige andere hässliche Lösungen: P ....

Sie könnten so etwas wie diese (sorry für den Pseudo-Code) tun:

while(producingData) {
   this.produceData();
   if(!allDataButton.isSelected()) {
      domainAxis.setRange((count < 200) ? 0 : count-200), count);
    } else {
      domainAxis.setRange(0, count);
    }
}

Wenn ich ein Perl-Coder waren, habe ich es so schreiben würde, nur um es ein smidget schwerer zu lesen: P

while(producingData) {
   this.produceData();
   domainAxis.setRange(
       (((count < 200) || allDataButton.isSelected()) ? 0 : count-200), count);

}

Andere Tipps

Ich traf das gleiche Problem, das ich mit gelöst:

axis.setAutoRangeMinimumSize(100); // Ensures graph always shows at least 0-100.
axis.setRangeType(RangeType.POSITIVE);

Ich bin mit JFreeChart v1.0.14. Vielleicht haben sie einen Fehler mit setAutoRangeType fixiert, da wurde die Frage ursprünglich geschrieben?

Ein Nachteil dieses Ansatzes ist, dass die Null-Werte sind nicht sichtbar.

Ich habe jetzt eine funktionierende Lösung, obwohl ich in besseren Ansätzen immer noch interessiert bin,

Am Anfang habe ich den Bereich der Domain-Achse auf einen festen Bereich von 0 bis 200:

domainAxis.setRange(0, 200);

In dem Code, der die Daten an den Plot fügt hinzu, überprüfe ich, um zu sehen, ob es der 200. Wert ist, der hinzugefügt wird, und wenn es schalte ich den Bereich auf einen festen Auto Bereich von 200 Dies funktioniert, wenn es eine ist wenig klobig (zumal ich auch prüfen, ob der Benutzer die Option ausgewählt hat das feste Fenster vollständig zu deaktivieren und es wird alle Werte angezeigt werden).

if (!allDataButton.isSelected() && count == 200)
{
    domainAxis.setAutoRange(true);
    domainAxis.setFixedAutoRange(200);
}
  

Dinge, die ich habe versucht:

     

setLowerBound Aufruf nicht spielen   schön mit setFixedAutoRange. Berufung   setRangeType (RangeType.POSITIVE)   scheint keinen Unterschied zu machen.   Irgendwelche Ideen?

Haben Sie versucht, axis.setRange(0, 200);

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top