制作包含行和列标题的图表矩阵

时间:2014-06-26 18:04:22

标签: r plot

使用par(mfrow = c(m,n))命令,我可以轻松制作包含m行和n列的图表矩阵。

在特殊情况下,图中有一个模式,这样每列中的所有图都共享一个重要属性,每行中的所有图共享一个不同的重要属性。所有这些信息都可以单独包含在每个m*n图的标题中,但这显然是重复的。

是否有方便的方法在这样的网格中追加列名(仅在图的顶行上方)和行名(仅在图的左栏的左侧)?

目前为止的最佳解决方案:使用text()命令将文字放在左上图之外。但这非常不令人满意,因为它需要许多单独的命令,并调整srt = 90之类的参数以使文本在左边距上垂直,并在xpd = NA内使用par()

1 个答案:

答案 0 :(得分:4)

lattice和ggplot2包具有用于在网格中创建多个绘图的工具。如果它们适用于您想要做的事情,它们可能会加快您的整个过程。

library(lattice)

splom( ~ iris[,1:4], data=iris, groups=Species )
xyplot( mpg ~ wt | factor(cyl)*factor(am), data=mtcars )

library(ggplot2)

p <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
p + facet_grid(am ~ cyl)

使用基本图形可以从设置外边距开始,参见oma命令的par参数,然后使用mtext函数将文本写入外边距你的标签。

par( oma=c(0,6,6,0), mfrow=c(2,2), mar=c(2,2,1,1)+0.1 )
with(iris, plot(Sepal.Width, Petal.Width, ann=FALSE))
mtext( 'Width', side=3, line=2, at=grconvertX(0.5,'npc','nic'), outer=TRUE )
mtext( 'Width', side=2, line=2, at=grconvertY(0.5,'npc','nic'), outer=TRUE )
mtext( 'Sepal', side=3, line=4, outer=TRUE, cex=2 )
mtext( 'Petal', side=2, line=4, outer=TRUE, cex=2 )
with(iris, plot(Sepal.Length, Petal.Width, ann=FALSE))
mtext( 'Length', side=3, line=2, at=grconvertX(0.5,'npc','nic'), outer=TRUE )
with(iris, plot(Sepal.Width, Petal.Length, ann=FALSE))
mtext( 'Length', side=2, line=2, at=grconvertY(0.5, 'npc','nic'), outer=TRUE )
with(iris, plot(Sepal.Length, Petal.Length, ann=FALSE))