我汇编了与par(mfrow=c(2,2))
一起绘制的4幅图。我想为上面的2个图绘制一个共同的标题,并在下面的2个面板中绘制一个共同的标题,这些标题位于2个左右图之间。
这可能吗?
答案 0 :(得分:41)
line
par(mfrow = c(2, 2))
plot(iris$Petal.Length, iris$Petal.Width)
plot(iris$Sepal.Length, iris$Petal.Width)
plot(iris$Sepal.Width, iris$Petal.Width)
plot(iris$Sepal.Length, iris$Petal.Width)
mtext("My 'Title' in a strange place", side = 3, line = -21, outer = TRUE)
代表“保证金文字”。 mtext
表示将其置于“顶部”边距。 side = 3
表示要将展示位置偏移21行。 line = -21
表示可以使用外边距区域。
要在顶部添加其他“标题”,您可以使用outer = TRUE
答案 1 :(得分:32)
您可以使用函数layout()
并设置两个列中出现的两个绘图区域(请参阅matrix()
中的重复数字1和3)。然后我使用plot.new()
和text()
来设置标题。您可以使用边距和高度来获得更好的代表性。
x<-1:10
par(mar=c(2.5,2.5,1,1))
layout(matrix(c(1,2,3,4,1,5,3,6),ncol=2),heights=c(1,3,1,3))
plot.new()
text(0.5,0.5,"First title",cex=2,font=2)
plot(x)
plot.new()
text(0.5,0.5,"Second title",cex=2,font=2)
hist(x)
boxplot(x)
barplot(x)
答案 2 :(得分:12)
使用title(...)
和上面相同的参数可以使用相同但粗体显示:
title("My 'Title' in a strange place", line = -21, outer = TRUE)
答案 3 :(得分:7)
这是另一种方法,使用this post中的 searcher = new
ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
int i = 0;
foreach(ManagementObject wmi_HD in searcher.Get())
{
// get the hard drive from collection
// using index
HardDrive hd = (HardDrive)hdCollection[i];
// get the hardware serial no.
if (wmi_HD["SerialNumber"] == null)
hd.SerialNo = "None";
else
hd.SerialNo = wmi_HD["SerialNumber"].ToString();
++i;
}
功能。
line2user
此处,标题位于比图的上边缘高2行,如par(mfrow = c(2, 2))
plot(runif(100))
plot(runif(100))
text(line2user(line=mean(par('mar')[c(2, 4)]), side=2),
line2user(line=2, side=3), 'First title', xpd=NA, cex=2, font=2)
plot(runif(100))
plot(runif(100))
text(line2user(line=mean(par('mar')[c(2, 4)]), side=2),
line2user(line=2, side=3), 'Second title', xpd=NA, cex=2, font=2)
所示。我们将它相对于第2和第4个图表偏移,使左右边距的组合宽度减去一半,即line2user(2, 3)
。
mean(par('mar')[c(2, 4)])
表示用户坐标中轴的偏移量(行数),定义为:
line2user