Wie kann ich Achsenskalierung und -intervalle automatisch berechnen?

8

Weiß jemand, wo ich einen Algorithmus finden kann, der eine Reihe von Werten (Daten) für eine Achse gibt, kann ich eine vernünftige Skala und Tick Intervall berechnen?

    
Donotalo 25.10.2008, 11:32
quelle

2 Antworten

6

Das Tick-Intervall hängt von Ihrem Anzeigebereich ab. Sie müssen die Breite Ihres Graphen (ich gehe davon aus, dass die Zeit auf der X-Achse ist) und die Breite einer Datumszeichenkette in der ausgewählten Schriftart berücksichtigen, um eine gute Skalierung zu erhalten.

Der grundlegende Algorithmus wird ungefähr so ​​aussehen.

  • Durchsuchen Sie die Liste der Daten, um die minimalen und maximalen Werte zu finden.
  • Dividieren Sie die Breite des Diagramms durch die Breite der Datumszeichenfolge (dies kann einmal geschehen, wobei das Ergebnis in einer Variablen gespeichert wird, wenn * beide * Breiten konstant sind). Dieser Schritt wird einfacher, wenn Sie eine Schriftart mit fester Breite und ein Datumsformat MM-TT-JJJJ verwenden. Wenn Sie eine Schriftart mit variabler Breite und ein Datumsformat verwenden, in dem Sie den Namen des Monats angeben, müssen Sie der Zeichenfolge zusätzliche Auffüllung hinzufügen, um sicherzustellen, dass jede Datumszeichenfolge dieselbe Breite hat. Beachten Sie, dass ich extra padding gesagt habe. Auch wenn Sie ein festes Datumsformat verwenden, sollten Sie es mit mindestens einem Leerzeichen auffüllen, um Engpässe zu vermeiden. Ich nenne diesen Wert "Ticks", weil genau so viele Ticks auf Ihrer Achse basierend auf der Breite Ihres Graphen passen.
  • Berechnen Sie, wie viele Tage zwischen Ihren Mindest- und Höchstdaten (einschließlich) liegen. Wie Sie dies tun, hängt davon ab, welche Sprache Sie verwenden. Hoffentlich haben Sie gute Date- und Calendar-Implementierungen, auf die Sie zurückgreifen können. Ich nenne diesen Wert 'Tage'.
  • Berechnen Sie das Tick-Intervall mit der Formel 'interval = days / (ticks - 1)'.
  • Bestimmen Sie, welche Tage auf Tick-Intervalle fallen, indem Sie Ihrem Mindestdatum "Intervall" hinzufügen, bis Sie Ihr maximales Datum erreicht haben. Dies hängt wiederum davon ab, welche Sprache Sie verwenden.
Bill the Lizard 25.10.2008 12:56
quelle
1

Ich habe die jQuery Flot Grafikbibliothek verwendet. Es ist Open Source und macht die Achsen- / Tickgenerierung sehr gut. Ich schlage vor, es ist Code und kneifen einige Ideen von dort.

    
Tom 27.10.2008 05:42
quelle

Tags und Links