'Legend with both point and line in R
I have two sets of data (x1, y1) and (x1, y2). I made a regression for each set and would like to plot them on the same plot (with both points and the regression lines). Here is my code
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))
This is what I got.

What I actually want in the legend is to make the point and the line side-by-side instead of on top of each other, which should look like this.

Any suggests are greatly appreciated!
Solution 1:[1]
I think you can do it this way:
legend('topright',c('','name'),lty=c(1,NA),pch=c(NA,'X'),bg='white',ncol=2)
The spacing may be a bit awkward, but it gets the line and the symbol separated. If you intend to have multiple line-symbol pairs in your legend, be sure to set things up as, e.g. lty=c(1,2,3,NA,NA,NA) .
Solution 2:[2]
While not very elegant, you could easily make two legends side by side. The coordinates of the legend's location can be saved for easy reference (e.g. in lgd object below):
Ex.
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")
I personally like @CarlWitthoft's solution...
Solution 3:[3]
I played around with this and ultimately I think this looks nicer:
legend('topright',c('',''),pch=1:2,bty='o', text.width=20)
legend('topright',c('Line 1','Line 2'),lty=1:2,bty='n')
It overlays two legend boxes, the first one without text but leaving a wide enough empty text space (adjusted with text.width) to accommodate the second one. The second box has no border.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Carl Witthoft |
| Solution 2 | Community |
| Solution 3 | awj2118 |
