2012-04-13 25 views
5

Tôi rất mới đối với R vì vậy hãy mang theo tôi nếu có điều gì đó không rõ ràng trong câu hỏi của tôi.Sử dụng nhiều thang đo scale_colour_gradient cho các phạm vi khác nhau của dữ liệu trong một ô

Tôi có một "protein" data.frame "có 5 cột, cụ thể là;

1.protein_name, 2.protein_FC, 3.protein_pval, 4.mRNA_FC, 5.mRNA_pval và 6.freq.

Tôi đang cố vẽ đồ thị núi lửa với x = log2 (protein_FC), y = -log10 (protein_pval). Sau đó, ánh xạ kích thước của các dấu chấm thành freq và color thành mRNA_FC. Tất cả điều này hoạt động tốt và đây là mã mà tôi đã sử dụng:

ggplot(protein [ which (protein$freq <= 0.05),] , aes(x = log2(protein_FC) , 
     y = -log10 (protein_pval) , size = freq , colour = mRNA_FC , 
     label = paste(protein_name,",",mRNA_pval), alpha=1/1000)) + 
    geom_point() + geom_text(hjust = 0 , vjust = 0 , colour = "black" , size = 2.5) + 
    geom_abline(intercept = 1.3 , slope = 0) + 
    scale_colour_gradient(limits=c(-3,3)) 

tất cả đều ổn cho đến đây. Nhưng vì bản chất của thử nghiệm, dữ liệu khá dày đặc xung quanh mRNA_FC = 0. Ở đó, lược đồ màu mặc định mà ggplot áp dụng không hoạt động tốt trong việc phân biệt các điểm khác nhau.

Tôi đã thử các thang màu khác nhau bằng cách sử dụng low="colour1"high="colour2". Tuy nhiên, tôi nghĩ tốt nhất là nên sử dụng nhiều thang màu trên các phạm vi của mRNA_FC, tức là một cái gì đó như thế nào. màu xanh lam trắng cho -3<mRNA<-0.2, màu đỏ sang màu trắng cho -0.2<mRNA_FC<0, màu xanh lá cây sang màu trắng cho 0<mRNA_FC<0.2 và màu đen sang màu trắng cho 0.2<mRNA_FC<3.

Nhưng tôi chưa tìm thấy cách nào để thực hiện nó.

Mọi trợ giúp sẽ được đánh giá cao. Chúc mừng!

+0

tôi không hoàn toàn hiểu được câu hỏi của bạn. Một ví dụ hoặc số liệu sẽ là tốt đẹp, để hiểu rõ hơn những gì là sai với mặc định ggplot2 colorscales. – smu

+0

Các vòng tròn màu mặc định của dữ liệu xung quanh mRNA_FC = 0, nhưng tôi muốn nó hiển thị màu sắc hoàn toàn khác nhau ở hai bên 0. Tôi cảm thấy rằng các điểm hiển thị của nó rất gần với 0, nói -0.1, 0 và 0.1 với cùng màu. Rất tiếc, tôi không thể chia sẻ tập dữ liệu vì sắp hết hạn để xuất bản và chủ sở hữu dữ liệu không muốn công khai. – ktyagi

+0

Sau đó, những gì về một quy mô màu rời rạc với người dùng xác định 'phá vỡ'? – smu

Trả lời

10

Đối với loại điều bạn muốn sử dụng scale_gradientn. Ví dụ:

library(ggplot2) 

x = seq(-0.1, 0.1, len=100) 
y = 0:10 
dat = expand.grid(x=x, y=y) 

ggplot(data=dat, aes(x=x, y=y, fill=x)) + 
    geom_raster() + 
    scale_fill_gradientn(colours=c('red', 'yellow', 'cyan', 'blue'), 
    values = c(-0.05,-1e-32,1e-32,0.05), 
    breaks = c(-0.05,-0.005,0.005,0.05), 
    rescaler = function(x,...) x, 
    oob  = identity) 

enter image description here

+0

Cảm ơn bạn John. Đây chính là điều tôi muốn. Thành thật mà nói, tôi mất một thời gian để tìm ra cách tốt nhất để sử dụng nó, như tôi đã nói trong bài viết kinh nghiệm của tôi trong R là 2 tuần tuổi. – ktyagi

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