---
title: "A Gallery of Euler and Venn Diagrams"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{A Gallery of Euler and Venn Diagrams}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r}
#| include: false
#| label: setup-options

knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.align = "center",
  fig.height = 4,
  fig.width = 5
)
```

```{r}
#| label: setup

library(eulerr)
```

This vignette serves as a gallery for Euler diagrams and as a showcase of the
various options for customization that are available.

## Euler Diagrams

### Uniform intersections

Here we use squares instead of the default circles.

```{r}
#| label: uniform_intersections

uniform_intersections <- euler(
  c(
    "A" = 10,
    "B" = 10,
    "C" = 10,
    "A&B" = 4,
    "A&C" = 4,
    "B&C" = 4,
    "A&B&C" = 2
  ),
  shape = "square"
)
plot(uniform_intersections)
```

### Disjoint sets

```{r}
#| label: disjoint

disjoint_sets <- euler(c(A = 1, B = 1, C = 1))
plot(
  disjoint_sets,
  labels = c("Tom", "Greg", "Alberta"),
  edges = list(lty = 1:3)
)
```

### A set contained in the intersection of two sets

```{r}
#| label: completely_contained

completely_contained <- euler(c(
  "A" = 15,
  "B" = 15,
  "C" = 0,
  "A&B" = 3,
  "A&C" = 0,
  "B&C" = 0,
  "A&B&C" = 3
))
plot(
  completely_contained,
  labels = list(col = c("white", "black", "black")),
  edges = list(col = "white", lex = 2),
  fills = c("black", "cyan", "orange")
)
```

### Two sets intersecting inside a third

```{r}
#| label: intersecting_inside

intersecting_inside <- euler(c(
  "A" = 15,
  "B" = 0,
  "C" = 0,
  "A&B" = 3,
  "A&C" = 3,
  "B&C" = 0,
  "A&B&C" = 2
))
plot(
  intersecting_inside,
  fills = list(
    fill = c(
      "lavenderblush2",
      "lightblue2",
      "lightsalmon",
      "orange",
      "steelblue4",
      "white",
      "plum2"
    )
  ),
  legend = list(side = "right")
)
```

### Difficult set (for circles!)

```{r}
#| label: one_contained

one_contained <- euler(
  c("A" = 7, B = 6, C = 0, "A&B" = 0, "A&C" = 1, "B&C" = 1, "A&B&C" = 2),
  shape = "ellipse"
)
plot(one_contained, quantities = list(type = "percent"))
```

### Russian doll

Sets intersecting inside other sets.

```{r}
#| label: russian_doll

russian_doll <- euler(c(
  "A" = 15,
  "B" = 0,
  C = 0,
  "A&B" = 10,
  "A&C" = 0,
  "B&C" = 0,
  "A&B&C" = 5
))
plot(russian_doll)
```

### Wilkinson set relationship

This set relationship is taken from Wilkinson et al. It works best with
ellipses.

```{r}
#| label: wilkinson

wilkinson <- euler(
  c(
    A = 4,
    B = 6,
    C = 3,
    D = 2,
    E = 7,
    F = 3,
    "A&B" = 2,
    "A&F" = 2,
    "B&C" = 2,
    "B&D" = 1,
    "B&F" = 2,
    "C&D" = 1,
    "D&E" = 1,
    "E&F" = 1,
    "A&B&F" = 1,
    "B&C&D" = 1
  ),
  shape = "ellipse"
)
plot(
  wilkinson,
  labels = list(fontfamily = "serif"),
  edges = list(lty = 3),
  quantities = list(type = "percent", font = 3)
)
```

### Gene set

```{r}
#| label: gene_set

genes <- euler(c(
  "SE" = 13,
  "Treat" = 28,
  "Anti-CCP" = 101,
  "DAS28" = 91,
  "SE&Treat" = 1,
  "SE&DAS28" = 14,
  "Treat&Anti-CCP" = 6,
  "SE&Anti-CCP&DAS28" = 1
))
plot(genes, quantities = list(type = c("percent", "counts")))
```

### Three sets intersecting inside a fourth

```{r}
#| label: three_inside_fourth

three_inside_fourth <- euler(c(
  "A" = 30,
  "A&B" = 3,
  "A&C" = 3,
  "A&D" = 3,
  "A&B&C" = 0.4,
  "A&B&D" = 0.4,
  "A&C&D" = 0.4,
  "A&B&C&D" = 1
))
plot(three_inside_fourth)
```

### eulerAPE combination

A combination taken from the eulerAPE article.

```{r}
#| label: eulerape

eulerape <- euler(
  c(
    "a" = 3491,
    "b" = 3409,
    "c" = 3503,
    "a&b" = 120,
    "a&c" = 114,
    "b&c" = 132,
    "a&b&c" = 126
  ),
  shape = "ellipse",
  control = list(extraopt = FALSE)
)
plot(eulerape)
```

### Four uniform interactions

This time we fit the diagram using rectangles.

```{r}
#| label: four_uniform

uniform <- euler(
  c(
    "A" = 10,
    "B" = 10,
    "C" = 10,
    "D" = 10,
    "A&B" = 3,
    "A&C" = 3,
    "A&D" = 0,
    "B&C" = 0,
    "B&D" = 3,
    "C&D" = 3,
    "A&B&C" = 1,
    "A&B&D" = 1,
    "A&C&D" = 1,
    "B&C&D" = 1,
    "A&B&C&D" = 1
  ),
  shape = "rectangle"
)
plot(
  uniform,
  labels = list(
    labels = c("Frodo", "Sam", "Merry", "Pippin"),
    font = 1:4,
    col = 1:4,
    cex = seq(1, 1.5, length.out = 4)
  )
)
```

### Two circles intersecting completely

```{r}
#| label: two_overlapping

two_overlapping <- euler(c("A" = 0, "B" = 0, "A&B" = 10))
plot(two_overlapping)
```
