Pergunta

Eu estou usando ggplot2 para fazer alguns gráficos bullseye em R. Eles olham delicioso, e todos estão muito satisfeitos - exceto que eles gostariam de ter os valores das camadas bullseye plotados no gráfico. Eu ficaria feliz apenas para colocá-los no canto inferior direito da trama, ou mesmo nas margens do enredo, mas eu estou tendo alguma dificuldade de fazer isso.

Aqui está o exemplo dados novamente:

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")

E como traçar-lo:

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=""))

Eu gostaria de adicionar uma lista para, digamos, no canto inferior direito desta trama dizendo:

Animals: 50
Bears: 10
PolarBears: 3

Mas eu não posso descobrir como. Meus esforços até agora com annotate() foram frustrados, em parte, pelas coordenadas polares. Se eu tenho que adicionar os números para o título, que assim seja - mas eu sempre manter a esperança para uma solução mais elegante. Agradecemos antecipadamente.

EDIT: Uma nota importante para aqueles que virão depois: o alvo é um gráfico de barras mapeado para coordenadas polares. O padrão ggplot2 para os gráficos de barra é, de forma sensata, para empilhá-los. No entanto, o que significa que os anéis de seu alvo também serão empilhados (por exemplo, o raio na minha exemplo é igual à soma de todos os três grupos, 63, em vez do tamanho do maior grupo, 50). I NÃO acho que isso é o que a maioria das pessoas esperam de uma trama alvo, especialmente quando os grupos são aninhados. Usando geom_bar(position = position_identity()) irá transformar os anéis empilhados em círculos em camadas.

EDIT 2: Exemplo de ggplot2 docs:
enter descrição da imagem aqui

Foi útil?

Solução

Você pode adicionar os números para a lenda.

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=""))

Outras dicas

Você também pode adicioná-lo diretamente ao terreno:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top