使用基于变量着色的段绘制分段线

时间:2013-05-04 17:30:12

标签: c r fortran gnuplot

我正在尝试绘制一个图(在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

其中颜色为yes =绿色,否=红色;和未知=灰色

有人可以提出解决方案吗?我一直在遇到同样的问题,即基于段的第三个变量分配颜色会导致难度。

其他一些论坛用户似乎正在遇到同样的问题,但到目前为止我还没有看到一个简单的解决方法。大多数建议做多个图并覆盖它们。我想知道是否有某种方法可以重新思考问题,或重新格式化可能有用的数据?

1 个答案:

答案 0 :(得分: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