Frage

Ich habe eine Zeitreihe von Daten, die ich auf einem Diagramm darstellen möchte Zeckenskala eher als eine Zeitskala.

z.B.Wenn die Serie zeitweise erhaltene Punkte enthält:10, 15, 30, 100.Anstatt diese gegen eine reguläre Zeitreihenachse darzustellen, bei der der Abstand zwischen den Punkten 30 und 100 70 betragen würde, möchte ich, dass der Abstand zwischen jedem dieser Punkte beträgt 1 Einheit.Im Wesentlichen möchte ich die Punkte am Punkteindex im zugrunde liegenden Datensatz darstellen.

Kann dies einfach in JFreechart durchgeführt werden?

Ich habe versucht, meine eigene Zeitleiste zu implementieren, aber es wird langsam chaotisch.Ich möchte auch, dass die Beschriftungen die Zeit und nicht die Tick-Nummer widerspiegeln.

War es hilfreich?

Lösung

Ich kenne keine Möglichkeit, ein Diagramm mit Datenelementen zu erstellen, die eine Zeitkoordinate haben, und dann die Zeiten beim Zeichnen zu ignorieren, aber wenn Sie Ihre TimePeriodValues ​​erstellen, können Sie über die durch den Datenpunkt dargestellte TimePeriod lügen um JFreechart davon zu überzeugen, dass sie regelmäßige Abstände haben.Das bedeutet natürlich, dass Sie die Daten manuell vorverarbeiten müssen, um sie zu sortieren und die Ereignisse fortlaufend zu nummerieren (es sei denn, Sie haben bereits Ereignisnummern mit der Serie verknüpft?)

Ich kenne keine Möglichkeit, etwas anderes als die x-Koordinate auf der Achse anzuzeigen, aber Sie können neben jedem Datenpunkt eine Beschriftung anzeigen.(Die Annotation-Demo in der Demo-Sammlung zeigt, wie.)

Andere Tipps

ich behandelt diese gleiche Sache durch einen NumericAxis anstelle eines DateAxis und anschließend die refreshTicksHorizontal Methode überschrieben eine Liste von NumericTicks zu bauen, aber mit dem Label als Datumsangaben formatiert. Es war ein bisschen wie ein Hack, aber bekam den Job für mich getan.

    NumberAxis domainAxis = new NumberAxis("Date") {
        @Override
        protected List refreshTicksHorizontal(Graphics2D g2, Rectangle2D dataArea, RectangleEdge edge) {
            List ticks = new ArrayList();
            //you'll need to have corresponding date objects around
            //or know how to match them up on the graph
            for (int i = 0; i < dates.size(); i++) {
                String label = dateFormat.format(dates.get(i));
                NumberTick tick = new NumberTick(i, label, TextAnchor.TOP_CENTER, TextAnchor.CENTER, 0.0);
                ticks.add(tick);                    
            }
            return ticks;
        }
    };
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top