2012-05-09 13 views
6

posso usare ggplot2 facilmente a tracciare un grafico come qui di seguito:ggplot2 frecce diagramma polare

1

Infatti, per i miei dati, è come di seguito:

 
degree value 
1 120 0.50 
2 30 0.20 
3 -120 0.20 
4 60 0.50 
5 150 0.40 
6 -90 0.14 
7 -60 0.50 
8 0 0.60 

La prima colonna è il grado (da -180 a 180 o da 0 a 360), la seconda colonna corrisponde ai valori corrispondenti. Quindi voglio disegnare un punto grafico da (0,0) ad ogni mio punto di dati con la freccia, ma con una circolare coordinata come di seguito:

2 http://www.matrixlab-examples.com/image-files/polar_plots_1.gif

cerco di usare il codice seguente:

base <- ggplot(polar, aes(x=degree, y=value)) 
p <- base + coord_polar() 
p <- p + geom_segment(aes(x=0, y=0, xend=degree, yend=value),  arrow=arrow(length=unit(0.3,"cm"))) 
print(p) 

Ha prodotto una trama polare, ma non ho ottenuto la freccia diritta da (0,0) ai miei punti dati.

cerco anche di usare il pacchetto plotrix per disegnare questo grafico. Funziona come di seguito:

3 http://rgm2.lab.nig.ac.jp/RGM_results/plotrix:polar.plot/polar.plot_001_med.png

Non riesco a importare freccia in questo grafico.

Come aggiungere frecce utilizzando il pacchetto plotrix, o come disegnare con ggplot2?

+0

Dai un'occhiata a questo post: http://stackoverflow.com/questions/42276773/ggplot-connecting-points-in-polar-coordinates-with-a-straight-line – Roland

risposta

12

impostare i dati (da dput):

polar <- structure(list(degree = c(120L, 30L, -120L, 60L, 150L, -90L, 
-60L, 0L), value = c(0.5, 0.2, 0.2, 0.5, 0.4, 0.14, 0.5, 0.6)), .Names = c("degree", 
"value"), class = "data.frame", row.names = c(NA, -8L)) 

È possibile ottenere le rette abbastanza facilmente - basta assicurarsi che i segmenti partono da degree piuttosto che 0:

library(ggplot2) 
base <- ggplot(polar, aes(x=degree, y=value)) 
p <- base + coord_polar() 
p+ geom_segment(aes(y=0, xend=degree, yend=value)) 

enter image description here L'aggiunta di frecce, tuttavia, fa sembrare che possa esserci un errore (?) - la trasformazione delle coordinate non viene presa in considerazione nel calcolo dell'angolo delle frecce:

library(grid) 
p+ geom_segment(aes(y=0, xend=degree, yend=value) , 
       arrow=arrow(length=unit(0.3,"cm"))) 

enter image description here È possibile (o quasi) hack in giro questa disegnando le proprie punte di freccia:

awid <- 2 
p + geom_segment(aes(y=0, xend=degree, yend=value))+ 
    geom_segment(aes(y=value-0.05,yend=value,x=degree-awid/value,xend=degree))+ 
    geom_segment(aes(y=value-0.05,yend=value,x=degree+awid/value,xend=degree)) 

enter image description here

Se si guarda da vicino, si può vedere che le frecce non sono perfettamente dritto (l'effetto è molto più evidente se ingrandisci awid).

+0

Grazie mille! Provo diversi valori stupendi. Sembra che AWID = 0.5 è molto meglio di 2. – boyang

+0

PS che sarebbe una buona idea includere 'expand_limits (x = c (-180.180))' nel codice per essere sicuri di ottenere una gamma completa asse ... –

+1

PS Funziona davvero per expand_limits(), ma puoi anche usare scale_x_continuous (limits = c (-180, 180), breaks = c (-90, 0, 90, 180)) per ottenere una vista migliore che mostri (0, 90, 180, -180) – boyang