Violin Plot with python

天涯浪子 提交于 2019-12-23 05:00:13

问题


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?


回答1:


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)

You should file a bug report.



来源:https://stackoverflow.com/questions/43224751/violin-plot-with-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!