2012-06-23 17 views
2

我有這種形式的數據幀:與此命令如何根據模式匹配爲R中的數據點着色?

   V1 V2      V3   V4  V5   V6  V7   V8 
1 0610007C21Rik - chr5:31351012-31356737 1.33732e-05 0.752381 0.9965090 0.000000 1.777419e-05 
2 0610007L01Rik - chr5:130695613-130717165 1.67168e+00 1.673120 0.0000000 3.453930 4.997847e-01 
3 0610007P08Rik - chr13:63916627-64000808 7.06033e-01 0.000000 0.0815767 0.318051 1.000000e+00 
4 0610007P14Rik - chr12:87157066-87165495 0.00000e+00 0.000000 0.0000000 5.494230   NaN 
5 0610007P22Rik - chr17:25377114-25379603 4.99696e+00 0.908254 0.9076130 3.639250 8.461946e-01 
6 0610009B22Rik - chr11:51499151-51502136 6.53363e-01 8.500980 13.5797000 0.000000 7.137192e-02 

我繪製的log 2(V4)與LOG2(V5):

plot(log2(df[,4]) ~ log2(df[,5]), xlim=c(0,10), ylim=c(0,10)) 

我想基於一個以色點V1中的模式匹配。例如,如何爲0610007C21Rik和0610007L01Rik綠色和0610007P22Rik和0610007P14Rik紅色着色? 我已經嘗試用指定的顏色向數據框中添加另一列,但必須有一個更簡單的方法。

+0

一個可能相關的問題:[彩色數據點在R的陰謀](http://stackoverflow.com/questions/8774002/color-data-point-in-r-plot) –

+0

這變得非常接近,但我有麻煩整合兩個條件與不同的顏色。 (x,x,col = ifelse(x == 3,「red」,「black」)) – JoshuaA

+0

任何函數都可以在調用'plot'時提供給'col',所以你可以編寫一個自定義函數,使用任何數據來做任何你想做的事。 –

回答

1

這裏有一個基礎R解決方案:

定義您的顏色列表作爲一個名爲向量一次的df$V1每個獨特的價值。請注意0​​圍繞每個要着色的點的名稱。

col.list <- c(
       "0610007C21Rik"="green", 
       "0610007L01Rik"="green", 
       "0610007P22Rik"="red", 
       "0610007P14Rik"="red" 
      ) 

然後繪製遠用df$V1來查找你剛纔定義的col.list矢量值。

plot(
    log2(df[,4]) ~ log2(df[,5]), 
    xlim=c(0,10), 
    ylim=c(0,10), 
    col=col.list[paste(df$V1)] 
    ) 

爲了解決下面的OP的評論,在plot通話使用:

... col=ifelse(df$V1 %in% names(col.list),col.list[paste(df$V1)],"black") 

這使得全呼叫的樣子:

plot( 
     log2(df[,4]) ~ log2(df[,5]), 
     xlim=c(0,10), 
     ylim=c(0,10), 
     col=ifelse(df$V1 %in% names(col.list),col.list[paste(df$V1)],"black") 
    ) 
+0

謝謝!這與我想實現的接近。但是,它不繪製col.list中未指定的點。由於完整的數據框有超過20000行,我怎樣才能得到它在黑色col.list中沒有提到的所有內容? – JoshuaA

+1

@JoshuaA - 見我上面的編輯,我認爲解決了這個問題。 – thelatemail

1

看看ggplot2軟件包。

如果你輸入你的數據框,它將使人們更容易幫助代碼。

下面是構成數據的一個例子,它看起來有點像你的,但有更好的方法來記錄變換。

df <- data.frame(sample(LETTERS[1:5],20, replace=TRUE), abs(rnorm(20)/100), abs(runif(20)*10)) 
colnames(df) <- c('V1','V4','V5') 


library(ggplot2) 

p <- ggplot(df, aes(log2(V4) , log2(V5))) 
p + geom_point(aes(colour = V1)) 
+0

謝謝你的回答。我不想爲每一行提供獨特的顏色,因爲在整個數據框中有超過20,000個顏色。具體來說,我想要做的是根據V1中的條目製作10個綠色和19個紅色。在我的簡短示例中,如何通過在第一列中搜索這些條目,如何使0610007C21Rik和0610007L01Rik綠色以及0610007P22Rik和0610007P14Rik紅色? – JoshuaA