2012-05-09 55 views
6

que puedo usar ggplot2 facilidad para dibujar un gráfico, como a continuación:flechas del diagrama polar ggplot2

1

De hecho, para mis datos, es como a continuación:

 
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 primera columna es el grado (de -180 a 180 o de 0 a 360), la segunda columna son los valores correspondientes. Así que quiero dibujar un gráfico de punto (0,0) a cada uno mi punto de datos con la flecha pero con una circular de coordenadas de la siguiente manera:

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

trato de usar el código de seguimiento:

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) 

Produjo una trama polar, pero no obtuve la flecha recta desde (0,0) a mis puntos de datos.

También trato de usar el paquete plotrix para dibujar este gráfico. Funciona como a continuación:

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

No puedo importar la flecha en este gráfico.

Cómo agregar flechas usando el paquete plotrix, o cómo dibujarlo con ggplot2?

+0

Eche un vistazo a esta publicación: http://stackoverflow.com/questions/42276773/ggplot-connecting-points-in-polar-coordinates-with-a-straight-line – Roland

Respuesta

12

configurar los datos (de 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)) 

Puede obtener las líneas rectas con bastante facilidad - sólo hay que asegurarse de que sus segmentos comienzan en degree en lugar de 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 Agregar flechas, sin embargo, hace que parezca que puede haber un error (?): La transformación de coordenadas no se tiene en cuenta al calcular el ángulo de las flechas:

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

enter image description here Puede (tipo de) vaguear esto dibujando sus propias puntas de flecha:

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

Si se mira de cerca, se puede ver que las puntas de flecha no son perfectamente recto (el efecto es mucho más obvio si haces awid más grande).

+0

¡Muchas gracias! Intento varios valores awid. Parece que awid = 0.5 es mucho mejor que 2. – boyang

+0

PD. Sería una buena idea incluir 'expand_limits (x = c (-180,180))' en tu código para asegurarte de obtener un rango de eje completo ... –

+1

PD: de hecho funciona para expand_limits(), pero también puedes usar scale_x_continuous (limits = c (-180, 180), breaks = c (-90, 0, 90, 180)) para obtener una mejor vista de show (0, 90, 180, -180) – boyang

Cuestiones relacionadas