Диаграммы Венна в нескольких фигурах

есть ли способ получить следующие диаграммы Венна в качестве третьей фигуры после двух гистограмм ниже?? Я хотел бы иметь две диаграммы Венна одну поверх другой

library(VennDiagram)

plus.venn<-draw.pairwise.venn(368, 1171, 149) #venn diagram 1

minus.venn<-draw.pairwise.venn(349, 1335, 173) #venn diagram 2

par(mfrow=c(1,3))

a<-sample(1:10000,3000)

b<-sample(5000:15000,3000)

hist(a)

hist(b)

person user3240953    schedule 21.10.2015    source источник
comment
draw.pariwise.venn, кажется, использует графику grid, а hist использует базовую графику. Это не весело смешивать два. Можете ли вы вместо этого создать удобную для сетки гистограмму с ggplot2 или lattice?   -  person MrFlick    schedule 22.10.2015
comment
ОК... На самом деле я не совсем уверен, как лучше всего это сделать...   -  person user3240953    schedule 22.10.2015
comment
если вы хотите объединить венндаиграмму (сетчатую графику) и гистограммы (базовая графика), вы можете использовать пакет gridBase (пример здесь). но вы, вероятно, получите более красивые графики, если будете следовать совету MrFlicks, делая все свои графики в сетке.   -  person user20650    schedule 22.10.2015


Ответы (1)


Разверните MrFlicks и мои комментарии выше.

Вы можете комбинировать базовую и сетчатую графику с помощью пакета gridBase. Однако, если вы не ограничены в использовании базовой графики R, вам может быть проще создать все свои графики с помощью графического пакета на основе сетки и объединить их с помощью пакета gridExtra.

Ваши данные

library(VennDiagram)

plus.venn <- draw.pairwise.venn(368, 1171, 149) #venn diagram 1
minus.venn <-draw.pairwise.venn(349, 1335, 173) #venn diagram 2
a <-sample(1:10000,3000)
b <-sample(5000:15000,3000)

Размещение базовых и сетчатых участков

library(grid)
library(gridBase)

# Layout of plots - 4 plots of equal size
layout(matrix(1:4, 2, byrow = TRUE))

# First & second base plot
hist(a)
hist(b)

# Grid regions of current base plot (ie from frame)
frame()
vps <- baseViewports()
pushViewport(vps$inner, vps$figure, vps$plot)
grid.draw(plus.venn)
popViewport(3)

# fourth
frame()
vps <- baseViewports()
pushViewport(vps$inner, vps$figure, vps$plot)  
grid.draw(minus.venn)
popViewport(3)

Что производит

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

Или используйте ggplot2 для создания гистограмм и комбинируйте их с помощью grid.arrange

library(ggplot2)
library(gridExtra)

grid.arrange(qplot(a, geom="histogram") + theme_classic(),
             qplot(b, geom="histogram") + theme_classic(),
             grobTree(plus.venn),
             grobTree(minus.venn),
             ncol=2)

Что производит

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

Вы можете изменить макет любого метода на то, что хотите.

person user20650    schedule 22.10.2015