Frage

Ich verwende ggplot2 einige Bullseye Diagramme in R. machen Sie sehen wunderbar, und jeder ist sehr zufrieden - außer, dass sie die Werte des Bullseye haben möchten Schichten auf dem Diagramm dargestellt. Ich würde einfach nur glücklich sein, sie von dem Grundstück in der rechten unteren Ecke zu setzen, oder sogar in dem Plot Margen, aber ich habe einige Schwierigkeiten, dies zu tun.

Hier sind die Beispieldaten wieder:

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

Und wie es plotten:

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

Ich möchte eine Liste hinzuzufügen, sagen wir, die untere rechte Ecke dieser Handlung sagen,

Animals: 50
Bears: 10
PolarBears: 3

Aber ich kann nicht herausfinden, wie. Meine Bemühungen bisher mit annotate() wurden von den Polarkoordinaten teilweise vereitelt. Wenn ich die Zahlen auf den Titel hinzuzufügen, so dass es sein - aber ich habe immer die Hoffnung auf eine elegantere Lösung halten. Vielen Dank im Voraus.

EDIT: Ein wichtiger Hinweis für diejenigen, die kommen nach: Bullseye ist ein Balkendiagramm in Polarkoordinaten abgebildet. Der ggplot2 Standard für Bar Plots ist, sinnvoll, sie zu stapeln. Das bedeutet jedoch, dass die Ringe des Bullseye auch gestapelt werden (zum Beispiel des Radius in meinem Beispiel ist gleich die Summe aller drei Gruppen, 63, anstelle der Größe der größten Gruppe, 50). I nicht denkt, das ist, was die meisten Menschen von einem Bullseye Grundstück erwarten, vor allem, wenn die Gruppen verschachtelt sind. geom_bar(position = position_identity()) Mit werden die gestapelten Ringe in geschichteten Kreise drehen.

EDIT 2: Beispiel von ggplot2 docs:
eingeben Bild Beschreibung hier

War es hilfreich?

Lösung

Sie können die Zahlen der Legende ändern.

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

Andere Tipps

Sie können auch direkt auf das Grundstück hinzuzufügen:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top