Как пометить поперек или между графиками в многосюжетных панелях в R

Если у меня есть несколько графиков на одной панели, я хотел бы иметь возможность размещать текстовые аннотации, которые охватывают более одной области графика или между областями графика. Я уверен, что должен быть способ сделать это, но мне нужна помощь, чтобы выяснить, как это сделать.
Вот некоторые фальшивые данные для создания четырех графиков на одной панели:

x1 = rnorm(100)
x2 = rnorm(100)
x3 = rnorm(100)
x4 = rnorm(100)

par(mfrow=c(2,2)) 
hist(x1, xlab="", main="Group A")
hist(x2, xlab="", main="Group B")
hist(x3, xlab="", main="")
hist(x4, xlab="", main="")

Это создает многосюжетную панель ниже, за исключением того, что я также добавил текст красным цветом. Я добавил красный текст, пометив файл PDFafter Я создал графическую панель в R, а затем сохранил ее в формате PDF. Что я хотел бы узнать, так это как программно аннотировать графическую панель в R, а не сохранять ее и аннотировать сохраненный файл.
Обычно я просто добавляю аннотацию, используяtext() или жеmtext(), Но это работает, только если вы аннотируете один график. Есть ли способ добавить аннотации относительно координат всей панели из 4 графиков? Я сейчас ищу решение в базовой графике, но если кто-нибудь знает, как сделать что-то похожее в ggplot2 или решетке, мне будет интересно посмотреть и это. enter image description here

Ответы на вопрос(3)

Решение Вопроса

Если вы действительно хотите лучше контролировать такие проблемы с макетом, вы можете использовать метко названныйlayout.

m <- matrix(c(1,2,3,3,4,5,6,6),ncol = 2,byrow = TRUE)
layout(m,widths = c(0.5,0.5),heights = c(0.45,0.05,0.45,0.05))

par(mar = c(2,4,4,2) + 0.1)
hist(x1, xlab="", main="Group A")
hist(x2, xlab="", main="Group B")

par(mar = c(0,0,0,0)) 
plot(1,1,type = "n",frame.plot = FALSE,axes = FALSE)
u <- par("usr")
text(1,u[4],labels = "Here",col = "red",pos = 1)

par(mar = c(2,4,2,2) + 0.1)
hist(x3, xlab="", main="")
hist(x4, xlab="", main="")

par(mar = c(0,0,0,0)) 
plot(1,1,type = "n",frame.plot = FALSE,axes = FALSE)
u <- par("usr")
text(1,u[4],labels = "Here",col = "red",pos = 1)

enter image description here

 26 июн. 2012 г., 02:04
+1 заlayout, пока,mfrow.
 eipi1026 июн. 2012 г., 18:25
Это делает трюк. Спасибо, что сообщили мне оlayout, Я вижу, что буду использовать его снова и снова.
 26 июн. 2012 г., 03:02
@mplourde Да,layout довольно гладко Как и все остальное в базе, это может быть немного неудобно, но вы уверены, что чертовски быстро выучили все параметры настройки.

Вы хотите использоватьmtext сouter=TRUE, Например,mtext('Results2', side=1, line=-2, outer=TRUE) а такжеmtext('Results1', side=3, line=-20, outer=TRUE).

 30 мая 2016 г., 02:28
Где бы вы поместили mtext в приведенном выше примере? Я не мог заставить это работать.
 04 дек. 2017 г., 16:04
После последнего звонка в исторический код. Возможно, вам придется адаптировать количество строк (в строке = xx) к вашим значениям набора данных

Для этого примераlayout Функция является самой простой, как уже было показано, но для более общих случаев вы также должны изучитьgrconvertX а такжеgrconvertY функции (наряду с настройкой отсечения с помощьюpar(xpd=, Функции преобразования могут дать вам координаты в текущих пользовательских координатах для различных систем координат, так что, например, вы могли бы центрировать что-то на странице, преобразовав 0.5 из нормализованных координат устройства.

 28 июн. 2012 г., 15:46
Конечно, стоит взглянуть на пакеты grid и gridBase, но я думаю, что во многих случаях уже легко сделать набор базовых графов, в которые можно добавить аннотацию с позицией, основанной на 'grconvertX` илиgrconvertY довольно просто.
 27 июн. 2012 г., 22:57
Кто-то может возразить, что когда вы зайдете так далеко, будет проще использовать сеточную графику (возможно, в сочетании с пакетом gridBase)

Ваш ответ на вопрос