链接段与R

时间:2015-08-11 21:48:34

标签: r plot matching lines

您好

我试图绘制分段线并通过匹配值连接它们。

我已经通过"开始"和"结束"值为x坐标,组为R中的y坐标。如果它们共享相同的" id",则我希望将这些段与行连接起来,如我的样本数据集数据所示

Name  Start   End      Group   ID

TP1   363248  366670   7       98

TP2   365869  369291   11      98

TP3   366459  369881   1       98

AB1   478324  481599   11      134

AB2   478855  482130   1       134

AB3   480681  483956   10      134

JD1   166771  169764   6       214

JD2   386419  389244   7       214

JD2   389025  391850   11      214

到目前为止,使用数据的目的是:

x <- seq(0, 4100000, length = 200)
y <- seq(0, 15, length = 200)
plot(x,y,type="n");

start.x <- (data[,2])
end.x   <- (data[,3])
end.y   <- start.y <- (data[,4]) # from and to y coords the same

segments(x0 = start.x, y0 = start.y, x1 = end.x, y1 = end.y)

lines(data[,1], data[,5]) 

我的细分被绘制得很好,但我的连线并没有出现。有关如何绘制连接线的任何建议吗?非常感谢你。

1 个答案:

答案 0 :(得分:0)

在下面的代码中,我使用xlimylim参数放大了绘图,以便我们更好地了解绘制的数据。

如您所见,我正在使用for循环来迭代每个唯一的ID值。对于每个值,我使用combn()获取组中所有记录对的组合。然后,我使用apply()迭代每个组合。对于每个组合,我调用segments()在两个(原始)片段的中心之间绘制一个片段。我为每个组使用不同的颜色,以便轻松区分。

df <- data.frame(Name=c('TP1','TP2','TP3','AB1','AB2','AB3','JD1','JD2','JD2'),Start=c(363248,365869,366459,478324,478855,480681,166771,386419,389025),End=c(366670,369291,369881,481599,482130,483956,169764,389244,391850),Group=c(7,11,1,11,1,10,6,7,11),ID=c(98,98,98,134,134,134,214,214,214));
xlim <- c(min(df$Start),max(df$End));
ylim <- c(min(df$Group),max(df$Group));
plot(NA,xlim=xlim,ylim=ylim,xlab='x',ylab='y');
start.x <- df[,'Start'];
end.x <- df[,'End'];
end.y <- start.y <- df[,'Group'];
segments(start.x,start.y,end.x,end.y);
uid <- unique(df$ID);
cols <- rainbow(length(uid));
for (i in seq_along(uid)) {
    df.sub <- subset(df,ID==uid[i]);
    col <- cols[i];
    apply(combn(nrow(df.sub),2),2,function(ris) {
        r1 <- df.sub[ris[1],];
        r2 <- df.sub[ris[2],];
        segments(mean(c(r1$Start,r1$End)),r1$Group,mean(c(r2$Start,r2$End)),r2$Group,col=col);
    });
};

plot