【问题标题】:Plotting points on a psp object based on distance根据距离在 psp 对象上绘制点
【发布时间】:2012-04-19 15:38:37
【问题描述】:

我有一个距离序列,我想在 spatstat 中绘制一条线。示例:

library(spatstat)

x <- c(0.3, 5)
y <- c(3, 1.2)

range.x <- c(0, max(x)+0.2)
range.y <- c(0, max(y)+0.2)

owin <- owin(range.x, range.y)
the.line <- psp(x0 = x[1],x1 = x[2],y0 = y[1],y1 = y[2], window = owin)

plot(the.line)    

seqs <- data.frame(name = seq(1,7), distance = c(0.12, 0.3, 0.45, 0.5, 0.7, 0.89, 0.95))
lengths <- seqs$distance*lengths.psp(the.line)

我想在the.line 之上绘制lengths,使用seqs$name 作为标签以下列方式(使用Illustrator 添加的标签):

有人知道怎么做吗?非常感谢您的帮助!

【问题讨论】:

    标签: r plot line spatstat


    【解决方案1】:

    text 函数允许您向现有绘图添加文本。是否可以旋转文本取决于您使用的图形设备,请参阅?par 'crt' 和 'srt' 部分。另请参阅text 的“adj”参数,了解如何将文本置于行上方而不是遮挡行。

    这一切都假设绘图是在基本图形中完成的。

    在运行上面的代码后,以下内容在 windows 上对我有用(使用默认 windows 图形设备):

    x.new <- seqs$distance*x[2] + (1-seqs$distance)*x[1]
    y.new <- seqs$distance*y[2] + (1-seqs$distance)*y[1]
    
    tmp.x <- grconvertX(x, to='inches')
    tmp.y <- grconvertY(y, to='inches')
    theta <- atan2(diff(tmp.y),diff(tmp.x))*180/pi
    
    text( x.new, y.new, seqs$name, adj=c(0,0), srt=theta )
    

    【讨论】:

    • 嗯...我已经使用spatstat 来绘制和计算我相当复杂的数据,因此需要在spatstat 窗口(owin)上进行绘图。此外,我不知道我的文本的坐标。只有沿线的距离。
    • 我刚刚在上面运行了您的代码(通过绘图),然后使用“定位器”功能并单击行尾,结果与您的“x”和“y”变量匹配(我的点击有一点错误),所以看起来情节是在基本图形中,并且没有对坐标做任何花哨的事情。求给定 x 和 y 的坐标和沿线的距离是代数,找到正确的角度是代数和三角函数,然后使用上面的文本函数即可。
    猜你喜欢
    • 1970-01-01
    • 2013-11-02
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多