Leo
Leo

Reputation: 123

How to create a Violin Plot

I want to create 10 violin plots but within one diagram. I looked at many examples like this one: Violin plot matplotlib, what shows what I would like to have at the end.

But I did not know how to adapt it to a real data set. They all just generate some random data which is normal distributed. I have data in form D[10,730] and if I try to adapt it from the link above with : example:

axes[0].violinplot(all_data,showmeans=False,showmedians=True)

my code:

axes[0].violinplot(D,showmeans=False,showmedians=True)

it do not work. It should print 10 violin plot in parallel (first dimension of D).

So how do my data need to look like to get the same type of violin plot?

Upvotes: 1

Views: 3828

Answers (1)

Paul Brodersen
Paul Brodersen

Reputation: 13041

You just need to transpose your data array D.

axes[0].violinplot(D.T,showmeans=False,showmedians=True)

This appears to be a small bug in matplotlib. The axes are treated in a non-consistent manner for a list of 1D arrays and a 2D array.

import numpy as np
import matplotlib.pyplot as plt

n_datasets = 10
n_samples = 730
data = np.random.randn(n_datasets,n_samples)

fig, axes = plt.subplots(1,3)

# http://matplotlib.org/examples/statistics/boxplot_vs_violin_demo.html
axes[0].violinplot([d for d in data])

# should be equivalent to:
axes[1].violinplot(data)

# is actually equivalent to
axes[2].violinplot(data.T)

enter image description here

You should file a bug report.

Upvotes: 1

Related Questions