R/plot_venn3.R

Defines functions plot_venn3

Documented in plot_venn3

#' Plots venn diagram from three samples
#'
#' @param a vector of names
#' @param b vector of names
#' @param c vector of names
#' @param names optional names vector
#'
#' @return
#' @export
#'
#' @importFrom eulerr euler
#'
#'
plot_venn3 <- function(a, b, c, names) {

  if(!hasArg(a)) {
    a <- getData()
  }

  if(!hasArg(b)) {
    b <- getData()
  }

  if(!hasArg(c)) {
    c <- getData()
  }

  if(ok("Would you like to add names?")) {
    names <- c()
    while(length(names) != 3) {
      names <- strsplit(readline("Please indicate names divided by a semicolon (;): "), split = ";")[[1]]
    }

  }

  else {
    names <- c("A", "B", "C")
  }

  A <- length(setdiff(a, unique(c(b, c))))
  B <- length(setdiff(b, unique(c(a, c))))
  C <- length(setdiff(c, unique(c(a, b))))

  AB <- length(setdiff(intersect(a, b), c))
  BC <- length(setdiff(intersect(b, c), a))
  AC <- length(setdiff(intersect(a, c), b))

  ABC <- length(intersect(a, intersect(b, c)))


  if(!hasArg(names)) {
    print(plot(x = euler(c("A" = A, "B" = B, "C" = C, "A&B" = AB, "B&C" = BC, "A&C" = AC, "A&B&C" = ABC, "D" = 100)),
               fills = list(fill = c("white", "white", "white"), alpha = 0),
               edges = c("blue", "blue", "blue"),
               quantities = list(type = "counts")))
  }

  else {
    print(plot(x = euler(c("A" = A, "B" = B, "C" = C, "A&B" = AB, "B&C" = BC, "A&C" = AC, "A&B&C" = ABC, "D" = 100)),
               fills = list(fill = c("white", "white", "white"), alpha = 0),
               edges = c("blue", "blue", "blue"),
               labels = names,
               quantities = list(type = "counts")))
  }

}
nicohuttmann/htmnanalysis documentation built on Dec. 6, 2020, 3:02 a.m.