使用par(mfrow = c(m,n))
命令,我可以轻松制作包含m
行和n
列的图表矩阵。
在特殊情况下,图中有一个模式,这样每列中的所有图都共享一个重要属性,每行中的所有图共享一个不同的重要属性。所有这些信息都可以单独包含在每个m*n
图的标题中,但这显然是重复的。
是否有方便的方法在这样的网格中追加列名(仅在图的顶行上方)和行名(仅在图的左栏的左侧)?
目前为止的最佳解决方案:使用text()
命令将文字放在左上图之外。但这非常不令人满意,因为它需要许多单独的命令,并调整srt = 90
之类的参数以使文本在左边距上垂直,并在xpd = NA
内使用par()
。
答案 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))