Erstellen eines polaren Histogramms

8

Polare Histogramme können sehr nützlich sein, um gestapelte Balkendiagramme mit mehreren Einträgen zu zeichnen. Ein Beispiel ist im Bild unten des Zielbilds angegeben. Dies kann in R mit ggplot2 leicht gemacht werden. Eine ähnliche Funktion wie 'Rose' in Matlab scheint ein solches Ergebnis nicht zuzulassen.

Als Ausgangspunkt, hier ist was ich habe:

  • Skript
%Vor%
  • Funktion polarHist

%Vor%
  • Funktion makewedge
%Vor%

Das Ergebnis ist immer noch weit von der Ausgabe von ggplot2 entfernt, aber ich denke, das ist ein Anfang. Ich habe Probleme, eine Legende hinzuzufügen (Zeilen von l ) ...

    
s__C 27.06.2016, 12:35
quelle

2 Antworten

6

Das schien ein interessantes Problem zu sein, also habe ich es versucht. Der Code muss möglicherweise etwas optimiert werden (wie unten beschrieben), aber Sie können eine allgemeine Vorstellung davon bekommen, wie Sie etwas so darstellen können. Wie Sie sehen werden, verwende ich indirekt Suevers Vorschlag bezüglich der rose Plots.

  

Ich bin mir nicht sicher, wann ich Zeit finden kann, das zu perfektionieren, also wenn jemand helfen möchte, dies zu verbessern, lass es mich wissen und ich werde ein Github Repo eröffnen.

%Vor%

Ergebnisse in:

Mittelmäßig bekommen wir das auch:

Bekannte Fehler / Probleme:

  1. Die patch -Objekte, die aus line -Objekten extrahiert werden, erzeugen manchmal Kanten, an denen es keine geben sollte, was zu einigen seltsamen Formen im Plot führt (dies geschieht die meiste Zeit mit zufällig generierten Daten, führen Sie sie aus) und du wirst sehen, was ich meine).
  2. Die Werte von R / G / B müssen skaliert werden, genau wie die Gitterlinien skaliert werden, um den weißen Kreis in der Mitte zu berücksichtigen, der 20% des Radius einnimmt.
  3. Das Raster der weißen Ringe muss annotiert werden (d. h. "20%", "40%" usw.). Ein intelligenter Weg sollte gefunden werden, wo sie platziert werden, damit die Daten so wenig wie möglich stören.
  4. Ein Code wird repliziert, anstatt in einer Funktion platziert zu werden.
  5. Die legend fehlt.
Dev-iL 30.06.2016, 13:11
quelle
8

Sie können Ihr Problem vereinfachen, indem Sie hist verwenden, um die akkumulierten Bins für jedes Element zu erhalten, es dann auf einen Prozentsatz zu normieren und es als polar gestapelte Balken mit Patches zu plotten.

Nehmen wir zum Beispiel an, dass Ihre Daten aus 30 Elementen mit je 1000 Samples bestehen und jedes Sampling 1, 2 oder 3 sein kann.

%Vor%

Sie können normale gestapelte Balken plotten, um die Daten zu visualisieren

%Vor%

Sie können die gleichen Werte wie Polarkoordinaten verwenden, indem Sie pol2cart verwenden. Wenn Sie alle Farbbalken in einem Patch zeichnen, können Sie legend für diese Patches aufrufen

%Vor%

    
Noel Segura Meraz 30.06.2016 16:58
quelle

Tags und Links