2009-09-14 10 views
6

Używam ggplot2 do robienia wykresów bullseye w R. Wyglądają wspaniale, a wszyscy są bardzo zadowoleni - poza tym, że chcieliby, aby wartości warstw tarcz były naniesione na wykresie. Byłbym szczęśliwy, gdyby włożyłem je w prawy dolny róg fabuły, a nawet w marginesie fabuły, ale mam z tym trudności.Więcej plotek w R

Oto przykładowe dane ponownie:

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

i jak go wykreślić:

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

chciałbym dodać listę do, powiedzmy, dolny prawy róg tej działki mówiąc ,

Animals: 50 
Bears: 10 
PolarBears: 3 

Ale nie mogę wymyślić jak. Moje dotychczasowe wysiłki z annotate() zostały udaremnione, częściowo przez współrzędne biegunowe. Jeśli muszę dodać liczby do tytułu, niech tak będzie - ale zawsze mam nadzieję na bardziej eleganckie rozwiązanie. Z góry dziękuję.

EDYCJA: Ważna informacja dla tych, którzy przychodzą po: bullseye to wykres słupkowy zmapowany do współrzędnych biegunowych. Domyślnie ggplot2 dla wykresów słupkowych polega na ustawieniu ich w stos. Oznacza to jednak, że pierścienie twojego cielska również zostaną ułożone (np. Promień w moim przykładzie jest równy sumie wszystkich trzech grup, 63, zamiast wielkości największej grupy, 50). I Do not Myślę, że to, czego większość ludzi oczekuje od wykresu bullseye, zwłaszcza gdy grupy są zagnieżdżone. Użycie geom_bar(position = position_identity()) zmieni ułożone pierścienie w wielowarstwowe koła.

EDIT 2: Przykład z ggplot2 docs:
enter image description here

+0

nie trzeba być przepraszali zadając pytanie. Dobre pytania i nauczyłem się rzeczy czytających odpowiedzi. –

+1

Przeważnie po prostu przepraszam za kreślenie bullseye, zwłaszcza w seriach. Barplots są znacznie łatwiejsze do porównania (przynajmniej dla mnie). –

Odpowiedz

4

Można dodać numery do legendy.

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

można także dodawać je bezpośrednio do działki:

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

Obie dobre odpowiedzi! Po prostu dałem drugą najlepszą odpowiedź, bo to była moja droga. –

Powiązane problemy