Venn Diagram by ggplot2, with really easy-to-use API. This package is inspired by Venny
install.packages("ggvenn") # install via CRAN
or
if (!require(devtools)) install.packages("devtools")
devtools::install_github("yanlinlin82/ggvenn") # install via GitHub (for latest version)
This package supports both list
and data.frame
type data as input.
For list
data (each element is a set):
library(ggvenn)
a <- list(`Set 1` = c(1, 3, 5, 7, 9),
`Set 2` = c(1, 5, 9, 13),
`Set 3` = c(1, 2, 8, 9),
`Set 4` = c(6, 7, 10, 12))
ggvenn(a, c("Set 1", "Set 2")) # draw two-set venn
ggvenn(a, c("Set 1", "Set 2", "Set 3")) # draw three-set venn
ggvenn(a) # without set names, the first 4 elements in list will be chose to draw four-set venn
For data.frame
data (each logical column is a set):
d <- tibble(value = c(1, 2, 3, 5, 6, 7, 8, 9),
`Set 1` = c(TRUE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE),
`Set 2` = c(TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE),
`Set 3` = c(TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE),
`Set 4` = c(FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE))
ggvenn(d, c("Set 1", "Set 2")) # draw two-set venn
ggvenn(d, c("Set 1", "Set 2", "Set 3")) # draw three-set venn
ggvenn(d) # without set names, the first 4 logical column in data.frame will be chose to draw four-set venn
For data.frame
data, there is also another way to plot in ggplot grammar:
# draw two-set venn (use A, B in aes)
ggplot(d, aes(A = `Set 1`, B = `Set 2`)) +
geom_venn() + theme_void() + coord_fixed()
# draw three-set venn (use A, B, C in aes)
ggplot(d, aes(A = `Set 1`, B = `Set 2`, C = `Set 3`)) +
geom_venn() + theme_void() + coord_fixed()
# draw four-set venn (use A, B, C, D in aes)
ggplot(d, aes(A = `Set 1`, B = `Set 2`, C = `Set 3`, D = `Set 4`)) +
geom_venn() + theme_void() + coord_fixed()
There are more options for customizing the venn diagram.
Tune the color and size
For filling:
fill_color
- default is c("blue", "yellow", "green", "red")fill_alpha
- default is 0.5For stroke:
stroke_color
- default is "black"stroke_alpha
- default is 1stroke_size
- default is 1stroke_linetype
- default is "solid"For set name:
set_name_color
- default is "black"set_name_size
- default is 6For text:
text_color
- default is "black"text_size
- default is 4All parameters above could be used in both ggvenn()
and geom_venn()
.
For example:
{r}
a <- list(A = 1:4, B = c(1,3,5))
ggvenn(a, stroke_linetype = 2, stroke_size = 0.5,
set_name_color = "red", set_name_size = 15,
fill_color = c("pink", "gold"))
Show elements
show_elements
- default is FALSElabel_sep
- text used to concatenate elements, default is ","For example:
```{r} a <- list(A = c("apple", "pear", "peach"), B = c("apple", "lemon")) ggvenn(a, show_elements = TRUE)
ggvenn(a, show_elements = TRUE, label_sep = "\n") # show elements in line ```
Hide percentage
show_percentage
- default is TRUEFor example:
{r}
a <- list(A = 1:5, B = 1:2)
ggvenn(a, show_percentage = FALSE)
Change digits of percentage
digits
- default is 1For example:
{r}
a <- list(A = 1:5, B = 1:2)
ggvenn(a, digits = 2)
The ggvenn
support two types of input data: list and data.frame. Two functions (data_frame_to_list()
and list_to_data_frame()
) can convert data between the two types.
a <- list(A = 1:5, B = 4:6)
d <- tibble(key = 1:6,
A = c(rep(TRUE, 5), FALSE),
B = rep(c(FALSE, TRUE), each = 3))
identical(a, data_frame_to_list(d)) # TRUE
identical(d, list_to_data_frame(a)) # TRUE
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.