用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.