Domanda

Sto usando ggplot2 per creare alcuni grafici di bullseye in R. Sembrano deliziosi e tutti sono molto contenti - tranne che vorrebbero che i valori degli strati di bullseye fossero tracciati sul grafico. Sarei felice solo di metterli nell'angolo in basso a destra della trama, o anche nei margini della trama, ma ho qualche difficoltà a farlo.

Ecco di nuovo i dati di esempio:

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 come tracciarlo:

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

Vorrei aggiungere un elenco, diciamo, nell'angolo in basso a destra di questa trama dicendo,

Animals: 50
Bears: 10
PolarBears: 3

Ma non riesco a capire come. I miei sforzi finora con annotate () sono stati vanificati, in parte dalle coordinate polari. Se devo aggiungere i numeri al titolo, così sia - ma continuo sempre a sperare in una soluzione più elegante. Grazie in anticipo.

EDIT: Una nota importante per coloro che vengono dopo: il bullseye è un diagramma a barre mappato su coordinate polari. L'impostazione predefinita di ggplot2 per i grafici a barre è, logicamente, impilarli. Tuttavia, ciò significa che anche gli anelli del tuo occhio di bue saranno accatastati (ad esempio il raggio nel mio esempio è uguale alla somma di tutti e tre i gruppi, 63, invece della dimensione del gruppo più grande, 50). Non non penso che sia quello che la maggior parte delle persone si aspetta da un complotto, soprattutto quando i gruppi sono nidificati. L'uso di geom_bar (position = position_identity ()) trasformerà gli anelli sovrapposti in cerchi a strati.

EDIT 2: esempio tratto da ggplot2 docs:
inserisci qui la descrizione dell'immagine

È stato utile?

Soluzione

Potresti aggiungere i numeri alla legenda.

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

Altri suggerimenti

puoi anche aggiungerlo direttamente alla 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top