Values above the bars in a barchart in Matplotlib
I have the following code for a barchart in matplotlib
import matplotlib.pyplot as plt; plt.rcdefaults() import numpy as np import matplotlib.pyplot as plt objects = ('2004', '2005', '2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017', '2018') y_pos = np.arange(len(objects)) performance = [8.5,9.1,9.7, 10.6, 11.4, 12.6, 13.2, 13.4, 14.7, 15.4, 16.2, 16.7, 17.0, 17.5, 18.0] fig, ax = plt.subplots(figsize=(18,5)) plt.bar(y_pos, performance, align='center', alpha=0.5, color="green") plt.xticks(y_pos, objects) plt.ylim(0, 20) plt.ylabel('Share in %', fontsize = 16) plt.xlim(-0.6, len(objects) - 0.4) ax.tick_params(axis='both', which='major', labelsize=14) plt.savefig('Share_Of_Renewables_Europe.png', edgecolor='black', dpi=400, bbox_inches='tight', figsize=(18,5) ) for i, performance in enumerate(performance): ax.text(performance - 0, i + .25, str(performance), color='black', fontweight='bold') plt.show()
I would like to have values above the bars. I use the suggestion (for loop at the end of my code) from How to display the value of the bar on each bar with pyplot.barh()? but it does not look correct. Here you see the output:
Can anyone help me on that?
You used wrong order of variables in
ax.text. Use the following. Also, don't use
performance variable twice. I used
for i, perf in enumerate(performance): ax.text(i, perf + .25, str(perf), color='black', ha='center', fontweight='bold')
How to display the value of each bar in a bar chart using Matplotlib , Use matplotlib. pyplot. text() to display the value of each bar in a bar chart. x = ["A", "B", "C", "D"] y = [1, 2, 3, 4] plt. barh(x, y) for index, value in enumerate(y): plt. text(value, index, str(value)) Bar Charts in Matplotlib. Bar charts are used to display values associated with categorical data. The plt.bar function, however, takes a list of positions and values, the labels for x are then provided by plt.xticks().
i is the index of x position,
performance is height of the bar (y position). The first two parameters of
plt.text are x and y positions of the text.
for i, performance in enumerate(performance): ax.text(i, performance + .25, str(performance), color='black', fontweight='bold')
BAR CHART ANNOTATIONS WITH PANDAS AND MATPLOTLIB, I could find no easy to understand tutorial on annotating a bar chart I spent a lot of time trying to figure out how to put some text right above my bars. to collect the plt.patches data totals =  # find the values and append to� The Python matplotlib pyplot has a bar function, which helps us to create a bar chart or bar plot from the given X values, height, and width. The basic syntax of the Python matplotlib bar chart is as shown below.
In your ax.text call, replace:
performance - 0
i - 0.15
xlocs = ax.get_xticks() for i, performance in enumerate(performance): ax.text(xlocs[i] - .25, performance + .25, str(performance), color='black', fontweight='bold')
Barchart — Matplotlib 2.2.2 documentation, A bar plot with errorbars and height labels on individual bars. import numpy as np import matplotlib.pyplot as plt men_means, men_std = (20, 35, 30, 35, xpos ='center'): """ Attach a text label above each bar in *rects*, displaying its height. One thing in particular bugged me. I could find no easy to understand tutorial on annotating a bar chart on StackOverflow or any other site. MPL had some documentation, but it was too confusing for me at the time. I spent a lot of time trying to figure out how to put some text right above my bars.
Grouped bar chart with labels — Matplotlib 3.1.2 documentation, to create a grouped bar chart and how to annotate bars with labels. """Attach a text label above each bar in *rects*, displaying its height. In general, you use Axes.annotate to add annotations to your plots. This method takes the text value of the annotation and the xy coords on which to place the annotation.. In a barplot, each "bar" is represented by a patch.Rectangle and each of these rectangles has the attributes width, height and the xy coords of the lower left corner of the rectangle, all of which can be obtained with the
plt.text(bar.get_x(), yval +.005, yval) I added.005to the y-value so that the text would be placed above the bar. This can be modified to obtain the appearance you are looking for. Below is a full working example based on the original code.
If height varies more than a little from bar to bar, then multiplying that small number and height will produce gaps of awkwardly varying size. It’s only the fact that the bar heights in the original example only vary from 20 to 35 that stop it from looking terrible.