Изменение графика ggplot2 с помощью ggplot_build и использование его в plot_grid - PullRequest
0 голосов
/ 17 декабря 2018

Я хочу изменить ggplot2 график в R с помощью функций ggplot_build и ggplot_gtable и впоследствии использовать его в plot_grid.

Пример кода для построения графика:

library(ggplot2) 
library(cowplot)

p1 <- ggplot(iris) +
  aes(x = Sepal.Length, y = Sepal.Width, colour = Species) +
  geom_point()
p2 <- ggplot(iris) +
  aes(x = Petal.Length, y = Petal.Width, colour = Species) +
  geom_point()

plot_grid(p1, p2)

Затем я изменяю p1 с помощью ggplot_build и ggplot_gtable:

q1 <- ggplot_build(p1)
q1$data[[1]]$colour <- "black"
q1 <- ggplot_gtable(q1)

plot(q1) изображает график, который мне нужен, но я не могу использовать его в plot_grid с plot_grid(q1, p2).Как я могу решить это?

Редактировать: Код должен был действительно работать.После полной перезагрузки R все заработало как положено.Должен был сначала попробовать это, извинения!

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Не могли бы вы пропустить свой код через пакет Представить и опубликовать результат здесь?Что-то не работает прямо с твоей стороны.Код, который вы публикуете, должен работать должным образом (см. Ниже).

Обратите внимание, что я работаю над версией разработки cowplot, но единственным видимым отличием будет тема.Использование gtables в plot_grid() работало годами.

library(ggplot2) 
library(cowplot)
#> 
#> 
#> *******************************************************
#> Note: cowplot does not change the default ggplot2 theme
#> anymore. To recover the previous behavior, execute:
#>   theme_set(theme_cowplot())
#> *******************************************************

p1 <- ggplot(iris) +
  aes(x = Sepal.Length, y = Sepal.Width, colour = Species) +
  geom_point()
p2 <- ggplot(iris) +
  aes(x = Petal.Length, y = Petal.Width, colour = Species) +
  geom_point()

plot_grid(p1, p2)

q1 <- ggplot_build(p1)
q1$data[[1]]$colour <- "black"
q1 <- ggplot_gtable(q1)
plot_grid(q1, p2)

Создано в 2018-12-17 * представительный пакет (v0.2.1)

0 голосов
/ 17 декабря 2018

При вызове для печати / печати ggplot2, что действительно происходит в фоновом режиме:

data <- ggplot_build(x)
gtable <- ggplot_gtable(data)

, где x - ваш объект ggplot2 (p1 og p2).(См. ggplot2:::plot.ggplot.) Другие подпрограммы используют ggplotGrob(x), что является синонимом ggplot_gtable(ggplot_build(x)).

Краткая история: gtable не является объектом ggplot2.Это объект Гроба.И там не определен сюжет или метод печати для объектов Grob.Вместо этого они должны быть нарисованы с пакетом grid.

Чтобы нарисовать q1 и q2, используйте:

library(grid)
grid.newpage()
grid.draw(q1)
...