Here we demonstrate how to combine violin plots with other base R graphics. In principle any base R graphics can be overlayed on top of a violin plot for annotation.

Many problems can be resolved by overlaying base R graphics and integrating vioplot with other plotting functions. Any additional elements can be overlayed by running commands after generating the plot. The x-axes are integer values [1,2,3,…] for each violin. The y-axes are continuous values as displayed.

The following plotting elements are supported for example: points, lines, polygon

It is also possible to modify plotting parameters with: title, axis, legend

“vioplot()” functions similar to “plot()” and passes input arguments from “par()”.

For example it is possible to add additional annotations.

```
# generate dummy data
rnorm(25, 3, 0.5)
a <- rnorm(25, 2, 1.0)
b <- rnorm(25, 2.75, 0.25)
c <- rnorm(25, 3.15, 0.375)
d <- rnorm(25, 1, 0.25)
e <- cbind(a, b, c, d, e)
datamat <-dim(datamat)
```

`## [1] 25 5`

`library("vioplot")`

```
vioplot(datamat, ylim = c(0, 5))
# compute medians
apply(datamat, 2, median)
data.med <- data.med
```

```
## a b c d e
## 2.9040581 1.3545198 2.8318172 3.1564032 0.9491974
```

```
#overlay medians
lines(data.med, lty = 2, lwd = 1.5)
points(data.med, pch = 19, col = "red", cex = 2.25)
```

It is also possible to modify the axes labels and titles as shown in this example. Here default axes are suppressed and replaced with custom parameters.

```
c(rnorm(25, 3, 1), rnorm(25, 2, 0.5))
outcome <- c(rep("treatment", 25), rep("control", 25))
intervention <-table(intervention)
```

```
## intervention
## control treatment
## 25 25
```

`names(table(intervention))`

`## [1] "control" "treatment"`

`unique(sort(intervention))`

`## [1] "control" "treatment"`

```
as.factor(intervention)
intervention <-levels(intervention)
```

`## [1] "control" "treatment"`

```
data.frame(outcome, intervention)
d <-vioplot(outcome ~ intervention, data = d, xaxt = 'n', yaxt = 'n',
main = "", xlab = "", ylab = "")
axis(side = 1, at = 1:length(levels(intervention)), labels = levels(intervention))
mtext("custom x labels for intervention", side = 1)
mtext("custom y labels for outcome", side = 2)
title(main = "example with custom title", sub = "subtitles are supported")
```

This is also supported by the histogram plot.

```
histoplot(outcome ~ intervention, data = d, xaxt = 'n', yaxt = 'n',
main = "", xlab = "", ylab = "")
axis(side = 1, at = 1:length(levels(intervention)), labels = levels(intervention))
mtext("custom x labels for intervention", side = 1)
mtext("custom y labels for outcome", side = 2)
title(main = "example with custom title", sub = "subtitles are supported")
```