【问题标题】:Multicoloured lines on phylogeny plot in RR中系统发育图上的多色线
【发布时间】:2016-05-19 01:11:58
【问题描述】:

在 R 中,我想制作一些使用彩色线条的图表,如下例所示。也许我可以使用彼此相邻放置的不同线来做到这一点,但问题是很难使用正确的线宽,以便它们完全相邻放置,中间没有任何空白(因为 lwd 参数R 图形包中的行数不是绝对坐标)。是否有任何其他方法可以指定我想用两种或三种(或更多)不同颜色绘制一条线? (理想情况下,角和线封顶应该看起来不错)

干杯, 汤姆

PS 我正在开发的应用程序是能够绘制具有多态状态的系统发育,如下图所示

【问题讨论】:

  • 这个问题有点含糊。您应该添加一个具体示例,准确说明您要实现的目标(以及到目前为止您编写的代码)。目前我唯一的想法是您应该使用rect 而不是行。
  • 我会编写一个算法来创建与您所需的路径形状相匹配的矩形集,或者最好是多边形。这并不像你想象的那么难:-)

标签: r graphics line phylogeny


【解决方案1】:

根据我在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)

【讨论】:

  • 我认为您需要证明您的方法可以正确“转过弯”。
  • 对此表示感谢 - 朝着正确的方向发展 - 我唯一遇到的另一个问题是如何处理角落? (即使在我的情况下我只有右角)是否有机会使用矩形而不是线条更容易?
  • @TomWenseleers - 希望现在有所帮助。我认为使用rect 还需要一个偏移量才能获得您想要的效果。确实很复杂……
  • 非常感谢 - 这应该让我继续前进 - 不用担心!我也只是在看 shape 包,它有一个函数filledshape,它允许使用自定义填充颜色和自定义步数和任意旋转来指定自定义形状,大概这也可以工作......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-13
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多