Объединение графиков с использованием grid.newpage (), созданного с помощью R base (x2), решетки и ggplot2 - PullRequest
0 голосов
/ 02 апреля 2020

Следовал этому примеру от Вейхуана Вонга на Объединение графиков, созданных R base, lattice и ggplot2 , для создания панели 2 на 2 с использованием gridBase. Однако, поскольку у меня недостаточно опыта работы с кодом и после некоторой пробной версии произошла ошибка ... не повезло ..

Воспроизведение кода, если у меня только один базовый участок, все в порядке:

library(grid)
library(gridBase)
library(lattice)
library(ggplot2)
png(filename = paste0("plots/test4panels.png"),
    width = 1250, height = 1000, units = "px", res=250, pointsize=4)
grid.newpage()
pushViewport(viewport(layout = grid.layout(2, 2)))

# base graphics
vp <- pushViewport(viewport(layout.pos.row = 1, layout.pos.col = 1))
par(omi = gridOMI())
boxplot(mpg ~ cyl,
        xlab = "Number of Cylinders",
        ylab = "Miles per Gallon", data = mtcars)
popViewport()

# lattice plot
vp <- pushViewport(viewport(layout.pos.row = 1, layout.pos.col = 2))
par(fig = c(0.9, 1, 0.6, 0.9))
p <- bwplot(~ mpg | cyl,
            xlab = "Number of Cylinders",
            ylab = "Miles per Gallon",
            data = mtcars)
print(p, vp = vp, newpage = FALSE)
popViewport()

# ggplot
vp <- pushViewport(viewport(layout.pos.row = 2, layout.pos.col = 1))
mtcars$cyl <- as.factor(mtcars$cyl)
p <- qplot(cyl,
           mpg,
           data = mtcars,
           geom = ("boxplot"),
           fill = cyl,
           xlab = "Number of Cylinders",
           ylab = "Miles per Gallon")
print(p, vp = vp, newpage = FALSE)
popViewport()
# base graphics

# ggplot
vp <- pushViewport(viewport(layout.pos.row = 2, layout.pos.col = 2))
mtcars$cyl <- as.factor(mtcars$cyl)
p <- qplot(cyl,
           mpg,
           data = mtcars,
           geom = ("boxplot"),
           fill = cyl,
           xlab = "Number of Cylinders",
           ylab = "Miles per Gallon")
print(p, vp = vp, newpage = FALSE)
popViewport()
# base graphics

dev.off()

Однако, если я попытаюсь сделать два графика, это не сработает. Я предполагаю, что ошибка может быть с par (omi = gridOMI ()). Любая помощь?


library(grid)
library(gridBase)
library(lattice)
library(ggplot2)
png(filename = paste0("plots/test4panels_2basics.png"),
    width = 1250, height = 1000, units = "px", res=250, pointsize=4)
grid.newpage()
pushViewport(viewport(layout = grid.layout(2, 2)))

# base graphics
vp <- pushViewport(viewport(layout.pos.row = 1, layout.pos.col = 1))
par(omi = gridOMI())
boxplot(mpg ~ cyl,
        xlab = "Number of Cylinders",
        ylab = "Miles per Gallon", data = mtcars)
popViewport()

# base graphics
vp <- pushViewport(viewport(layout.pos.row = 1, layout.pos.col = 2))
par(omi = gridOMI())
boxplot(mpg ~ cyl,
        xlab = "Number of Cylinders",
        ylab = "Miles per Gallon", data = mtcars)
popViewport()

# lattice plot
vp <- pushViewport(viewport(layout.pos.row = 2, layout.pos.col = 1))
par(fig = c(0.9, 1, 0.6, 0.9))
p <- bwplot(~ mpg | cyl,
            xlab = "Number of Cylinders",
            ylab = "Miles per Gallon",
            data = mtcars)
print(p, vp = vp, newpage = FALSE)
popViewport()

# ggplot
vp <- pushViewport(viewport(layout.pos.row = 2, layout.pos.col = 2))
mtcars$cyl <- as.factor(mtcars$cyl)
p <- qplot(cyl,
           mpg,
           data = mtcars,
           geom = ("boxplot"),
           fill = cyl,
           xlab = "Number of Cylinders",
           ylab = "Miles per Gallon")
print(p, vp = vp, newpage = FALSE)
popViewport()
# base graphics

dev.off()
```
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...