2013-08-10 15 views
7

Podczas korzystania z stat_smooth() z geom_point istnieje sposób na usunięcie zacienionego obszaru dopasowania, ale tylko rysowanie jego zewnętrznych granic? Wiem, że mogę usunąć zacieniony obszar z czymś takim:Rysowanie tylko granic funkcji stat_smooth w ggplot2

geom_point(aes(x=x, y=y)) + geom_stat(aes(x=x, y=y), alpha=0) 

ale jak mogę uczynić zewnętrzne granice zewnętrzne nim (krzywe) nadal widoczny jako słabych czarnymi liniami?

+1

nie ma 'geom_stat' . masz na myśli 'stat_smooth'? – agstudy

+0

zgodnie z OP, powinno to być 'c + stat_smooth (fill =" grey50 ", size = 2, alpha = 0)' – Metrics

+1

Istnieje 'stat_smooth' lub' geom_smooth'. – seancarmody

Odpowiedz

11

Można również użyć geom_ribbon z fill = NA.

gg <- ggplot(mtcars, aes(qsec, wt))+ 
     geom_point() + 
     stat_smooth(alpha=0,method='loess') 

rib_data <- ggplot_build(gg)$data[[2]] 

ggplot(mtcars)+ 
    stat_smooth(aes(qsec, wt), alpha=0,method='loess')+ 
    geom_point(aes(qsec, wt)) + 
    geom_ribbon(data=rib_data,aes(x=x,ymin=ymin,ymax=ymax,col='blue'), 
       fill=NA,linetype=1) 

enter image description here

... a jeśli z jakiegoś powodu nie chcesz, pionowe pasy, można po prostu użyć dwóch geom_line warstw:

ggplot(mtcars)+ 
    stat_smooth(aes(qsec, wt), alpha=0,method='loess')+ 
    geom_point(aes(qsec, wt)) + 
    geom_line(data = rib_data,aes(x = x,y = ymax)) + 
    geom_line(data = rib_data,aes(x = x,y = ymin)) 
+1

Mam nadzieję, że nie masz nic przeciwko edycji ... po prostu konsolidacja rzeczy w najwyższej odpowiedzi. – joran

+0

@joran jesteś zawsze mile widziany! – agstudy

8

Są najprawdopodobniej łatwiejsze sposoby, ale możesz spróbować tego jako początek. Łapię danych dla przedziału ufności z ggbuild, które następnie wykorzystują w geom_line

# create a ggplot object with a linear smoother and a CI 
library(ggplot2)  
gg <- ggplot(data = mtcars, aes(x = wt, y = mpg)) + 
    geom_point() + 
    geom_smooth(method = "lm") 
gg 

# grab the data from the plot object 
gg_data <- ggplot_build(gg) 
str(gg_data) 
head(gg_data$data[[2]]) 
gg2 <- gg_data$data[[2]] 

# plot with 'CI-lines' and the shaded confidence area 
ggplot(data = mtcars, aes(x = wt, y = mpg)) + 
    geom_point() + 
    geom_smooth(method = "lm", se = TRUE, size = 1) + 
    geom_line(data = gg2, aes(x = x, y = ymin), size = 0.02) + 
    geom_line(data = gg2, aes(x = x, y = ymax), size = 0.02) 


# plot with 'CI-lines' but without confidence area 
ggplot(data = mtcars, aes(x = wt, y = mpg)) + 
    geom_point() + 
    geom_smooth(method = "lm", se = FALSE, size = 1) + 
    geom_line(data = gg2, aes(x = x, y = ymin), size = 0.02) + 
    geom_line(data = gg2, aes(x = x, y = ymax), size = 0.02) 

enter image description here

Powiązane problemy