2013-09-26 18 views
5

Występuje problem z zamianą alfa moich (kolorowych) punktów w legendzie po dodaniu stat_smooth.Zmienia poziom alfa punktu geom w legendzie nad stat_smooth

require(ggplot2) 

set.seed(1052) 
dx <- runif(2000,0,10) 
dy <- dx * rep(c(1,-1), each = 1000) + rnorm(2000,0,1) 
dcol <- rep(c(TRUE, FALSE), each = 1000) 
dd <- data.frame(x = dx, y = dy, col = dcol) 

gg <- ggplot(dd) + aes(x = x, y = y, colour = col) + geom_point(alpha = 1/5) 
gg 

The legend is cloudy.

alfa punktów przenosi się do legendy (podejmowania kolory trudne do widzenia), ale this question pokazuje, że można zastąpić dane legendy z guides:

magic <- guides(colour = guide_legend(override.aes = list(alpha = 1))) 
gg + magic 

It's fixed!

Cool. Ale kiedy rzucam stat_smooth, magia przestaje działać.

gg + stat_smooth(method = "lm") 

Line is solid, but point has low alpha.

gg + stat_smooth(method = "lm") + magic 

I don't know what happened here.

Jak mogę rozwiązać ten problem? Wolałbym mieć poniżej wynik dla legendy (białe tło, linia i punkt z alpha = 1. (Kwestie wydaje się odejść, jeśli używasz geom_line i nie stat_smooth)

gg + geom_line(alpha = 1/10) + magic 

Huh.

+1

Może to być błąd. Problem polega na standardowej wstążce błędu. Jeśli ustawisz 'se = FALSE' w' geom_smooth' rzeczy znów będą działały. Co się dzieje, to że ustawiasz 'alpha' dla punktów, ale' geom_smooth' ustawia inną alfa dla wstążki. Kiedy zastępujesz alfa legendy, jest on stosowany zarówno do punktów, jak i do szarego wypełnienia. Jeszcze nie wymyśliłem obejścia ... – joran

+1

... jedną z opcji jest ustawienie 'show_guide = FALSE' w' geom_smooth', ale wtedy tracisz linie w legendzie. – joran

+1

wypróbuj 'stat_smooth (method =" lm ", se = FALSE)' jeśli nie potrzebujesz SE. – kohske

Odpowiedz

2

Jeśli chcesz aby uzyskać klucz legendy za pomocą linii i punktu oraz bez tła, można dodać fill=NA do wnętrza - spowoduje to usunięcie szarego wypełnienia klawisza legendy, który jest ustawiony z powodu przedziałów ufności stat_smooth() (se=TRUE). Następnie można zmienić theme() i legend.key= bac kground do białego.

ggplot(dd, aes(x = x, y = y, colour = col)) + geom_point(alpha = 1/5)+ 
    stat_smooth(method = "lm")+ 
    guides(colour = guide_legend(override.aes = list(alpha = 1,fill=NA))) + 
    theme(legend.key=element_rect(fill="white")) 

enter image description here

Powiązane problemy