【问题标题】:draw vertical line to meet a horizontal line绘制垂直线以与水平线相交
【发布时间】:2017-10-26 19:24:14
【问题描述】:

我想在某个/任意点画一条垂直线与某条水平线相交:

xyplot(Amplification ~ Voltage | Serial_number,
       data = APD[APD$Serial_number==912009897,],
       panel = function(x, ...){
                                panel.xyplot(x, ...);
                                panel.abline(h = 150)
                                panel.abline(v = 350)},
       ylim = c(100,200),
       grid = TRUE 
)

完美地两条线都将在交叉处结束,以使其更具描述性。 我怎样才能做到这一点?谢谢!

【问题讨论】:

  • panel.lines ?
  • 我不需要 panel.abline 向 xyplot 添加线条吗?
  • abline 用于特定水平或垂直点或具有指定斜率+截距的直线。 lines 是通用线函数。
  • 好的,所以我需要 panel.ablines :) 如何设置端点?

标签: r


【解决方案1】:

所以,如果你想要 x = 350 和 y = 150,作为行的结尾,我将通过命令“points”并制作两行,只是猜测两行的一些安全起点:

points(c(350,350),c(100, 150), type='l') # the vertical one

points(c(100, 350),c(150, 150), type='l') # the horizontal one

以更通用的方式,您首先定义您的点,在绘制之后,您获得轴尺寸并使用实际值制作线条:

point <- c(350,150) # point of line crossing
plot(.... ) # your plot
mrs <- par('usr') # axis limits
## Now the lines
points(rep(point[1],2),c(mrs[3], point[2]), type='l')
points(c(mrs[1], point[1]),rep(point[2],2), type='l')

应该可以完成这项工作。

最后的线将在两点之间形成一条线,就像将 (x1,y1) 连接到 (x2,y2)。因此,使用命令 par('usr') 您将获得两个轴的起点和终点,在长度为 4 的向量中, 像(min(x),max(x),min(y),max(y))。所以用点你只需做一条线 bettwen (c(x1,x2),c(y1,y2))。对于垂直的,那么两个点的 x 坐标是相同的,这就是为什么存在 rep(point[1],2),而在 y 中,它是 y 的值和 y 轴的起点(即就是为什么是msr[3],是向量的第三个数),以此类推……

【讨论】:

  • 或者干脆lines(x=c(350, 220), y=c(150, 400))
  • 谢谢!你能解释一下最后两行吗? “points(rep(..)”和“points(c(mrs..”)?我已经用你建议的点得到了我想要的东西,这两行是什么意思?
  • 我刚刚添加了一个简短的评论来试图澄清。