2012-03-26 12 views
9

Kolejne pytanie z legendzie ggplot!usuwanie legendy warstwy w ggplot

Mam zestaw danych z formularza

test <- data.frame(
    cond = factor(rep(c("A", "B"), each=200)), 
    value = c(rnorm(200), rnorm(200, mean=0.8)) 
) 

Więc dwie grupy i pewne wartości i chcę wykreślić gęstość. Chciałbym także dodać linię wskazującą średnią dla każdej grupy na działce więc:

test.cdf <- ddply(test, .(cond), summarise, value.mean=mean(value)) 

Następnie w zaproszeniu ggplot:

ggplot(test, aes(value, fill=cond)) + 
    geom_density(alpha=0.5) + 
    labs(x='Energy', y='Density', fill='Group') + 
    opts(
    panel.background=theme_blank(), 
    panel.grid.major=theme_blank(), 
    panel.grid.minor=theme_blank(), 
    panel.border=theme_blank(), 
    axis.line=theme_segment() 
) + 
    geom_vline(data=test.cdf, aes(xintercept=value.mean, colour=cond), 
    linetype='dashed', size=1) 

Po uruchomieniu powyższego kodu, można dostać legendę wskazujący każda grupa, ale także jedna dla średniego wskaźnika vline. Moje pytanie brzmi: jak mogę się pozbyć legendy dla geom_vline()?

+1

Zmapowałeś "cond" do wypełnienia, a także kolor. Usunięcie jednego z tych mapowań powinno rozwiązać problem. – Andrie

+0

Czy moja odpowiedź na nic ci się przyda? –

Odpowiedz

15

W zależności od wersji ggplot2, z której korzystasz, pojawia się ten problem. Korzystanie ggplot2 vs 0.9.0 na R2.14.1 otrzymuję ten wykres:

enter image description here

która nie zawiera legendę dla VLINE. W tej wersji ggplot2 można dostosować wystąpienie legendy używając show_guide:

ggplot(test, aes(value, fill=cond)) + 
    geom_density(alpha=0.5) + 
    labs(x='Energy', y='Density', fill='Group') + 
    opts(
    panel.background=theme_blank(), 
    panel.grid.major=theme_blank(), 
    panel.grid.minor=theme_blank(), 
    panel.border=theme_blank(), 
    axis.line=theme_segment() 
) + 
    geom_vline(data=test.cdf, aes(xintercept=value.mean, colour=cond), 
    linetype='dashed', size=1, show_guide = TRUE) 

enter image description here

które reprodukuje problem. Domyślnie: show_guide = FALSE. W starszych wersjach można dodać legend = FALSE do geom_vline, aby pominąć legendę. Dodawanie legend = FALSE nadal działa nadal działa w obecnej wersji, ale generuje ostrzeżenie:

Warning message: 
In get(x, envir = this, inherits = inh)(this, ...) : 
    "legend" argument in geom_XXX and stat_XXX is deprecated. Use show_guide = TRUE or show_guide = FALSE for display or suppress the guide display. 

Polecam modernizacji ggplot2.

+0

Dzięki @Paul ... Aktualizacja ggplota włącza flagę 'show_guide', która robi to, co chcę. Twoje zdrowie. – Hassantm

+1

Od ggplot 2.0.0: 'show_guide' jest przestarzałe. Zamiast tego użyj 'show.legend'. –