2009-09-14 7 views
6

Estoy usando ggplot2 para hacer algunos diagramas de diana en R. Parecen encantadores, y todos están muy contentos, excepto que les gustaría tener los valores de las capas de ojo de buey trazadas en el gráfico. Sería feliz solo ponerlos en la esquina inferior derecha de la trama, o incluso en los márgenes de la trama, pero estoy teniendo algunas dificultades para hacer esto.Más diagonales en R

Aquí está el ejemplo de datos de nuevo:

critters <- structure(list(Zoo = "Omaha", Animals = 50, Bears = 10, PolarBears = 3), .Names = c("Zoo", 
"Animals", "Bears", "PolarBears"), row.names = c(NA, -1L), class = "data.frame") 

Y cómo trazar que:

d <- data.frame(animal=factor(c(rep("Animals", critters$Animals), 
     rep("Bears", critters$Bears), rep("PolarBears", critters$PolarBears)), 
     levels = c("PolarBears", "Bears", "Animals"), ordered= TRUE)) 
grr <- ggplot(d, aes(x = factor(1), fill = factor(animal))) + geom_bar() + 
    coord_polar() + labs(x = NULL, fill = NULL) + 
    scale_fill_manual(values = c("firebrick2", "yellow2", "green3")) + 
    opts(title = paste("Animals, Bears and Polar Bears:\nOmaha Zoo", sep="")) 

Me gustaría añadir una lista de, digamos, la esquina inferior derecha de esta parcela diciendo ,

Animals: 50 
Bears: 10 
PolarBears: 3 

Pero no puedo entender cómo. Mis esfuerzos hasta el momento con annotate() se han visto frustrados, en parte por las coordenadas polares. Si tengo que agregar los números al título, que así sea, pero siempre espero tener una solución más elegante. Gracias por adelantado.

EDIT: Una nota importante para los que vienen después: el bullseye es un diagrama de barras mapeado a coordenadas polares. El valor predeterminado de ggplot2 para gráficos de barras es, de manera sensata, apilarlos. Sin embargo, eso significa que los anillos de su diana también se apilarán (por ejemplo, el radio en mi ejemplo es igual a la suma de los tres grupos, 63, en lugar del tamaño del grupo más grande, 50). I no creo que eso es lo que la mayoría de la gente espera de un argumento diana, especialmente cuando los grupos están anidados. El uso de geom_bar(position = position_identity()) convertirá los anillos apilados en círculos en capas.

EDIT 2: Ejemplo de ggplot2 docs:
enter image description here

+0

hay necesidad de pedir disculpas en pedir a su pregunta. Buenas preguntas y aprendí cosas leyendo las respuestas. –

+1

En su mayoría solo se disculpa por trazar toros, especialmente en series. Barplots son mucho más fáciles de comparar (para mí, al menos). –

Respuesta

4

podría añadir el número a la leyenda.

library(ggplot2) 
critters <- structure(list(Zoo = "Omaha", Animals = 50, Bears = 10, PolarBears = 3), .Names = c("Zoo", "Animals", "Bears", "PolarBears"), row.names = c(NA, -1L), class = "data.frame") 
d <- data.frame(animal=factor(c(rep("Animals", critters$Animals), 
     rep("Bears", critters$Bears), rep("PolarBears", critters$PolarBears)), 
     levels = c("PolarBears", "Bears", "Animals"), ordered= TRUE)) 
levels(d$animal) <- apply(data.frame(table(d$animal)), 1, paste, collapse = ": ") 
ggplot(d, aes(x = factor(1), fill = factor(animal))) + geom_bar() + 
    coord_polar() + labs(x = NULL, fill = NULL) + 
    scale_fill_manual(values = c("firebrick2", "yellow2", "green3")) + 
    opts(title = paste("Animals, Bears and Polar Bears:\nOmaha Zoo", sep="")) 
5

también se puede añadir directamente a la parcela:

grr <- ggplot(d, aes(x = factor(1), fill = factor(animal))) + geom_bar() + 
coord_polar() + labs(x = NULL, fill = NULL) + 
scale_fill_manual(values = c("firebrick2", "yellow2", "green3")) + 
opts(title = paste("Animals, Bears and Polar Bears:\nOmaha Zoo", sep=""))+ 
geom_text(y=c(3,10,50)-3,label=c("3","10","50"),size=4) 
grr 
+0

¡Ambas buenas respuestas! Acabo de dar la otra mejor respuesta porque esa es la ruta que seguí. –

Cuestiones relacionadas