Общее основное название фигурной панели, скомпилированной с параметром par (mfrow)
У меня есть компиляция из 4 графиков, собранных вместе с par(mfrow=c(2,2))
. Я хотел бы нарисовать общий заголовок для двух надстроек и общее название для двух ниже панелей, которые расположены по центру между двумя левыми и правыми сюжетами.
Возможно ли это?
Ответы
Ответ 1
Это должно работать, но вам нужно будет поиграть с аргументом 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)
![enter image description here]()
mtext
означает "текст поля". side = 3
говорит, чтобы поместить его в верхний край. line = -21
говорит о смещении места размещения на 21 строку. outer = TRUE
говорит, что использовать область внешнего поля можно в порядке.
Чтобы добавить еще один "заголовок" вверху, вы можете добавить его, используя, скажем, mtext("My 'Title' in a strange place", side = 3, line = -2, outer = TRUE)
Ответ 2
Вы можете использовать функцию layout()
и установить две области графика, которые встречаются в обоих столбцах (см. повторяющиеся числа 1 и 3 в matrix()
). Затем я использовал 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)
![enter image description here]()
Ответ 3
То же самое, но выделено полужирным шрифтом, можно использовать с помощью title(...)
с теми же аргументами, что и выше:
title("My 'Title' in a strange place", side = 3, line = -21, outer = TRUE)
Ответ 4
Здесь другой способ сделать это, используя функцию line2user
из этого сообщения.
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)
![centered_titles]()
Здесь заголовок расположен на 2 строки выше верхнего края графика, как указано line2user(2, 3)
. Мы центрируем его, смещая его относительно 2-го и 4-го графиков, на половину объединенной ширины левого и правого полей, т.е. mean(par('mar')[c(2, 4)])
.
line2user
выражает смещение (количество строк) от оси в пользовательских координатах и определяется как:
line2user <- function(line, side) {
lh <- par('cin')[2] * par('cex') * par('lheight')
x_off <- diff(grconvertX(0:1, 'inches', 'user'))
y_off <- diff(grconvertY(0:1, 'inches', 'user'))
switch(side,
`1` = par('usr')[3] - line * y_off * lh,
`2` = par('usr')[1] - line * x_off * lh,
`3` = par('usr')[4] + line * y_off * lh,
`4` = par('usr')[2] + line * x_off * lh,
stop("side must be 1, 2, 3, or 4", call.=FALSE))
}