12

我正在尝试以 3x2 布局将 6 个数字输出到一张图像中。我想在顶行和底两行之间放置额外的空间。这可能使用R吗?我查看了 par 和 plot 的文档,似乎找不到合适的选项。

这是一些示例代码:

a = rnorm(100,100,10)
b = rnorm(100,100,10)

par(mfrow=c(3,2), oma=c(1,1,1,1), mar=c(2,2,2,2))
hist(a)
hist(b)
plot(a,b)
plot(a,b)
plot(a,b)
plot(a,b)

这是该代码输出的内容:


替代文字


这是我希望它输出的内容(我在外部编辑器中修改了此图像)。请注意顶行和底行之间的额外空间。


替代文字


4

3 回答 3

9

我可以想到三种方法:

1) 使用mar图形参数设置绘图边距

您可以使用检索当前边距

currmar <- par()$mar

您可以设置新的边距

par("mar"=c(5, 4, 4, 2))

for 数字是底部、左侧、顶部和右侧边距(请参阅?par

您可以par对每个图进行多次调用,因此您只能更改顶部图的下边距。

2)使用布局生成不均匀的布局网格(参见?layout示例)

3) 将绘图保存在 .svg 或 .pdf 中,然后使用 Inkscape(或您喜欢的任何软件)移动绘图。

于 2010-09-03T19:24:13.803 回答
9

layout()功能是您的朋友。例如,您可以定义一个绘图矩阵

1 2
3 4
5 6
7 8

然后为第三个和第四个放置空地块。或者只是坚持六个并调用par以在底部添加额外的间距。

于 2010-09-03T19:26:39.283 回答
4

我认为与mar是我会做的方式。但是,看起来,您希望所有图都相同。因此,您需要在顶部和底部的每个地块上从 mar 取出相同的数量。
在您的情况下,可以使用以下数字:
1. 行:par(mar=c(7,4,4,2))
2. 行:par(mar=c(5,4,6,2))
3. 行:par(mar=c(7,4,4,2))

这样所有地块都占据相同的高度。修改第一个和第三个数字,使它们对于每个绘图都相同,以完成此操作。但是,需要注意的是:底行的图下方有一些额外的空白。

于 2010-09-03T19:44:42.547 回答