在R中,我想制作一些图形,其中使用彩色线条,如下例所示。也许我可以使用彼此相邻放置的不同行来执行此操作,但是问题是,然后很难使用正确的行宽来使它们恰好彼此相邻放置,并且之间没有任何空格(因为lwd参数R图形包中的线的绝对坐标不是)。也许还有其他方法可以指定我要用两种或三种(或更多种)不同的颜色画一条线吗? (理想情况下,转角和行顶应该看起来不错)
干杯,
汤姆
PS我正在研究的应用程序将能够绘制具有多态状态的系统发育图,如下图所示
最佳答案
根据我在par
帮助下收集到的信息,lwd
参数因设备而异。对于x11
,它指出“由par(lwd =)控制的线宽为1/96英寸的倍数”。基于定义的lwd
,我需要将此宽度转换为图形的x和y单位,以便正确偏移以下几行。
因此,现在您的线条可以转弯了-仍需要对线条进行一些调整,以使它们以相同的长度到达所有末端(例如,从系列中的最后一个值中减去偏移量)。
例:
x <- c(1:10, rep(1, 10))
y <- c(rep(1, 10), 1:10)
lwd <- 20
x11() #lwd is multiples of 1/96 inches (from help info)
plot(y ~ x, t="l", lend=2, ljoin=2, lwd=lwd, col=3, xlim=c(0,11), ylim=c(0,11))
x.units.per.inch <- (par("usr")[2] - par("usr")[1]) / par("pin")[1]
y.units.per.inch <- (par("usr")[4] - par("usr")[3]) / par("pin")[2]
x.offset <- x.units.per.inch * 1/96 * lwd
y.offset <- y.units.per.inch * 1/96 * lwd
lines(x + x.offset, y + y.offset, lend=2, ljoin=2, lwd=lwd, col=2)
lines(x - x.offset, y - y.offset, lend=2, ljoin=2, lwd=lwd, col=4)