--- title: "Tutorial: Using ggVennDiagram" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Tutorial: Using ggVennDiagram} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.width = 7, fig.asp = 0.618, fig.align = "center" ) ``` '`ggVennDiagram`' enables fancy Venn plot with 2-7 sets and generates publication quality figure. ## Installation You can install the released version of ggVennDiagram from [CRAN](https://CRAN.R-project.org) with: ``` r install.packages("ggVennDiagram") ``` And the development version from [GitHub](https://github.com/) with: ``` r # install.packages("devtools") devtools::install_github("gaospecial/ggVennDiagram") ``` ## Usage Generate example data. ```{r} genes <- paste0("gene",1:1000) set.seed(20210302) gene_list <- list(A = sample(genes,100), B = sample(genes,200), C = sample(genes,300), D = sample(genes,200)) library(ggVennDiagram) library(ggplot2) ``` ## long category names If you use long category names in Venn plot, labels may be cropped by plot borders. To avoid this, just use a ggplot trick to expand x axis. ```{r} p1 <- ggVennDiagram(gene_list, category.names = c("a very long name","short name","name","another name")) p1 # expand axis to show long set labels p1 + scale_x_continuous(expand = expansion(mult = .2)) ``` ## Show intersection values When intersection values only have several members, `ggVennDiagram` is efficient to show the values in places. ```{r} set.seed(0) small_list <- lapply(sample(6:10, size = 4), function(x){ sample(letters,x) }) ggVennDiagram(small_list, category.names = LETTERS[1:4], show_intersect = TRUE) ``` ## Setting set label ### color of set label ```{r} ggVennDiagram(gene_list, set_color = c("blue","black","red","yellow")) ``` ### size of set labels ```{r} ggVennDiagram(gene_list, set_size = 8) ``` ## Setting region label ### text content ```{r eval=FALSE} ggVennDiagram(gene_list, label = "count") ggVennDiagram(gene_list, label = "percent") ggVennDiagram(gene_list, label = "both") ggVennDiagram(gene_list, label = "none") ``` ```{r fig.width=12, echo=FALSE} plots = lapply(c("none","count","percent","both"), function(x){ ggVennDiagram(gene_list,label = x) + labs(title = paste0('label = "', x, '"')) + theme(legend.position = "none") }) aplot::plot_list(gglist = plots, ncol = 2, labels = LETTERS[1:4]) ``` ### percentage digits ```{r} ggVennDiagram(gene_list, label_percent_digit = 1, label = "percent") ``` ### remove label background - Method 1: set alpha to 0 ```{r} ggVennDiagram(gene_list, label_alpha = 0) ``` - Method 2: use `geom_text()` ```{r} ggVennDiagram(gene_list, label_geom = "text") ``` ### color and size ```{r} ggVennDiagram(gene_list, label_color = "firebrick", label_size = 4) ``` ## Setting set edges ```{r} ggVennDiagram(gene_list, edge_lty = "dashed", edge_size = 1) ``` ## Changing palette - changing fill palette ```{r} library(ggplot2) p <- ggVennDiagram(gene_list) # Red Blue p + scale_fill_distiller(palette = "RdBu") # Reds p + scale_fill_distiller(palette = "Reds", direction = 1) ``` Some other palletes are: ```{r fig.asp=2, fig.width=4} RColorBrewer::display.brewer.all() ``` ## Adding note ```{r} p + labs(title = "Fancy Venn Diagram of four sets", subtitle = "Generated by `ggVennDiagram`", caption = Sys.Date()) ```