Pregunta

Estoy usando ggplot2 para hacer algunos gráficos de diana en R. Se ven encantadores, y todos están muy contentos, excepto que les gustaría tener los valores de las capas de diana en el gráfico. Me encantaría ponerlos en la esquina inferior derecha de la trama, o incluso en los márgenes de la trama, pero tengo algunas dificultades para hacerlo.

Aquí están los datos de ejemplo nuevamente:

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 trazarlo:

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 agregar una lista a, por ejemplo, la esquina inferior derecha de este diagrama que dice,

Animals: 50
Bears: 10
PolarBears: 3

Pero no puedo entender cómo. Mis esfuerzos hasta ahora 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 tengo la esperanza de una solución más elegante. Gracias de antemano.

EDITAR: Una nota importante para los que vienen después: la diana es un diagrama de barras mapeado a coordenadas polares. El valor predeterminado de ggplot2 para gráficos de barras es, sensiblemente, apilarlos. Sin embargo, eso significa que los anillos de tu 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). no creo que eso es lo que la mayoría de la gente espera de un diagrama de tiro al blanco, 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 documentos:
ingrese la descripción de la imagen aquí

¿Fue útil?

Solución

Puede agregar los números 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=""))

Otros consejos

también puede agregarlo directamente a la trama:

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top