2013-08-28 27 views
6

Tôi có một khung dữ liệu như thế nàyggplot bộ scale_color_gradientn tay

BP  R2  LOG10 
96162057 0.2118000 2.66514431 
96162096 0.0124700 0.31749391 
96162281 0.0008941 0.07012148 
96163560 0.5011000 2.48505399 
96163638 0.8702000 3.37778598 

và tôi muốn âm mưu chống lại BP LOG10, màu sắc và các điểm bằng cách R2. R2 là các giá trị liên tục từ 0-1.

myplot <- read.cvs("mytable.csv",head=TRUE) 
attach(myplot) 
ggplot(myplot,aes(BP,LOG10, color=R2)) + geom_point() 

Cho đến nay, rất tốt. Tuy nhiên tôi muốn hiển thị màu sắc R2 trong khoảng thời gian và màu sắc được chọn theo cách thủ công, như thế này (nếu tôi có giá trị rời rạc).

ggplot(myplot,aes(BP,LOG10, color=R2)) + geom_point() + 
     scale_color_manual(breaks= c("1","0.8","0.6","0.4","0.2","0"), 
       values = c("red","yellow","green","lightblue","darkblue")) 
Error: Continuous value supplied to discrete scale 

Điều này có vẻ khá, nhưng tôi muốn đặt màu sắc cho bản thân.

ggplot(myplot,aes(BP,LOG10, color=R2)) + geom_point(shape=1) + 
       scale_colour_gradientn(colours = rainbow(10)) 

Vì vậy, làm thế nào tôi có thể tự chọn khoảng thời gian từ các giá trị liên tục (1-0,8, 0,8-0,6, 0,6-0,4, 0,4-0,2, 0,2-0), và màu sắc theo ý thích của chúng tôi (đỏ, vàng , xanh lá cây, ánh sáng, xanh thẫm)? Một gradient mịn giữa các màu sắc sẽ được mát mẻ, nhưng không quan trọng.

Trả lời

7

Bạn có thể sử dụng scale_colour_gradientn() và sau đó cung cấp colours=values= của riêng bạn. Giá trị sẽ cho khoảng thời gian cho mỗi màu.

ggplot(myplot,aes(BP,LOG10, color=R2)) + geom_point() + 
    scale_colour_gradientn(colours = c("red","yellow","green","lightblue","darkblue"), 
         values=c(1.0,0.8,0.6,0.4,0.2,0)) 

enter image description here

+0

Cảm ơn rất nhiều Didzis, hoàn toàn giải quyết nó! Bạn cũng có một giải pháp không có độ dốc, vì vậy thay vì tất cả các giá trị từ 1-0.8 = đỏ, 0,8-0,6 = màu vàng, v.v ...? – user2724998

+0

Sau đó, bạn nên chia dữ liệu của bạn trong khoảng thời gian bằng cách sử dụng hàm cut() và sử dụng các khoảng thời gian đó dưới dạng các giá trị rời rạc. –

+0

Ok, cảm ơn một lần nữa! – user2724998

3

Sau 4 năm một bình luận cho bài viết này: Điều quan trọng cần lưu ý rằng "giá trị" ánh xạ giá trị biến của bạn giữa 0 và 1, 0 là thấp nhất và 1 giá trị cao nhất. Trong ví dụ này, nó trùng khớp với các giá trị của biến số từ 0 đến 1. (Tôi hy vọng rằng tôi không nói vô nghĩa, nhưng ít nhất là trong kinh nghiệm nhỏ của tôi trong trường hợp này)