【问题标题】:Modify margins so that multiple plots have the same size in R修改边距,使多个图在 R 中具有相同的大小
【发布时间】:2015-01-18 15:09:27
【问题描述】:

我想在一个图表中制作三个带有标题和一个 x 标签的图,但是当我修改边距以包含这些标签时,这些图最终会具有不同的大小。

这是我尝试过的:

par(mfrow=c(3,1), mar=c(1.5,5,3,2) + 0.1)
plot(1:10, xaxt='n', main = "Some title")

par(mar=c(1.5,5,0,2) + 0.1)
plot(1:10, xaxt='n')

par(mar=c(5,5,0,2) + 0.1)
plot(1:10, xlab = "Some x label")

情节是这样的:

如您所见,第二个地块的大小不同。我想要的是所有最终都具有相同的大小。

任何帮助将不胜感激!

【问题讨论】:

  • 刚遇到这个问题......原来它与一段时间后的my own question 非常相似,但有一些不同的答案。我一直使用par(mar = c(0,0,0,0), oma = c(5.1,4.1,4.1,2.1))

标签: r plot


【解决方案1】:

这对于基本图形来说并不容易。问题是,虽然mfrow 将拆分设备拆分为三行,但第一个绘图的标题和最后一个绘图的 x 轴标签在它们各自的每一行中都占据了空间。使用 Lattice 或 ggplot 会更容易。要使用这些功能,您通常希望在开始之前将所有数据放在一个 data.frame 中。例如,有了这个测试数据集

dd<-data.frame(x=rep(1:10,3),y=rep(1:10,3), group=rep(1:3, each=10))

你可以使用ggplot2

library(ggplot2)
ggplot(dd, aes(x,y)) + 
    geom_point() + 
    facet_grid(group~.) + 
    ggtitle("Some title") + xlab("Some X label")

或格子

library(lattice)
xyplot(y~x|factor(group), dd, layout=c(1,3), 
    main="Some Title", xlab="Some X label")

【讨论】:

  • 谢谢,看起来不错。我仍然不知道是否有人知道如何使用基本图来做到这一点。
【解决方案2】:

您可以使用布局功能。要绘制上面的图,请为 5 个图制作布局:顶部窄图用作标题空间,然后是 3 个散点图,第五个窄图用于底部的 x 标签。

边距例如:

par(mar=c(0.5,6,0.5,2)+0.1)

制作一个指定绘图布局的矩阵: mat

布局函数包括宽度和高度。在这里,我们只有一列图,所以只有一个宽度,然后是每行图的高度:

layout(mat, widths=1, heights= c(0.5, 3, 3, 3, 1.5))

第一个图将是一个空白图

plot(0, xaxt='n', yaxt='n', bty='n', pch='', ylab='', xlab='')

绘制散点图并为标题和轴标签添加文本。注意文本函数中的“padj”可能需要根据你的 Quartz 窗口的大小进行修改。最后一个地块也是空的

plot(1:10, xaxt='n')
mtext("Some title", 1, padj=-15)
plot(1:10, xaxt='n')
mtext("Some ylabel", 2, padj=-5)
plot(1:10)
mtext("Some x label",  padj=20)
plot(0, xaxt='n', yaxt='n', bty='n', pch='', ylab='', xlab='')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 2022-08-17
    相关资源
    最近更新 更多