2017-03-02 2 views
2

coord_polar Kurven Linien verbinden, manchmal, wenn Sie möchten möglicherweise nicht (dh, wenn der Raum diskret als nicht kontinuierlich):ggplot2: Punkte in Polarkoordinaten mit einer geraden Linie 2

iris %>% gather(dim, val, -Species) %>% 
    group_by(dim, Species) %>% summarise(val = mean(val)) %>% 
    ggplot(aes(dim, val, group=Species, col=Species)) + 
    geom_line(size=2) + coord_polar() 

enter image description here

Eine previous workaround dafür funktioniert nicht mehr. Hat jemand Ideen für eine aktualisierte Problemumgehung?

+2

Es gibt [ggradar] (http://www.ggplot2-exts.org/ggradar.html) wenn Sie das versuchen, oder Sie könnten die Kurven erstellen, die notwendig sind, um gerade Linien mit ggforce zu erstellen, aber generell So stellen polare Graphen Daten dar. – alistaire

+0

Hmm. Für kontinuierliche Achsen würde ich zustimmen, aber nicht unbedingt für teilweise diskreten Raum wie hier. Es scheint mir, dass ggplot durchgesetzt hat, was eigentlich eine ästhetische Entscheidung sein sollte. – geotheory

+0

'ggradar' ist möglicherweise nützlich aber .. – geotheory

Antwort

2

Ein Diagramm in Polarkoordinaten mit durch gerade Linien verbundenen Datenpunkten wird auch als Radarplot bezeichnet.

Es gibt einen Artikel von Erwan Le Pennec: From Parallel Plot to Radar Plot Umgang mit dem Problem, ein Radardiagramm mit ggplot2 zu erstellen.

Er schlägt vor, coord_radar() zu verwenden wie folgt definiert:

coord_radar <- function (theta = "x", start = 0, direction = 1) { 
    theta <- match.arg(theta, c("x", "y")) 
    r <- if (theta == "x") "y" else "x" 
    ggproto("CordRadar", CoordPolar, theta = theta, r = r, start = start, 
      direction = sign(direction), 
      is_linear = function(coord) TRUE) 
} 

Damit können wir die Handlung wie folgt erstellen:

library(tidyr) 
library(dplyr) 
library(ggplot2) 

iris %>% gather(dim, val, -Species) %>% 
    group_by(dim, Species) %>% summarise(val = mean(val)) %>% 
    ggplot(aes(dim, val, group=Species, col=Species)) + 
    geom_line(size=2) + coord_radar() 

enter image description here

coord_radar() ist Teil der ggiraphExtra Paket. So können Sie es verwenden, um direkt

iris %>% gather(dim, val, -Species) %>% 
     group_by(dim, Species) %>% summarise(val = mean(val)) %>% 
     ggplot(aes(dim, val, group=Species, col=Species)) + 
     geom_line(size=2) + ggiraphExtra:::coord_radar() 

Beachten Sie, dass coord_radar() nicht durch das Paket exportiert wird. Daher wird der dreifache Doppelpunkt (:::) benötigt, um auf die Funktion zuzugreifen.

+0

Top Antwort! Bist du zufällig in 'ggirapExtra' involviert? – geotheory

+1

@geotheory Ich bin froh, dass ich eine Lösung gefunden habe. Nein, ich bin nicht involviert in 'ggirapExtra'. Zuerst googelte ich nach "straight lines coord_polar" und fand Erwan Le Pennecs Papier, in dem Hadley Wickham für "coord_radar()" Kredit gegeben wurde.Dann habe ich versucht, den Verweis auf Hadley zu finden, aber ich endete mit [dem Link zu 'coord_radar()' im 'ggirapExtra'-Paket unter RDocumentation] (https://www.rdocumentation.org/packages/ggiraphExtra/versions/ 0.1.0/topics/coord_radar) – Uwe

+0

Gerade gemerkt, dass 'geom_polygon' diese Problemumgehung nicht benötigt. Aber das ist immer noch sehr notwendig für Linien/Pfade. – geotheory

Verwandte Themen