2013-08-10 26 views
7

Khi sử dụng stat_smooth() với geom_point là có cách nào để loại bỏ vùng phù hợp với bóng mờ, nhưng chỉ vẽ các giới hạn bên ngoài của nó? Tôi biết tôi có thể loại bỏ các khu vực bóng mờ với một cái gì đó như:Chỉ vẽ các ranh giới của stat_smooth trong ggplot2

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

nhưng làm thế nào tôi có thể làm cho các giới hạn bên ngoài của nó (đường cong bên ngoài) vẫn có thể nhìn thấy như đường màu đen mờ nhạt?

+1

Không có 'geom_stat' . bạn có nghĩa là 'stat_smooth'? – agstudy

+0

theo OP, nó phải là 'c + stat_smooth (fill =" grey50 ", size = 2, alpha = 0)' – Metrics

+1

Có 'stat_smooth' hoặc' geom_smooth'. – seancarmody

Trả lời

11

Bạn cũng có thể sử dụng geom_ribbon với 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

... và nếu vì một lý do bạn không muốn các thanh dọc, bạn chỉ có thể sử dụng hai geom_line lớp:

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

Hy vọng bạn không nhớ chỉnh sửa ... chỉ cần hợp nhất mọi thứ vào câu trả lời hàng đầu. – joran

+0

@joran bạn luôn được chào đón! – agstudy

8

Có nhiều cách dễ dàng nhất, nhưng bạn có thể thử điều này như một sự khởi đầu. Tôi lấy dữ liệu cho khoảng tin cậy với ggbuild, mà tôi sau đó sử dụng trong 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

Các vấn đề liên quan