R проблема с несколькими участками pdf win7 - PullRequest
1 голос
/ 10 марта 2011

Я пытаюсь составить одну фигуру, сложив два графика (а) и (б) по вертикали (то есть, несколько графиков с 2 строками, 1 столбцом).

Хотя я могу сделать это для других пробных графиков, следующие два графика, сгенерированные из данных с использованием пакета решения ODE deSolve, отказываются объединяться. На экране мелькает график (а), и я остаюсь, глядя на график (б). В результате сохранения графиков получается 1 файл PDF с 2 страницами (каждый график на отдельной странице), а не 1 файл PDF и 1 страница (оба графика располагаются на одной фигуре, как я ищу).

Как вы можете видеть из кода, я попробовал оба подхода mfrow и layout безрезультатно. Любая помощь будет принята с благодарностью.

Спасибо, Кэри

df1 <-function(t,y,mu)( list(c(y[2], mu*y[1]^3 - y[1] + 0.005 * cos(t))))
library(deSolve)
yini <- c(y1=0, y2=0)
df2 <-ode(y = yini, func = df1, times = 0:1050, parms = 0.1667)
t <- seq(0, 1050, length=10000)
x <- 0.24 * (1 - cos(0.012 * t)) * cos(t + sin(0.012 * t))
pdf("c:/users/name/Desktop/figure2.pdf", height = 3, width=8)
# par(mfrow = c(2, 1))
layout(matrix(c(1, 2), 2, 1, byrow = TRUE))
plot(df2, type="l", which="y1", ylab="x", xlab="t", main="(a)")
plot(t, x, type="l", main="(b)")
dev.off()

1 Ответ

3 голосов
/ 10 марта 2011

Проблема в том, что deSolve объекты имеют свой собственный метод заговора, который переопределяет то, что происходит с макетом.Как только ваш первый график запускается, настройка макета полностью отменяется, и отображение настраивается в соответствии со значениями по умолчанию для deSolve объектов.Вот почему есть вспышка, когда второй график записывает поверх первого, так как больше нет многопанельного дисплея.

Метод plot? Plot.deSolve - эта функция принимает аргументы mfrow / mfcol, поэтому вы можете работать с вашим макетом так, как задумано.

layout(matrix(c(1, 1, 2, 2), 2, 2, byrow = TRUE))
plot(df2, type="l", which = "y1", ylab = "x", xlab = "t", main = "(a)", mfrow = c(2, 1))
plot(t, x, type = "l", main = "(b)")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...