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)
 
  |