2013-05-04 28 views
0

我試圖繪製的曲線圖(在R或gnuplot的),其中x軸表示單個樣品和y軸被分割到的時間來表示不同的部分。每一線段(或框)將根據第三可變着色(是,否,或未知)繪製與段的分段線有色基於可變

SampleID y1 y1(answer) y2  y2(answer) y3  y3(answer) 
Sample 1 0-50 yes  51-60  no   61-85 yes 
Sample 2 0-40 yes  41-60  no   61-86 no 
Sample 3 0-45 unknown 46-69  yes   70-85 unknown 

其中顏色是=綠色,無=紅色;和未知=灰色

任何人都可以提出解決方案嗎?我一直在遇到同樣的問題,即根據段的第三個變量分配顏色會造成困難。

其他一些論壇用戶似乎也遇到了同樣的問題,但至今我還沒有看到一個簡單的解決方法。大多數人建議做多個地塊並覆蓋它們。我想知道是否有某種方式來重新考慮問題,或者重新格式化可能有用的數據?

回答

1

我不確定你的意思,但這是我最好的猜測。 (其實我想你想翻轉X和Y軸,但是這應該給你一個良好的開端。)

數據:

dd <- read.table(text=" 
SampleID y1 y1(answer) y2  y2(answer) y3  y3(answer) 
Sample_1 0-50 yes  51-60  no   61-85 yes 
Sample_2 0-40 yes  41-60  no   61-86 no 
Sample_3 0-45 unknown 46-69  yes   70-85 unknown", 
header=TRUE) 

重新排列數據,以長格式:

library(reshape2) 
dd2 <- melt(dd,id.var=1) 
dd2 <- transform(dd2, 
       var2=substr(as.character(variable),1,2), 
       type=ifelse(grepl("\\.",as.character(variable)),"answer","range")) 
dd2 <- subset(dd2,select=-variable) 
dd3 <- dcast(dd2,SampleID+var2~type) 
library("stringr") 
dd3 <- transform(dd3,start=as.numeric(str_extract(range,"^[0-9]+")), 
       end=as.numeric(str_extract(range,"[0-9]+$")), 
       answer=factor(answer,levels=c("yes","no","unknown"))) 

圖片:

library("ggplot2") 
ggplot(dd3)+ 
    geom_segment(aes(x=start,xend=end,y=SampleID,yend=SampleID,colour=answer))+ 
    scale_colour_manual(values=c("red","green","gray"))+ 
    theme_bw() 

你也許可以做的最後一位與segments()爲好。

enter image description here

+0

謝謝,這是一個很大的幫助。 – 2013-05-04 18:54:38