4

I am trying to put the legend outside the plot using xpd=TRUE but the legend keeps plotting within the plot. How can I fix this?

x = c(0,0,1,1,1)
y = c(0.4991,1.1423,1.2258,1.158,0.5148)
dat<-cbind(x,y)
point_shape = c(10,15,10,15,1)
dat<-data.frame(x,y,point_shape)

myTicks<-c(0,1)
plot(dat[,1],dat[,2], yaxt="n", xaxt="n", xlab="", ylab="",pch = dat$point_shape)
abline(0.4991,0.7267)
abline(1.1423,0.0157)
abline(0.4991,0.0157,lty=2)
axis(side = 1, at = myTicks)
axis(side = 2, at = myTicks)


legend("bottomleft", legend = c("apple", "orange", "tree"),
       bty = "n", xpd=FALSE, mar(c(7,7,7,7)), cex = 1, pch = c(10, 15, 1))
halo09876
  • 2,725
  • 12
  • 51
  • 71
  • Does this answer your question? [Plot a legend outside of the plotting area in base graphics?](https://stackoverflow.com/questions/3932038/plot-a-legend-outside-of-the-plotting-area-in-base-graphics) – numbermaniac Apr 23 '21 at 05:39

2 Answers2

9

Use inset and make xpd to true

legend("bottomleft", legend = c("apple", "orange", "tree"), inset=c(-0.15,0),
   bty = "n", xpd=TRUE, mar(c(7,7,7,7)), cex = 1, pch = c(10, 15, 1))
Prany
  • 2,078
  • 2
  • 13
  • 31
1

See the help for legend:

The location may also be specified by setting x to a single keyword from the list "bottomright", "bottom", "bottomleft", "left", "topleft", "top", "topright", "right" and "center". This places the legend on the inside of the plot frame at the given location.

So you can place the legend outside the plotting region by giving its coordinates manually:

legend(-0.2, 0.3, legend = c("apple", "orange", "tree"),
       bty = "n", xpd=TRUE, mar=c(7,7,7,7), cex = 1, pch = c(10, 15, 1))
lebatsnok
  • 6,329
  • 2
  • 21
  • 22