2009-09-14 10 views
6

Ich benutze Ggplot2, um einige Bullseye-Charts in R zu machen. Sie sehen entzückend aus, und alle sind sehr zufrieden - außer dass sie die Werte der Bullseye-Schichten auf dem Chart haben möchten. Ich würde mich freuen, sie einfach in die untere rechte Ecke der Handlung oder sogar in die Grundstücksgrenzen zu legen, aber ich habe einige Schwierigkeiten damit.Mehr Bullseye Plotting in R

Hier ist 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 zeichnen:

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 mag würde, eine Liste zu, sagen wir, die untere rechte Ecke dieser Zeichnung hinzuzufügen sagen ,

Animals: 50 
Bears: 10 
PolarBears: 3 

Aber ich kann nicht herausfinden, wie. Meine bisherigen Bemühungen mit annotate() sind teilweise durch die Polarkoordinaten vereitelt worden. Wenn ich dem Titel die Nummern hinzufügen muss, so sei es - aber ich hoffe immer auf eine elegantere Lösung. Danke im Voraus.

EDIT: Eine wichtige Anmerkung für diejenigen, die kommen: das Bullseye ist ein Balkendiagramm, das Polarkoordinaten zugeordnet ist. Der ggplot2 Standard für Balkendiagramme ist vernünftigerweise, sie zu stapeln. Dies bedeutet jedoch, dass die Ringe Ihres Bullseye ebenfalls gestapelt werden (z. B. entspricht der Radius in meinem Beispiel der Summe aller drei Gruppen, 63, anstatt der Größe der größten Gruppe, 50). I nicht denke, das ist, was die meisten Menschen von einem Bullseye-Plot erwarten, vor allem, wenn die Gruppen verschachtelt sind. Wenn Sie geom_bar(position = position_identity()) verwenden, werden die gestapelten Ringe in geschichtete Kreise umgewandelt.

EDIT 2: Beispiel aus ggplot2 docs:
enter image description here

+0

keine Notwendigkeit, einmal Ihre Frage entschuldigend sein. Gute Fragen und ich habe gelernt, die Antworten zu lesen. –

+1

Meistens nur entschuldigend für das Zeichnen von Bullaugen, besonders in Serien. Barplots sind viel einfacher zu vergleichen (zumindest für mich). –

Antwort

4

Sie die Zahlen der Legende hinzufügen könnte.

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

Sie können es auch direkt auf dem Grundstück hinzu:

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

Beide gute Antworten! Ich gab nur die beste Antwort, denn das war der Weg, den ich gegangen bin. –