2017-04-19 84 views
0

我試圖繪製與他們的log 2值以下數據彩色點的散點圖:設置顏色和阿爾法分別對正值和負值

chromosome start end test ref position  log2  p.value cnv cnv.size cnv.log2 cnv.p.value 
1   X  1 10000 50 74  5000 -0.29260198 2.857792e-06 0  NA  NA   NA 
2   X 5001 15000 50 72 10000 -0.25307362 4.125984e-05 0  NA  NA   NA 
10   X 45001 55000 992 1043 50000 0.20066806 7.482412e-04 0  NA  NA   NA 
11   X 50001 60000 1287 1417 55000 0.13416749 1.687005e-02 0  NA  NA   NA 
12   X 55001 65000 892 1149 60000 -0.09226799 7.342756e-02 0  NA  NA   NA 
13   X 60001 70000 651 838 65000 -0.09129751 7.556642e-02 0  NA  NA   NA 

我用的log 2值試圖顏色其中:

  • 海格正值爲深藍色和固體
  • 較低的正值在範圍-0.75淺藍色和更透明
  • 值:0.75是白色
  • 下負值淺紅色和更透明的
  • 更高負值暗紅色和固體

我已經嘗試通過繪製POS和NEG分別值來實現這一點:

pos<-subset(clean_file, clean_file$log2 > 0) 
neg<-subset(clean_file, clean_file$log2 < 0) 

p <- ggplot() 
p <- p + geom_point(data=pos, aes(x = start, y = log2, alpha = log2, colour = log2)) 
p <- p + scale_colour_gradient2(low=muted("blue"), high=muted("green"), limits=c(0, 0.75), na.value="black") 
p <- p + geom_point(data=neg, aes(x = start, y = log2, alpha = -log2, colour = -log2)) 
p <- p + scale_colour_gradient2(low=muted("purple"), high=muted("red"), limits=c(0, -0.75), na.value="darkred") 
p <- p + ylim(-5,5) 
p <- p + facet_wrap(~chromosome, scale="free_x") 

但結果是不正確的(我碰到下面的錯誤):

量表「顏色'已經存在。爲 「顏色」添加另一個比例,它將替換現有的比例。

enter image description here

回答

1

這基本達到了我想要的:

library(RColorBrewer) 

cols <- brewer.pal(n = 5, name = "RdBu") 

p <- ggplot() 
p <- p + geom_point(data=clean_file, aes(x = start, y = log2, colour = log2), size = 1) 
p <- p + ylim(-5,5) 
p <- p + scale_colour_gradientn(colours = cols, 
    values = rescale(c(-2, -0.25, 0, 0.25, 2)), 
    guide = "colorbar", limits=c(-5, 5))  
p <- p + facet_wrap(~chromosome, scale="free_x") 

enter image description here

1

每幫助文件爲scale_colour_gradientn()

「如果顏色不應該被均勻地沿着梯度位於該矢量給出的位置(0和1之間)在顏色的每種顏色矢量。請參閱rescale函數以將任意範圍映射到0和1之間。

所以你需要做一些調整。一種方法是創建一個額外的變量,重新縮放的log 2:

clean_file$log2_scale <- scales::rescale(clean_file$log2) 

然後記錄相當於log2_scale值是什麼,你要作爲着色的log 2值。然後將值參數中的向量替換爲您選擇的log2_scale值(這些值應介於0和1之間)。

最後,你需要將映射添加到您的ggplot美學:

p <- ggplot() 
p <- p + geom_point(data=clean_file, aes(x = start, y = log2, colour = log2)) 
p <- p + ylim(-5,5) 
p <- p + scale_colour_gradientn(
    colours = c("red", "yellow", "white", "lightblue", "darkblue"), 
    values = scales::rescale(c(0.9, 0.8, 0.5, 0.2, 0.1)) 

要自動值向量的計算,你可以創建一個使用clean_file data.frame並繪製一個自定義函數原始log2值與縮放值進行比較。