【问题标题】:Plotting a segmented line with segments coloured based on a variable绘制分段线,分段根据变量着色
【发布时间】:2013-05-04 17:30:11
【问题描述】:

我正在尝试绘制一个图(在 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=green,no=red;和未知=灰色

谁能提出解决方案?我一直遇到同样的问题,那就是根据段的第三个变量分配颜色会导致困难。

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

【问题讨论】:

    标签: c r fortran gnuplot


    【解决方案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() 完成最后一点。

    【讨论】:

    • 谢谢,帮了大忙。
    猜你喜欢
    • 2018-07-15
    • 1970-01-01
    • 2021-04-12
    • 2018-12-25
    • 2019-11-27
    • 2012-10-30
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    相关资源
    最近更新 更多