Я хочу сделать сюжет, состоящий из нескольких графиков, состоящих из нескольких графиков, скажем, сетки 5x2 с тремя графиками в каждой ячейке. Чтобы быть более точным, мне нужна не только одна фигура, но и несколько способов использования функции построения графика в одном сюжете.Вложенные макеты в R
Я написал функцию, которая использует макет для складывания графиков, с общей осью во внешнем крае. Мне действительно нужно это для функций seqIplot и seqdplot из пакета TraMineR, но насколько я понимаю, проблема не связана с ними, так что вот минимальный рабочий пример с barplot.
stackedplot <- function(data){
layout(matrix(c(1:3), nrow=3))
par(mar=c(0,0,0,0), oma=c(4,1,1,1), mgp=c(3,0.5,0), cex=1)
barplot(data[[1]], axes=F, xlab="", ylab="", horiz=TRUE)
barplot(data[[2]], axes=F, xlab="", ylab="", horiz=TRUE)
barplot(data[[3]], axes=F, xlab="", ylab="", horiz=TRUE)
axis(1, at=c(0:10)/10, outer=TRUE)
mtext("Label", line=2, side=1)
}
stackedplot(list(1:10, 10:1, rep(1,10)))
То, что я хотел бы сделать, это то использовать что-то вроде макета снова и использовать stackedplot для решеток макета, т.е. что-то вроде этого (что, конечно, не работает):
layout(matrix(c(1:2), nrow=1))
stackedplot(list(1:10, 10:1, rep(1,10)))
stackedplot(list(rep(1,10), 1:10, 10:1))
Я попытался split.screen, без успеха:
split.screen(c(1,2))
screen(1)
stackedplot(list(1:10, 10:1, rep(1,10)))
screen(2)
stackedplot(list(rep(1,10), 1:10, 10:1))
close.screen(all = TRUE)
Я также попытался пакет сетки, но, видимо, он не совместим с базовыми графикой.
grid.newpage()
pushViewport(viewport(x=0, y=0, width=0.5, height=1,
default.units="native"))
print(stackedplot(list(1:10, 10:1, rep(1,10))), newpage=FALSE)
pushViewport(viewport(x=0.5, y=0, width=0.5, height=1,
default.units="native"))
print(stackedplot(list(rep(1,10), 1:10, 10:1)), newpage=FALSE)
AFAIK, вложенными 'layout's не представляется возможным. И 'split.screen' документально не смешивается с' layout'. – Roland
Если проблема связана с TraMineR, вы можете использовать seqIplot (group = NULL, withlegend = FALSE), а TraMineR не будет вызывать команду layout. –
Спасибо, Маттиас.Проблема, однако, кажется, не связана напрямую с TraMineR, но поставляется со всеми (базовыми) графиками. В настоящий момент пакет gridBase выглядит многообещающим при построении «вложенных макетов». – Satu