In Die visuelle Darstellung von quantitativen Informationen , prägte Edward Tufte einen Begriff "slopegraph" für eine sehr minimale Art von Diagramm ( mehr Informationen ). Das autoritative Beispiel sieht folgendermaßen aus:
In d3.js gibt es mindestens zwei Implementierungen von slopegraph:
Ich hatte eine Chance auf eine deklarative Implementierung, und auch, um eine 100% Übereinstimmung zwischen Werten in beiden Spalten zu bewahren, aber steckte fest. Wie erwartet, wenn Elemente mit ähnlichen oder gleichen Werten im Datensatz angezeigt werden, überschneiden sich die Grafiken und das Diagramm ist nicht lesbar.
Die naive Version ( Quelle ) verwendet die linear
-Skala für die Berechnung der horizontalen Position, während die Versuch, die Positionen zu "normalisieren" Quelle verwendet die ordinal
-Skala.
Ich glaube, dass bessere Ergebnisse mit der Ordinalskala erzielt werden können, indem der Versatz basierend auf Koordinaten von überlappenden Elementen berechnet wird. Soll der Offset für beide Spalten separat berechnet werden, sollte er im Voraus basierend auf Daten oder im laufenden Betrieb während der Festlegung der Attribute berechnet werden? Wie könnte die Codebasis erweitert werden, so dass Elemente mit denselben Werten untereinander positioniert werden, andere Elemente entsprechend angepasst werden und die Werte in beiden Spalten auf derselben horizontalen Position bleiben?
Ich habe mit Ihrem ersten Beispiel ein bisschen herumgespielt, um das Problem der durcheinandergewürfelten Textbeschriftungen anzugehen, ich bin mir nicht sicher, wie nützlich das sein wird, aber falls es zur Diskussion beiträgt, dachte ich, ich würde es teilen ..
Meine erste Aufgabe bestand darin, den Text um die Textbeschriftungen eines Datenpunkts, über dem man schwebte, auszublenden. Dabei werden Textbeschriftungen ausgewählt, die die Begrenzungsbox der aktuell ausgewählten Beschriftung überlappen, und sie werden auf fast null Deckkraft gesetzt. Ссылка
Ich habe dann versucht, eine Möglichkeit zu finden, die Textbeschriftungen kompakt anzuordnen, so dass sie alle sichtbar sind. Ich habe die Implementierung nicht abgeschlossen, weil sie die Grenzen der Visualisierung zu sehr zu erweitern schien funktioniert derzeit nicht gut, wenn man das Jahr ändert ...), aber es könnte sich lohnen, auf etwas weniger "kompakte" Daten auf etwas wie dieses zu schauen: Ссылка
Edit: Es scheint, dass diese nicht wie vorgesehen in Firefox funktionieren, scheint ein Problem mit getBBox () ..
Gut geschriebene Frage und schöner Startcode mit Debugging-Anweisungen, Requisiten!
Ich bin nicht durch die Programmierung aller Dinge durchgekommen, an die ich gedacht habe, aber zumindest um der Diskussion willen, hier geht es. (Kodierung ist einfach; es ist schwieriger, sich mit dem zu befassen, was zu kodieren ist und wie das aussehen sollte.)
Eine [nicht optimierte] Version, die die lineare Skalierung als Richtlinie verwendet, aber Leerzeichen, die Einträge überlappen, indem alle nachfolgenden Einträge verschoben werden. (Ich denke, dass dies effektiv nur die Y-Achse dehnt; dies macht es leider zu einem sehr großen Bild. Versuchen Sie, näher liegende Jahre zu vergleichen, beispielsweise 2008 und 2009 - das Bild ist nicht so gestreckt.) Ссылка ( gist )
Dieselbe Methode wird auf die Ordinalskala angewendet. Ich bevorzuge die linear
-Skala-Version, weil die ordinal
-Skala-Version nicht versucht, absolute Informationen durch die Steigung zu übermitteln; Dies sorgt jedoch für ein kompakteres Bild. Ссылка ( gist )
Gruppierung von Werten zusammen. (Wird implementiert, wenn Interesse besteht.)
Beachten Sie, dass beide Beispiele 1 und 2 unvollständige Implementierungen sind, aber Sie erhalten die Idee. Wenn beides das ist, was Sie suchen, kann ich sie reparieren.
wollte nur ein weiteres Beispiel von Jefff Clark teilen:
Er hat die Verarbeitung verwendet, behandelt aber einige der oben genannten Probleme sehr elegant (man kann argumentieren, dass es auch mit einer normalisierten Variablen etwas einfacher ist)
Insgesamt hat Jeff damit einen hervorragenden Job gemacht. Ich denke, er zeigt viel Liebe zum Detail. Wäre gespannt auf ein ähnliches Beispiel in D3!
Tags und Links d3.js visualization