R如何使图例位置与图形大小无关

时间:2013-11-25 08:27:14

标签: r resize alignment legend

这是我的代码;基本上我是在同一个绘图设备上放置四个图形并在每个图形设置上放置一个图例。 [编辑:我正在使用RStudio]

dev.new()
par(mfrow=c(2,2), oma=c(0,0,2,0))

#plot1
plot(parameters...)
par(new=TRUE)
plot(parameters, col="red")
legend("bottomright", c("seed match", "background"), bty="n", lty=c(1,1),
    col=c("red","black"), cex=0.8, inset=0)

#plot2
plot(parameters...)
par(new=TRUE)
plot(parameters..., col="red")
legend("bottomright", c("seed match", "background"), bty="n", lty=c(1,1),
    col=c("red","black"), cex=0.8,inset=0)

#etc. same for plot2 and plot 3

title("bla bla bla", outer=TRUE)

我有两个问题。 (1)即使我指定了“井下”,图例似乎没有与右下角对齐,但是水平调整图表的宽度越大,图例与图表右侧之间的空间就越大。

(2)传说占据的空间量不足。我尝试修改cex =但是只关注字体大小,图例占用的整体空间仍然存在,这意味着字体越小,行之间的空间越大。我希望这个传奇不会“散开”。

插图 虽然我想减少图例中线条之间的空间,但这看起来还不错: before resizing

但是当我横向调整大小时却没有。我想将图例连接到图表的右侧。 after resizing

2 个答案:

答案 0 :(得分:2)

(1): 由于您的图形都以相同的方式缩放,您可以使用x和y坐标来定位图例,而不是关键词。 e.g:

legend(x = 0.25, y = 35, c("seed match", "background"), bty="n", lty=c(1,1), col=c("red","black"), cex=0.8, inset=0)

(2): 我不知道是否存在通过legend()操纵行间距的方法,我没有找到。我总是通过mtext(),abline()等手动生成传奇,当传奇看起来非常漂亮时。这是更多的工作,但你可以控制你的传奇的每个方面。

最后一条评论:我想你希望你的图表在屏幕上不是很好,而是在某种纸张或演示文稿上。我总是使用cairo_ps(),svg()或jpeg()等设备生成图形(jpeg仅在极少数情况下因为它是栅格而不是基于矢量)。与导出R图形设备相比,这些功能使您可以更好地控制图形。但是图形看起来随设备而变化的方式,每个都需要单独配置。最好只为最终要使用的那个做。

我希望这会有所帮助

答案 1 :(得分:0)

对于每个包含您选择的位置值的图例元素,您可以使用"bottomright"而不是legend()两次,例如

legend(x1,y1,c("seed match"), bty="n", lty=1, col="red", cex=0.8)

第一个。这样,您可以单独选择它们的位置,从而控制它们之间的间距。我认为这可以解决你的两个问题。