2011-06-29 5 views
5

Powiedzmy mam zestaw danych o wydajności marchew z różnych dziedzin i różnych ras:ggplot2: Legenda nakładająca się na obszar wykresu - czy możliwe jest ręczne dopasowanie pozycji legendy?

carrots<-list(Yield=c(345,226,74,559,288,194), 
      Field=c("A","B","C","D","E","F"), 
      Breed=rep(c("Long","Short"),each=3)) 
carrots<-data.frame(carrots) 

Chcę wykreślić wykres słupkowy pokazujący wydajność dla każdego pola, kolorowy o rasie:

ggplot(carrots,aes(y=Yield,x=Field,fill=Breed)) + 
    geom_bar() + 
    opts(legend.direction = "horizontal", 
     legend.position = "top") + 
    labs(fill="") 

ale legenda jest zawsze nieco zachodząc na działki:

plot with slight legend overlap http://users.utu.fi/susjoh/Rplot.png

ja już trie d ręcznej regulacji położenia legendy być poza obszar działki, na przykład z

opts(legend.position=c(0.5,1.1) 

ale wtedy marże działka odciąć legendę i nie jestem pewien, w jaki sposób można je dostosować. Czy istnieje bardziej subtelne rozwiązanie tego problemu?

+2

+1 dla powtarzalny przykład , mimo że możesz usunąć drugi etap przygotowania danych, wywołując 'data.frame' zamiast' list'. –

+0

Dzięki Roman, każda rada R jest zawsze doceniana :) – susjoh

Odpowiedz

8

W moim środowisku, legenda nie pokrywają się z działki w ogóle, ale w każdym razie to, co pokrywa się to tło legendy, więc można go usunąć przez:

ggplot(carrots,aes(y=Yield,x=Field,fill=Breed)) + 
geom_bar() + 
opts(legend.direction = "horizontal", 
    legend.position = "top", 
     legend.background = theme_blank()) + # this does hack 
labs(fill="") 
+0

Dziękuję kohske, to jest proste rozwiązanie, którego potrzebowałem. Dziwne, że nie jest to uniwersalne - dla informacji używam R 2.13.0 w Windows. – susjoh