在绝对位置绘制R中的文本

ghhkc1vu  于 2023-09-27  发布在  其他
关注(0)|答案(3)|浏览(85)

有没有一种方法可以用text命令以绘图的最大x和y值的特定比例绘制文本(R中的plot命令)?在x最大值的10%和y最大值的20%处?我不能用普通的x和y坐标来指定它们,因为我绘制了几个条形图,而这些值会发生变化。

6ovsh4lw

6ovsh4lw1#

These four lines对于用R写的代码是非常实用的。只需保存当前坐标,为您的首选代码建立一个新的坐标网格,然后将其更改回原始坐标:

usr <- par("usr")   # save old user/default/system coordinates
par(usr = c(0, 1, 0, 1)) # new relative user coordinates
text(0.1, 0.5, "Some text", adj = 0)  # if that's what you want
par(usr = usr) # restore original user coordinates
sdnqo3pr

sdnqo3pr2#

编辑:看下面的评论,这是一个更好的答案。
不直接,但你可以存储变量的max和min,然后做一些类似的事情:

plot(..., ylim = c(miny, maxy), xlim = c(minx, maxx) 
#you can play around with where you want to set those limits
text(x=(minx + 0.3*(maxx-minx)), ...)
n3ipq98p

n3ipq98p3#

大卫的答案很棒,但它对我的对数坐标轴不起作用。下面是我所做的:

placelabel <- function(label, x, y, ...) {
    xlim <- par("usr")[1:2]
    ylim <- par("usr")[3:4]

    xpos <- xlim[1] + x*(xlim[2] - xlim[1])
    ypos <- ylim[1] + y*(ylim[2] - ylim[1])

    if(par("xlog")) xpos <- 10^xpos
    if(par("ylog")) ypos <- 10^ypos
    
    text(xpos, ypos, label, ...)
}

plot(1, 1)
placelabel("topleft", 0.05, 0.95, adj = c(0, 1), font = 2)

## Should be in the same place
plot(1, 1, log = "xy")
placelabel("topleft", 0.05, 0.95, adj = c(0, 1), font = 2)

相关问题