Consider that you have several groups, and a set of numerical values for each group. A barplot can be used in this condition to represent the **average value** of each group. However, this kind of figure must be accompanied by **error bars** showing the **confidence interval** of each group. This example shows how to draw this confidence interval, but not how to calcultate them. Note that doing that you loose an information: the **distribution** of the values is not available in this chart. I strongly advise to use a boxplot or a violin plot instead.

# libraries import numpy as np import matplotlib.pyplot as plt # width of the bars barWidth = 0.3 # Choose the height of the blue bars bars1 = [10, 9, 2] # Choose the height of the cyan bars bars2 = [10.8, 9.5, 4.5] # Choose the height of the error bars (bars1) yer1 = [0.5, 0.4, 0.5] # Choose the height of the error bars (bars2) yer2 = [1, 0.7, 1] # The x position of bars r1 = np.arange(len(bars1)) r2 = [x + barWidth for x in r1] # Create blue bars plt.bar(r1, bars1, width = barWidth, color = 'blue', edgecolor = 'black', yerr=yer1, capsize=7, label='poacee') # Create cyan bars plt.bar(r2, bars2, width = barWidth, color = 'cyan', edgecolor = 'black', yerr=yer2, capsize=7, label='sorgho') # general layout plt.xticks([r + barWidth for r in range(len(bars1))], ['cond_A', 'cond_B', 'cond_C']) plt.ylabel('height') plt.legend() # Show graphic plt.show()