2012-09-14 28 views
19

Tôi đã cố gắng sử dụng ggplot2 để tạo ra một cốt truyện tương tự như R đồ họa này:Làm thế nào để bóng râm một vùng dưới đường cong sử dụng ggplot2

xv<-seq(0,4,0.01) 
yv<-dnorm(xv,2,0.5) 
plot(xv,yv,type="l") 
polygon(c(xv[xv<=1.5],1.5),c(yv[xv<=1.5],yv[xv==0]),col="grey") 

Đây là như xa như tôi đã nhận được với ggplot2:

x<-seq(0.0,0.1699,0.0001) 
ytop<-dnorm(0.12,0.08,0.02) 
MyDF<-data.frame(x=x,y=dnorm(x,0.08,0.02)) 
p<-qplot(x=MyDF$x,y=MyDF$y,geom="line") 
p+geom_segment(aes(x=0.12,y=0,xend=0.12,yend=ytop)) 

Tôi muốn tô bóng vùng đuôi vượt quá x = 0,12. Làm thế nào tôi sẽ làm điều này bằng cách sử dụng ggplot hoặc qplot?

Nói chung, làm cách nào để tô bóng bất kỳ tập hợp con nào dưới đường cong, cho dù đuôi hay giữa hai dòng tùy ý phân chia vùng thành các vùng riêng biệt?

Cảm ơn lời khuyên nào.

Trả lời

14

Tạo một đa giác với các khu vực bạn muốn bóng

#First subst the data and add the coordinates to make it shade to y = 0 
shade <- rbind(c(0.12,0), subset(MyDF, x > 0.12), c(MyDF[nrow(MyDF), "X"], 0)) 

#Then use this new data.frame with geom_polygon 
p + geom_segment(aes(x=0.12,y=0,xend=0.12,yend=ytop)) + 
    geom_polygon(data = shade, aes(x, y)) 

enter image description here

+0

Câu trả lời giúp theo cách khác quá. Tôi đã không suy nghĩ trong chế độ ggplot2 và tạo một tập con dữ liệu rõ ràng. Tôi đã cố gắng để làm cho công việc này từ một điểm đối tượng đồ họa thuần túy. –

+0

Tôi nghĩ bạn có nghĩa là (lưu ý vị trí của dấu ngoặc đơn cuối cùng) ... bóng <- rbind (c (0,12,0), tập con (MyDF, x> 0,12), c (MyDF [nrow (MyDF), " X "], 0)) –

+0

@ceilingcat Bạn đúng, tôi sẽ chỉnh sửa câu trả lời –

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