#' Common sequences Venn diagram
#'
#' Creates a Venn diagram comparing the number of common sequences in two or
#' three samples.
#'
#' @param samples A character vector of two or three names of samples in
#' productive.seqs to compare.
#' @param productive.seqs A list of productive amino acid sequences generated
#' by the LymphoSeq function productiveSeq.
#' @return Returns a a Venn diagram of the number of common sequences between
#' two or three samples.
#' @seealso \code{\link{commonSeqs}}
#' @examples
#' file.path <- system.file("extdata", "TCRB_sequencing", package = "LymphoSeq")
#'
#' file.list <- readImmunoSeq(path = file.path)
#'
#' productive.aa <- productiveSeq(file.list = file.list, aggregate = "aminoAcid")
#'
#' # Plot a triple Venn diagram
#' commonSeqsVenn(samples = c("TRB_Unsorted_0",
#' "TRB_Unsorted_32", "TRB_Unsorted_83"),
#' productive.seqs = productive.aa)
#'
#' # Plot a double Venn diagram
#' commonSeqsVenn(samples = c("TRB_Unsorted_0",
#' "TRB_Unsorted_32"), productive.seqs = productive.aa)
#'
#' # Save Venn diagram as a .png file to working directory
#' png(filename = "Venn diagram.png", res = 300, units = "in", height = 5, width = 5)
#'
#' commonSeqsVenn(samples = c("TRB_Unsorted_0", "TRB_Unsorted_32"),
#' productive.seqs = productive.aa)
#'
#' dev.off()
#' @export
#' @importFrom VennDiagram draw.pairwise.venn draw.triple.venn
#' @importFrom grid grid.newpage grid.draw
commonSeqsVenn <- function(samples, productive.seqs) {
if (length(samples) > 3 | length(samples) < 2) {
stop("Please enter 2 or 3 samples.")
}
if (length(samples) == 2) {
a <- productive.seqs[[samples[1]]]
b <- productive.seqs[[samples[2]]]
grid::grid.newpage()
venn <- VennDiagram::draw.pairwise.venn(area1 = length(a$aminoAcid),
area2 = length(b$aminoAcid),
cross.area = length(intersect(a$aminoAcid, b$aminoAcid)),
category = c(samples[1], samples[2]),
cat.fontfamily = rep("sans", 2),
fontfamily = rep("sans", 3),
fill = c("#3288bd", "#d53e4f"),
cat.pos = c(0, 0),
cat.dist = rep(0.025, 2),
cex = 1,
cat.cex = 0.7,
lwd = rep(2, 2))
grid::grid.draw(venn)
}
if (length(samples) == 3) {
a <- productive.seqs[[samples[1]]]
b <- productive.seqs[[samples[2]]]
c <- productive.seqs[[samples[3]]]
grid::grid.newpage()
venn <- VennDiagram::draw.triple.venn(area1 = length(a$aminoAcid),
area2 = length(b$aminoAcid),
area3 = length(c$aminoAcid),
n12 = length(intersect(a$aminoAcid, b$aminoAcid)),
n23 = length(intersect(b$aminoAcid, c$aminoAcid)),
n13 = length(intersect(a$aminoAcid, c$aminoAcid)),
n123 = length(Reduce(intersect, list(a$aminoAcid, b$aminoAcid, c$aminoAcid))),
category = c(samples[1], samples[2], samples[3]),
cat.fontfamily = rep("sans", 3),
fontfamily = rep("sans", 7),
fill = c("#3288bd", "#abdda4", "#d53e4f"),
cat.pos = c(0, 0, 180),
cat.dist = rep(0.025, 3),
cex = 1,
cat.cex = 0.7,
lwd = rep(2, 3))
grid::grid.draw(venn)
}
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.