| Title: | Draw Venn Diagram by 'ggplot2' |
|---|---|
| Description: | An easy-to-use way to draw pretty Venn diagrams using 'ggplot2'. This package provides functions to create Venn diagrams with customizable colors, labels, and styling options. |
| Authors: | Linlin Yan [aut, cre] |
| Maintainer: | Linlin Yan <[email protected]> |
| License: | MIT + file LICENSE |
| Version: | 0.1.19 |
| Built: | 2026-05-15 09:48:25 UTC |
| Source: | https://github.com/yanlinlin82/ggvenn |
Utility functions for data type conversion between data.frame and list.
data_frame_to_list(x) list_to_data_frame(x)data_frame_to_list(x) list_to_data_frame(x)
x |
A data.frame with logical columns representing sets, or a list of sets. |
A list of sets or a data.frame with logical columns representing sets.
# Convert data.frame to list d <- dplyr::tibble(name = 1:6, A = c(rep(TRUE, 5), FALSE), B = rep(c(FALSE, TRUE), each = 3)) print(d) data_frame_to_list(d) # Convert list to data.frame a <- list(A = 1:5, B = 4:6) print(a) list_to_data_frame(a) # Round-trip conversion identical(a, data_frame_to_list(list_to_data_frame(a))) # TRUE identical(d, list_to_data_frame(data_frame_to_list(d))) # TRUE# Convert data.frame to list d <- dplyr::tibble(name = 1:6, A = c(rep(TRUE, 5), FALSE), B = rep(c(FALSE, TRUE), each = 3)) print(d) data_frame_to_list(d) # Convert list to data.frame a <- list(A = 1:5, B = 4:6) print(a) list_to_data_frame(a) # Round-trip conversion identical(a, data_frame_to_list(list_to_data_frame(a))) # TRUE identical(d, list_to_data_frame(data_frame_to_list(d))) # TRUE
Plot venn diagram as a ggplot layer object. It supports only data frame as input.
geom_venn( mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., set_names = NULL, element_column = NULL, show_elements = FALSE, show_set_totals = "none", show_stats = c("cp", "c", "p"), show_counts = TRUE, show_percentage = TRUE, digits = 1, label_sep = ",", count_column = NULL, show_outside = c("auto", "none", "always"), auto_scale = FALSE, fill_color = default_color_list, fill_alpha = 0.5, stroke_color = "black", stroke_alpha = 1, stroke_size = 1, stroke_linetype = "solid", set_name_color = "black", set_name_size = 6, text_color = "black", text_size = 4, comma_sep = FALSE, padding = 0.2, max_elements = 6, text_truncate = TRUE )geom_venn( mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., set_names = NULL, element_column = NULL, show_elements = FALSE, show_set_totals = "none", show_stats = c("cp", "c", "p"), show_counts = TRUE, show_percentage = TRUE, digits = 1, label_sep = ",", count_column = NULL, show_outside = c("auto", "none", "always"), auto_scale = FALSE, fill_color = default_color_list, fill_alpha = 0.5, stroke_color = "black", stroke_alpha = 1, stroke_size = 1, stroke_linetype = "solid", set_name_color = "black", set_name_size = 6, text_color = "black", text_size = 4, comma_sep = FALSE, padding = 0.2, max_elements = 6, text_truncate = TRUE )
mapping |
Set of aesthetic mappings created by |
data |
A data.frame or a list as input data. |
stat |
The statistical transformation to use on the data for this layer, as a string. |
position |
A position adjustment to use on the data for this layer. This
can be used in various ways, including to prevent overplotting and
improving the display. The
|
... |
Other arguments passed on to
|
set_names |
Set names, use column names if omitted. |
element_column |
A single character value use as column name to select elements. |
show_elements |
Show set elements instead of count/percentage. |
show_set_totals |
Show total count (c) and/or percentage (p) for each set. Pass a string like "cp" to show both. Any other string like "none" to hide both. |
show_stats |
Show count (c) and/or percentage (p) for each set. Pass a string like "cp" to show both. |
show_counts |
Show count for each set. |
show_percentage |
Show percentage for each set. |
digits |
The desired number of digits after the decimal point. |
label_sep |
Separator character for displaying elements. |
count_column |
Specify column for element repeat count. |
show_outside |
Show outside elements (not belongs to any set). Options: "auto", "none", "always". |
auto_scale |
Allow automatically resizing circles according to element counts (only for 2-set diagrams). |
fill_color |
Filling colors in circles. Can be a single color or a vector of colors for each set. |
fill_alpha |
Transparency for filling circles. Can be a single value or a vector for each set. |
stroke_color |
Stroke color for drawing circles. Can be a single color or a vector of colors for each set. |
stroke_alpha |
Transparency for drawing circles. Can be a single value or a vector for each set. |
stroke_size |
Stroke size for drawing circles. Can be a single value or a vector for each set. |
stroke_linetype |
Line type for drawing circles. Can be a single value or a vector for each set. |
set_name_color |
Text color for set names. |
set_name_size |
Text size for set names. |
text_color |
Text color for intersect contents. |
text_size |
Text size for intersect contents. |
comma_sep |
Whether to use comma as separator for displaying numbers. |
padding |
Padding for the plot. Change this to allow longer labels to be displayed. |
max_elements |
Maximum number of elements to display when show_elements=TRUE. |
text_truncate |
Whether to truncate text when elements exceed max_elements. |
A ggplot layer object to add to a ggplot.
ggvenn
library(ggvenn) # use data.frame as input d <- dplyr::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) ) # ggplot gramma ggplot(d) + geom_venn(aes(A = `Set 1`, B = `Set 2`)) + coord_fixed() + theme_void() ggplot(d) + geom_venn(aes(A = `Set 1`, B = `Set 2`, C = `Set 3`)) + coord_fixed() + theme_void() ggplot(d) + geom_venn(aes(A = `Set 1`, B = `Set 2`, C = `Set 3`, D = `Set 4`)) + coord_fixed() + theme_void() # set fill color ggplot(d) + geom_venn(aes(A = `Set 1`, B = `Set 2`), fill_color = c("red", "blue")) + coord_fixed() + theme_void() # hide percentage ggplot(d) + geom_venn(aes(A = `Set 1`, B = `Set 2`), show_stats = "c") + coord_fixed() + theme_void() # change precision of percentages ggplot(d) + geom_venn(aes(A = `Set 1`, B = `Set 2`), digits = 2) + coord_fixed() + theme_void() # show elements instead of count/percentage ggplot(d) + geom_venn(aes(A = `Set 1`, B = `Set 2`, C = `Set 3`, D = `Set 4`, label = value)) + coord_fixed() + theme_void()library(ggvenn) # use data.frame as input d <- dplyr::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) ) # ggplot gramma ggplot(d) + geom_venn(aes(A = `Set 1`, B = `Set 2`)) + coord_fixed() + theme_void() ggplot(d) + geom_venn(aes(A = `Set 1`, B = `Set 2`, C = `Set 3`)) + coord_fixed() + theme_void() ggplot(d) + geom_venn(aes(A = `Set 1`, B = `Set 2`, C = `Set 3`, D = `Set 4`)) + coord_fixed() + theme_void() # set fill color ggplot(d) + geom_venn(aes(A = `Set 1`, B = `Set 2`), fill_color = c("red", "blue")) + coord_fixed() + theme_void() # hide percentage ggplot(d) + geom_venn(aes(A = `Set 1`, B = `Set 2`), show_stats = "c") + coord_fixed() + theme_void() # change precision of percentages ggplot(d) + geom_venn(aes(A = `Set 1`, B = `Set 2`), digits = 2) + coord_fixed() + theme_void() # show elements instead of count/percentage ggplot(d) + geom_venn(aes(A = `Set 1`, B = `Set 2`, C = `Set 3`, D = `Set 4`, label = value)) + coord_fixed() + theme_void()
Extract Venn diagram data table from ggvenn plot
get_venn_table(g)get_venn_table(g)
g |
A ggplot object created by ggvenn() |
A data frame containing the Venn diagram intersection data
library(ggvenn) g <- ggvenn(list(A = 1:5, B = 4:9, C = c(2:3, 8:12), D = c(1, 5, 9))) get_venn_table(g)library(ggvenn) g <- ggvenn(list(A = 1:5, B = 4:9, C = c(2:3, 8:12), D = c(1, 5, 9))) get_venn_table(g)
Plot venn diagram as an independent function. It supports both data frame and list as input.
ggvenn( data, columns = NULL, element_column = NULL, show_elements = FALSE, show_set_totals = "none", show_stats = c("cp", "c", "p"), show_counts = TRUE, show_percentage = TRUE, digits = 1, label_sep = ",", count_column = NULL, show_outside = c("auto", "none", "always"), auto_scale = FALSE, fill_color = default_color_list, fill_alpha = 0.5, stroke_color = "black", stroke_alpha = 1, stroke_size = 1, stroke_linetype = "solid", set_name_color = "black", set_name_size = 6, text_color = "black", text_size = 4, comma_sep = FALSE, padding = 0.2, max_elements = 6, text_truncate = TRUE )ggvenn( data, columns = NULL, element_column = NULL, show_elements = FALSE, show_set_totals = "none", show_stats = c("cp", "c", "p"), show_counts = TRUE, show_percentage = TRUE, digits = 1, label_sep = ",", count_column = NULL, show_outside = c("auto", "none", "always"), auto_scale = FALSE, fill_color = default_color_list, fill_alpha = 0.5, stroke_color = "black", stroke_alpha = 1, stroke_size = 1, stroke_linetype = "solid", set_name_color = "black", set_name_size = 6, text_color = "black", text_size = 4, comma_sep = FALSE, padding = 0.2, max_elements = 6, text_truncate = TRUE )
data |
A data.frame or a list as input data. |
columns |
A character vector use as index to select columns/elements. |
element_column |
A single character value use as column name to select elements. It is only allowed when data is a data.frame. |
show_elements |
Show set elements instead of count/percentage. |
show_set_totals |
Show total count (c) and/or percentage (p) for each set. Pass a string like "cp" to show both. Any other string like "none" to hide both. |
show_stats |
Show count (c) and/or percentage (p) for each set. Pass a string like "cp" to show both. Any other string like "none" to hide both. |
show_counts |
Show count for each set. |
show_percentage |
Show percentage for each set. |
digits |
The desired number of digits after the decimal point. |
label_sep |
Separator character for displaying elements. |
count_column |
Specify column for element repeat count. |
show_outside |
Show outside elements (not belongs to any set). Options: "auto", "none", "always". |
auto_scale |
Allow automatically resizing circles according to element counts (only for 2-set diagrams). |
fill_color |
Filling colors in circles. Can be a single color or a vector of colors for each set. |
fill_alpha |
Transparency for filling circles. Can be a single value or a vector for each set. |
stroke_color |
Stroke color for drawing circles. Can be a single color or a vector of colors for each set. |
stroke_alpha |
Transparency for drawing circles. Can be a single value or a vector for each set. |
stroke_size |
Stroke size for drawing circles. Can be a single value or a vector for each set. |
stroke_linetype |
Line type for drawing circles. Can be a single value or a vector for each set. |
set_name_color |
Text color for set names. |
set_name_size |
Text size for set names. |
text_color |
Text color for intersect contents. |
text_size |
Text size for intersect contents. |
comma_sep |
Whether to use comma as separator for displaying numbers. |
padding |
Padding for the plot. Change this to allow longer labels to be displayed. |
max_elements |
Maximum number of elements to display when show_elements=TRUE. |
text_truncate |
Whether to truncate text when elements exceed max_elements. |
The ggplot object to print or save to file.
geom_venn
library(ggvenn) # use list as input a <- list(A = 1:5, B = 4:9, C = c(2:3, 8:12), D = c(1, 5, 9)) ggvenn(a, c("A", "B")) ggvenn(a, c("A", "B", "C")) ggvenn(a) # use data.frame as input d <- dplyr::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")) ggvenn(d, c("Set 1", "Set 2", "Set 3")) ggvenn(d) # set fill color ggvenn(d, c("Set 1", "Set 2"), fill_color = c("red", "blue")) # hide percentage ggvenn(d, c("Set 1", "Set 2"), show_stats = "c") # change precision of percentages ggvenn(d, c("Set 1", "Set 2"), digits = 2) # show elements instead of count/percentage ggvenn(a, show_elements = TRUE) ggvenn(d, show_elements = TRUE, element_column = "value")library(ggvenn) # use list as input a <- list(A = 1:5, B = 4:9, C = c(2:3, 8:12), D = c(1, 5, 9)) ggvenn(a, c("A", "B")) ggvenn(a, c("A", "B", "C")) ggvenn(a) # use data.frame as input d <- dplyr::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")) ggvenn(d, c("Set 1", "Set 2", "Set 3")) ggvenn(d) # set fill color ggvenn(d, c("Set 1", "Set 2"), fill_color = c("red", "blue")) # hide percentage ggvenn(d, c("Set 1", "Set 2"), show_stats = "c") # change precision of percentages ggvenn(d, c("Set 1", "Set 2"), digits = 2) # show elements instead of count/percentage ggvenn(a, show_elements = TRUE) ggvenn(d, show_elements = TRUE, element_column = "value")