gpt4 book ai didi

r - R plot 图例中的换行符

转载 作者:行者123 更新时间:2023-12-01 10:30:55 34 4
gpt4 key购买 nike

我使用来自另一个脚本的数据输入在 R 中创建了许多图,每个脚本保存在一个单独的变量中。我将变量放在一个字符串中,并使用 \n 强制换行。这按预期工作,但传说根本没有道理。 xjustyjust 似乎什么都没做。此外,在放置图例时,例如在右下角,它超出了情节的边缘。知道如何正确地将我的图例合理地放置在图的一角吗?

这里是一个可重现的代码片段:

plot(c(0,3), c(0,3), type="n", xlab="x", ylab="y")

a <- 2.3456
b <- 3.4567
c <- 4.5678
d <- 5.6789

Corner_text <- function(text, location = "bottomright"){
legend(location, legend = text, bty = "o", pch = NA, cex = 0.5, xjust = 0)
}
Corner_text(sprintf("a = %3.2f m\n b = %3.2f N/m\UB2\n c = %3.2f deg\n d = %3.2f perc", a, b, c, d))

最佳答案

legend 通常用于解释线(以及不同的颜色)代表什么。因此,在图例框 (bty) 内有一个空间,线/点应该位于此位置。这可能解释了为什么你认为你的文本不是左对齐的(你也有换行符后的空格问题(\n):如果你在换行符后放一个空格,它将是下一行的第一个字符,因此文本看起来不合理)。

在你的例子中,你没有线或点来解释,因此,我会使用 text 而不是 legend
要知道“bottomright”在坐标轴上的位置,您可以使用图形参数 par("xaxp")par("yaxp")(它为您提供值第一个和最后一个刻度以及轴上的刻度数)。在 x 轴上,从最后一个刻度开始,您需要向左移动以便为最宽的线留出空间。

R代码中,它给出:

# your plot
plot(c(0,3), c(0,3), type="n", xlab="x", ylab="y")

# your string (without the extra spaces)
text_to_put <- sprintf("a = %3.2f m\nb = %3.2f N/m\UB2\nc = %3.2f deg\nd = %3.2f perc", a, b, c, d)

# the width of widest line
max_str <- max(strwidth(strsplit(text_to_put, "\n")[[1]]))

# put the text
text(x=par("xaxp")[2]-max_str, y=par("yaxp")[1], labels=text_to_put, adj=c(0, 0))

# if really you need the box (here par("usr") is used to know the extreme values on both axes)
x_offset <- par("xaxp")[1]-par("usr")[1]
y_offset <- par("yaxp")[1]-par("usr")[3]
segments(rep(par("xaxp")[2]-max_str-x_offset, 2), c(par("usr")[3], par("yaxp")[1]+strheight(text_to_put)+y_offset), c(par("xaxp")[2]-max_str-x_offset, par("usr")[2]), rep(par("yaxp")[1]+strheight(text_to_put)+y_offset, 2))

enter image description here

关于r - R plot 图例中的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42484104/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com