1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.style.use('seaborn-paper')
def plot_violin(title, data, labels): ''' 绘制小提琴图 ''' fig, ax = plt.subplots(figsize=(16,10), dpi= 80)
plt.title(title, fontsize=22) plt.ylabel('y', fontsize=16, fontfamily='sans-serif',fontstyle='italic')
ax.grid(False)
ax.xaxis.set_tick_params(labelsize=16) ax.set_xticks([i+1 for i in range(len(data))]) ax.set_xticklabels([labels[i] for i in range(len(data))]) ax.yaxis.tick_right() ax.yaxis.set_tick_params(labelsize=16)
ax.spines['left'].set_color('none') ax.spines['bottom'].set_color('none') ax.spines['right'].set_color('none') ax.spines['top'].set_color('none')
vplot = ax.violinplot(data, vert=True, showmedians=True, showmeans=False ) for item, color in zip(vplot['bodies'], ['cyan', 'red', 'blue', 'green', 'purple']): item.set(facecolor=color, alpha=0.5) for item in ['cbars', 'cmaxes', 'cmins', 'cmedians']: plt.setp(vplot[item], edgecolor='gray', linewidth=1.5) plt.setp(vplot['cmedians'], edgecolor='black')
plt.show()
data = [ [1000, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2500], [1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100], [300, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000], [800, 1000, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900] ] labels =["China","America","Britain","Russia"]
plot_violin('测试图', data, labels)
|