修改边距,以便多个绘图在R中具有相同的大小

时间:2015-01-18 15:09:28

标签: r plot

我想在一个带有标题且只有一个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")

这些情节看起来像这样:

http://i.stack.imgur.com/W0Rl6.png

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

任何帮助都会非常感激!

3 个答案:

答案 0 :(得分: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")

enter image description here

或莱迪思

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

enter image description here

答案 1 :(得分:1)

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

边距例如:

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

制作指定绘图布局的矩阵:     mat&lt; -matrix(c(1:5),5,1,byrow = T)

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

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

第一幅情节将是空白情节

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

绘制散点图并添加标题和轴标签的文本。注意&#34; padj&#34;在文本函数中可能需要根据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='')

答案 2 :(得分:0)

我认为@Backlin对另一个问题的异议答案可能是您在寻找什么: R, plot , font size changes in multiple plot figures

该想法是减少每个图的边距,而在边距中写上标签和标题。您的代码可能看起来像这样:

    par(mfrow=c(3,1), oma=c(4.5, 4, 4, 2.5), mar=rep(.1, 4), cex=1, las=1)
    plot(x=rnorm(10), y=rnorm(10), ann=FALSE, xaxt="n")
    plot(x=rnorm(10), y=rnorm(10), ann=FALSE, xaxt="n")
    plot(x=rnorm(10), y=rnorm(10), ann=FALSE)
    title("My plot", outer=TRUE)
    mtext("X-axis label", 1, 3, outer=TRUE)
    mtext("Y-axis label", 2, 3, outer=TRUE, las=0)

enter image description here