R中的点和线的图例

时间:2013-12-17 12:10:51

标签: r plot legend

我有两组数据(x1,y1)和(x1,y2)。我为每组进行了回归,并希望将它们绘制在同一个图上(包括点和回归线)。这是我的代码

x1 <- 1:5
y1 <- x1 + rnorm(x1)
y2 <- x1 + 2 + rnorm(x1)
fit1 <- lm(y1 ~ x1)
fit2 <- lm(y2 ~ x1)
plot(x1, y1, pch = 1, ylim = c(min(y1, y2), max(y1, y2)), xlab = "x", ylab = "y")
points(x1, y2, pch = 2)
abline(fit1, lty = 1)
abline(fit2, lty = 2)
legend("topleft", legend = c("Line 1", "Line 2"), pch = c(1, 2), lty = c(1, 2))

这就是我得到的。

enter image description here

我在传奇中真正想要的是将点和线并排放在一起,而不是彼此叠加,这应该是这样的。

enter image description here

非常感谢任何建议!

2 个答案:

答案 0 :(得分:15)

我认为你可以这样做:

legend('topright',c('','name'),lty=c(1,NA),pch=c(NA,'X'),bg='white',ncol=2)

间距可能有点尴尬,但它会将线条和符号分开。如果您打算在图例中设置多个线符号对,请务必将其设置为,例如lty=c(1,2,3,NA,NA,NA)

答案 1 :(得分:3)

虽然不是很优雅,但你可以很容易地制作两个传说。可以保存图例位置的坐标以便于参考(例如,在下面的lgd对象中):

实施例

lgd <- legend("topleft", legend = c("", ""), pch = NA, lty = c(1, 2), bty="n")
legend(lgd$rect$left+lgd$rect$w, lgd$rect$top, legend = c("Line 1", "Line 2"), pch = c(1,2), bty="n")

我个人喜欢@ CarlWitthoft的解决方案......