R-графика: как сделать объекты из VennDiagram совместимыми с cowplot plot_grid?

Я делаю диаграммы Венна с помощью пакета VennDiagram. Выходят нормально:

library(VennDiagram)
library(cowplot)


png("p.png")
p = draw.pairwise.venn(30,20,11, category = c("Dogs", "Cats"), lty = rep("blank", 2), fill = c("light blue", "pink"), alpha = rep(0.5, 2), cat.pos = c(-45, 45), cat.dist = rep(0.025, 2))
dev.off()

png("q.png")
draw.pairwise.venn(15, 20, 10, category = c("Rats", "Mice"), lty = rep("blank", 2), fill = c("light blue", "pink"), alpha = rep(0.5, 2), cat.pos = c(-45, 45), cat.dist = rep(0.025, 2))
dev.off()    

введите описание изображения здесь введите здесь описание изображения

Но если я попытаюсь построить их бок о бок, используя plot_grid() cowplot, произойдут плохие вещи:

p = draw.pairwise.venn(30,20,11, category = c("Dogs", "Cats"), lty = rep("blank", 2), fill = c("light blue", "pink"), alpha = rep(0.5, 2), cat.pos = c(-45, 45), cat.dist = rep(0.025, 2))

q = draw.pairwise.venn(15, 20, 10, category = c("Rats", "Mice"), lty = rep("blank", 2), fill = c("light blue", "pink"), alpha = rep(0.5, 2), cat.pos = c(-45, 45), cat.dist = rep(0.025, 2))

png('pq.png')
plot_grid(p, q, labels = "AUTO")
dev.off()

Error: Argument needs to be of class "ggplot", "gtable", "grob", "recordedplot", or a function that plots to an R graphicsdevice when called, but is a gList
Calls: plot_grid -> align_plots -> lapply -> FUN -> plot_to_gtable
Execution halted

draw.pairwise.venn() не делает объекты совместимыми с plot_grid().

class(p)
[1] "gList"

Итак, я думаю, мне нужно превратить gList в объект ggplot или что-то еще совместимое, хотя gList указан как подходящий тип. Я ничего не смог найти. Я хочу использовать cowplot из-за его хорошей возможности помечать подцифры для публикации.


person phlatphish    schedule 22.06.2018    source источник


Ответы (1)


Обертывание этих графиков в grobTree() работает для меня. Думаю, тут виноват пакет VennDiagram. Он не должен возвращать gList, он должен обернуть gList в grob. В любом случае, это можно исправить в cowplot. Не стесняйтесь сообщать о проблеме здесь.

library(VennDiagram)
#> Loading required package: grid
#> Loading required package: futile.logger
library(cowplot)
library(grid)

p = draw.pairwise.venn(30,20,11, category = c("Dogs", "Cats"), lty = rep("blank", 2), fill = c("light blue", "pink"), alpha = rep(0.5, 2), cat.pos = c(-45, 45), cat.dist = rep(0.025, 2))

q = draw.pairwise.venn(15, 20, 10, category = c("Rats", "Mice"), lty = rep("blank", 2), fill = c("light blue", "pink"), alpha = rep(0.5, 2), cat.pos = c(-45, 45), cat.dist = rep(0.025, 2))

plot_grid(grobTree(p), grobTree(q), labels = "AUTO")

Создано 23 июня 2018 г. с помощью пакета reprex (v0.2.0).

person Claus Wilke    schedule 24.06.2018