Как сделать мозаичный график из специализированной функции построения графиков из пакета
Я хочу построить 4 из следующих участков как par(mfrow=c(2,2))
Типовое расположение.
install.packages("wavelets")
require(wavelets)
dat <- rnorm(100)
plot.modwt(modwt(dat)) #4 of these in a 2x2 grid is desired
Тем не мение, layout
а также mfrow
основанные попытки не увенчались успехом.
Я буду давать правильный ответ щедрость.
1 ответ
Решение
Как заметил @plannapus, функция plot.modwt
уже вызывает макет. Так что вам нужно будет изменить исходную функцию.
- Если вы печатаете
plot.modwt
в вашей консоли R вы получите полное определение. - Скопируйте эту функцию и сохраните ее как новую функцию, скажем,
my.plot.modwt
, - Закомментируйте строку макета в этой функции
Настройте свой новый макет. Это сработало для меня:
nf = layout(matrix(c(3, 1, 4, 2, 7, 5,8, 6), 4, 2, byrow = TRUE), c(2,2), c(2,1, 2, 1), TRUE) layout.show(nf)
Вызовите свою функцию (4 раза) для создания графиков:
my.plot.modwt(modwt(dat1)) my.plot.modwt(modwt(dat2)) my.plot.modwt(modwt(dat3)) my.plot.modwt(modwt(dat4))
Обратите внимание, что, возможно, понадобятся некоторые другие изменения макета.
Мой код:
y.plot.modwt = function (x, levels = NULL, draw.boundary = FALSE, type = "stack",
col.plot = "black", col.boundary = "red", X.xtick.at = NULL,
X.ytick.at = NULL, Stack.xtick.at = NULL, Stack.ytick.at = NULL,
X.xlab = "t", y.rlabs = TRUE, plot.X = TRUE, plot.W = TRUE,
plot.V = TRUE, ...)
{
stackplot.modwt <- function(x, w.range, v.range, col.plot,
col.boundary, draw.boundary, X.xtick.at, X.ytick.at,
Stack.xtick.at, Stack.ytick.at, X.xlab = "t", plot.X = TRUE) {
innerplot <- function(x, y, type = "l", xtick.at, ytick.at) {
if (is.null(xtick.at) == FALSE || is.null(ytick.at) ==
FALSE) {
plot(x, y, type = "l", axes = FALSE, frame.plot = TRUE)
<snip>
if (plot.X) {
#nf <- layout(matrix(c(2, 2, 1, 1), 2, 2, byrow = TRUE),
# c(1, 2), c(2, 1), TRUE)
par(mai = c(0.6, 0.4, 0.1, 0.6))
<snip>
}