Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

View venn.diagram in RStudio viewer (not just write to file) using VennDiagram?

Tags:

r

Using the VennDiagram package, we can make a venn diagram like so with the venn.diagram() function like so:

enter image description here

library(tidyverse)
library(hrbrthemes)
library(tm)
library(proustr)

# Load dataset from github
data <- read.table("https://raw.githubusercontent.com/holtzy/data_to_viz/master/Example_dataset/14_SeveralIndepLists.csv", header=TRUE) 
to_remove <- c("_|[0-9]|\\.|function|^id|script|var|div|null|typeof|opts|if|^r$|undefined|false|loaded|true|settimeout|eval|else|artist")
data <- data %>% filter(!grepl(to_remove, word)) %>% filter(!word %in% stopwords('fr')) %>% filter(!word %in% proust_stopwords()$word)

# library
library(VennDiagram)

#Make the plot
venn.diagram(
  x = list(
    data %>% filter(artist=="booba") %>% select(word) %>% unlist() , 
    data %>% filter(artist=="nekfeu") %>% select(word) %>% unlist() , 
    data %>% filter(artist=="georges-brassens") %>% select(word) %>% unlist()
  ),
  category.names = c("Booba (1995)" , "Nekfeu (663)" , "Brassens (471)"),
  filename = 'venn.png',
  output = TRUE ,
  imagetype="png" ,
  height = 480 , 
  width = 480 , 
  resolution = 300,
  compression = "lzw",
  lwd = 1,
  col=c("#440154ff", '#21908dff', '#fde725ff'),
  fill = c(alpha("#440154ff",0.3), alpha('#21908dff',0.3), alpha('#fde725ff',0.3)),
  cex = 0.5,
  fontfamily = "sans",
  cat.cex = 0.3,
  cat.default.pos = "outer",
  cat.pos = c(-27, 27, 135),
  cat.dist = c(0.055, 0.055, 0.085),
  cat.fontfamily = "sans",
  cat.col = c("#440154ff", '#21908dff', '#fde725ff'),
  rotation = 1
)

This results in a .png written to the working directly.

How can it instead be viewed in the RStudio viewer pane, and also used in RMarkdown docs etc (i.e. just in the same way a regular ggplot or base plots would be viewed)?

Also note, the same question applies to any of the examples found in the ? venn.diagram documentation (they all seem to write to file instead of display in the RStudio viewer)

like image 689
stevec Avatar asked Apr 23 '20 15:04

stevec


People also ask

Can you make a Venn diagram in R?

Venn diagrams are a very commonly used graphing technique that illustrates levels of overlap between groups in data. They can be created in R using code written as part of the Bioconductor Project. We are following the directions supplied here for installing a package for linear models for microarray data ( limma ).

How do I install Venn diagram in R?

At the project list view, you can click “R Packages” link to open the 'Manage R Package” dialog. Click the “Install New Packages” tab, type in “VennDiagram” in the input field, and click “Install”. You will see a success message if the installation goes well.

How do I create a Venn diagram in Excel?

Go to the Insert tab of a new worksheet, click the SmartArt button on the Illustrations group to open the SmartArt Graphic window. Under the Relationship category, choose Basic Venn and click OK. Then the Venn diagram is added on the sheet.


2 Answers

This should also do the job. I deleted the arguments for readability:

...
plt <- venn.diagram(
  filename = NULL,
  cex = 1,
  cat.cex = 1,
  lwd = 2,
  )
grid::grid.draw(plt)

From ?venn.diagram

filename
Filename for image output, or if NULL returns the grid object itself

It seems, you can control almost anything. Again the docs:

... A series of graphical parameters tweaking the plot. See below for details Details

Argument Venn Sizes Class Description
cex 1,2,3,4,5 numeric Vector giving the size for each area label (length = 1/3/7/15 based on set-number)

Thus we need to be able to display grid objects. plot() and print() don't do this job (it seems there is not print.grid()).

like image 159
Christoph Avatar answered Oct 21 '22 01:10

Christoph


I usually do:

library(VennDiagram)
set.seed(1)
list1 <- list(A=sample(LETTERS, 12), B=sample(LETTERS, 12))
venn1 <- venn.diagram(list1, filename = NULL)
grid.newpage()
grid.draw(venn1)

I think it still writes a log file into the working directory, but not the graph.

You can put two diagrams side by side like this:


library(gridExtra)
set.seed(2)
list2 <- list(A=sample(LETTERS, 16), B=sample(LETTERS, 12))
venn2 <- venn.diagram(list2, filename = NULL)
grid.arrange(gTree(children=venn1),
             gTree(children=venn2),
             ncol=2)

Created on 2020-04-23 by the reprex package (v0.3.0)

like image 24
user12728748 Avatar answered Oct 21 '22 03:10

user12728748