R图中的传奇

R图中的传奇,r,plot,legend,R,Plot,Legend,我想将绘图上的图例拆分为2个,这样前3个元素与第4个元素之间的间距约为1行高。我最初只是尝试在第一个元素之前添加换行符: legend("topright",col=1,lty=1:3,lwd=1,legend=c("leg1","leg2","\nleg3"), bty="n") 但这似乎增加了所有元素之间的差距(这是有记录的行为吗?) 然后,我使用了两个单独的图例,将边框设置为“n”,并使用行()重建边框(顺便问一下,是否有办法仅抑制图例的一个边框?);虽然这是可行的,但它确实需要对ins

我想将绘图上的图例拆分为2个,这样前3个元素与第4个元素之间的间距约为1行高。我最初只是尝试在第一个元素之前添加换行符:

legend("topright",col=1,lty=1:3,lwd=1,legend=c("leg1","leg2","\nleg3"), bty="n")
但这似乎增加了所有元素之间的差距(这是有记录的行为吗?)

然后,我使用了两个单独的图例,将边框设置为
“n”
,并使用
行()
重建边框(顺便问一下,是否有办法仅抑制图例的一个边框?);虽然这是可行的,但它确实需要对
inset
的值进行大量的尝试和错误处理

legend()
中的
inset
的默认值是
c(0,0)
,但是这些值在最初调用
legend()
时会根据该图例元素中的文本长度进行调整。根据
?legend
,调用
legend()
的值包括

长度(图例)的数字向量,给出图例文本的x和y坐标


是否可以将其转换为第二次调用的
插入部分的合适值,以便两个图例的元素对齐

只需在参数中指定要在其中放置空间的NAs即可。您需要将所有图例参数作为向量提供

    set.seed(2)
    plot(0:10, rnorm(11), col = sample(c("green", "blue"), 11, replace = TRUE), 
        pch = sample(c(3, 19), 11, replace = TRUE), xlim = c(0, 12))
    legend("topright", pch = c(3, 19, NA, 3, 19), 
        col = c("green", "green", NA, "blue", "blue"), 
        legend = c("green cross", "green dot", NA, "blue cross", "blue dot"))

或者,如果要对
legend()
进行两次调用以实现更精细的控制,请在参数中指定
trace=TRUE
,它将返回所需的x和y坐标