The `xyloplot`

function displays continuous or discrete data as histogram style violin plots, or “xylophones”.

`xyloplot`

accepts a simple numeric vector…

`xyloplot(rnorm(1000))`

… or a list of simple numeric vectors…

```
xyloplot(
x=lapply(1:3, function(mean) rnorm(mean=mean, n=1000)),
breaks=20,
col=rainbow(3),
main="title")
```

… or discrete numeric data (supplied as a factor)…

```
xyloplot(
replicate(n=5, simplify=FALSE,
expr=factor(sample(c(0.01, 0.1, 0.2, 0.25, 0.5, 1), size=10, replace=TRUE))),
col=rainbow(5))
```

… or general factors with wordy levels…

```
xyloplot(
sample(c("goldfish","cat","dog","fish","mouse","giraffe"),
size=100, replace=TRUE))
```

The `xylo_positions`

function gives you the x-coordinates of the centres of the xylophones in case you want to add further graphical objects. For example, here we’ll add the upper quartile as a red line for samples from 3 normal distributions.

```
data <- lapply(1:3, function(mean) rnorm(mean=mean, n=1000))
xyloplot(x=data)
n <- length(data)
positions <- xylo_positions(n)
upper_qs <- sapply(data, function(sample) quantile(sample, prob=0.75))
segments(x0=positions-1/n/2, x1=positions+1/n/2, y0=upper_qs, y1=upper_qs, col="red", pch=19)
```

`xyloplot`

accepts an `rhs`

argument, causing the xylophones to split in the middle, and plotting left hand side distributions `x`

and right hand side ones from `rhs`

. Note that graphical options, e.g. `col`

, are recycled over the distributions going from left to right, regardless of whether they are lhs or rhs.

```
data_rhs <- lapply(2:4, function(mean) rnorm(mean=mean, sd=2, n=2000))
xyloplot(x=data, rhs=data_rhs, col=rainbow(2))
```

`xyloplot`

accepts a `freq`

argument. It is equivalent to the `freq`

argument in `hist`

: a logical value which if `FALSE`

(default) makes the width of bars represent frequency densities, and if `TRUE`

, makes the width of bars represent frequencies/counts. In the example below, note that the `rhs`

object contains twice as many observations as the `lhs`

object. Setting `freq`

to `TRUE`

will therefore mean that the right-hand side bars collectively occupy twice as much width as the left-hand side ones.

```
lhs <- rnorm(n=1000)
rhs <- rnorm(n=2000)
par(mfrow=c(1, 2))
xyloplot(main="freq=FALSE", x=lhs, rhs=rhs, col=rainbow(2), freq=FALSE)
xyloplot(main="freq=TRUE", x=lhs, rhs=rhs, col=rainbow(2), freq=TRUE)
```