用python画Bar chart with error bars叠加scatter plot

 原数据

共五组,每组7个数值
  • data.xlsx (For bar chart)
  • data2.xlsx(For scatter plot)
       y='docking score',  x='protein', hue='coronavirus'

Bar chart with error bars

  • #!/usr/bin/env python3

  • import numpy as np
  • import pandas as pd
  • import matplotlib.pyplot as plt
  • import seaborn as sns

  • # Enter data
  • data = pd.read_excel('./data.xlsx')

  • # Create lists for car plot
  • materials = ['nsp3', 'nsp5', 'nsp12', 'nsp13', 'nsp16']
  • x_pos = np.arange(len(materials))
  • CTEs = [np.mean(data['nsp3']), np.mean(data['nsp5']), np.mean(data['nsp12']), np.mean(data['nsp13']), np.mean(data['nsp16'])]    # Calaulate the average
  • error = [np.std(data['nsp3']), np.std(data['nsp5']), np.std(data['nsp12']), np.std(data['nsp13']), np.std(data['nsp16'])]    # Calaulate the std

  • # Build the plot
  • fig, ax = plt.subplots()
  • ax.bar(x_pos, CTEs, yerr=error, align='center', width=0.5, alpha=0.5, ecolor='black', capsize=10, color=sns.xkcd_rgb['faded blue'])  # bar with error bars
  • plt.yticks(fontproperties='Times New Roman', fontsize=12)
  • ax.set_xticks(x_pos)
  • ax.set_xticklabels(materials, fontproperties='Times New Roman', fontsize=12)
  • ax.invert_yaxis()     #翻转y轴负值到x轴上方
  • ax.set_ylabel('Docking score(kcal/mol)', fontproperties='Times New Roman', fontsize=15, weight='bold')
  • ax.set_xlabel('Protein', fontproperties='Times New Roman', fontsize=15, weight='bold')
  • ax.spines['top'].set_visible(False)
  • ax.spines['right'].set_visible(False)

  • plt.show()

叠加scatter plot(seaborn库)

  • # Enter data
  • data2 = pd.read_excel('./data2.xlsx')

  • # Build the plot
  • sns.set(style='darkgrid')
  • sns.swarmplot(x='protein', y='docking score', hue='coronavirus', data=data2, palette='Set2')  
  • plt.legend(bbox_to_anchor=(1.02, 0.95), loc=2, borderaxespad=0, prop='Times New Roman', fontsize=10)
  • plt.tight_layout()  

  • # Save and show the figure
  • plt.savefig('plot_with_error_bars.png')
  • plt.show()
ps: swarmplot() can draw a categorical scatterplot with non-overlapping points.