【问题标题】:R how to make legend position independent from graph sizeR如何使图例位置独立于图形大小
【发布时间】:2013-11-25 08:27:13
【问题描述】:

这是我的代码;基本上我将四个图表放在同一个绘图设备上,并在每个图表上放置一个图例。 [编辑:我正在使用 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) 即使我指定了“bottomright”,图例似乎并没有与右下角对齐,我水平调整图形的宽度越大,图例和图形右侧之间的空间就越大。

(2) 图例占用的空间不足。我尝试修改 cex= 但只考虑字体大小,图例占用的整体空间仍然存在,这意味着字体越小,行间距越大。我希望传说少一点“散布”。

插图 这看起来不错,虽然我想减少图例中的行之间的空间:

但是当我水平调整大小时,它不会。我想将图例拴在图表的右侧。

【问题讨论】:

  • 调整输出设备大小后是否尝试再次打印图表?
  • 天哪,所以我需要输出设备的大小与导出图表时所需的大小完全相同?这使得在 11 英寸 Mac Air 上工作变得非常困难......
  • 不,请使用pngpdf 等功能(设备),它们允许您指定大小。
  • 不,看看help("pdf")help("png")。这些函数是基础 R 的一部分。

标签: r resize alignment legend


【解决方案1】:

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

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 图形设备相比,这些功能使您可以更好地控制图形。但是图表的外观会随着设备的变化而变化,每个都需要单独配置。最好只为最终要使用的那个做。

希望对你有帮助

【讨论】:

  • 如果您需要光栅图形,请不要使用jpeg,请使用png
【解决方案2】:

除了使用"bottomright",您可以使用legend() 两次,对于每个具有您选择的位置值的图例元素,例如

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

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

【讨论】:

  • 我早于接受的答案发布,并提供了一个解决位置和间距问题的解决方案... sad
猜你喜欢
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-17
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
相关资源
最近更新 更多