用值注释matplotlib子图

我想用每个小节顶部的值注释每个小节。我已经找到了对单个图Adding value labels on a matplotlib bar chart的出色答案,但是我无法通过子图来解决。

随附为简化示例

import pandas as pd
import matplotlib as mpl
from matplotlib.colors import LinearSegmentedColormap
from matplotlib.lines import Line2D


countries = ['France','Spain','Sweden','Germany','Finland','Poland','Italy','United Kingdom','Romania','Greece','Bulgaria','Hungary','Portugal','Austria','Czech Republic','Ireland','Lithuania','Latvia','Croatia','Slovakia','Estonia','Denmark','Netherlands','Belgium']
extensions = [547030,504782,450295,357022,338145,312685,301340,243610,238391,131940,110879,93028,92090,83871,78867,70273,65300,64589,56594,49035,45228,43094,41543,30528]
populations = [63.8,47,9.55,81.8,5.42,38.3,61.1,63.2,21.3,11.4,7.35,9.93,10.7,8.44,10.6,4.63,3.28,2.23,4.38,5.49,1.34,5.61,16.8,10.8]
life_expectancies = [81.8,82.1,80.7,80.5,76.4,82.4,73.8,80.8,73.5,74.6,79.9,81.1,77.7,72.1,72.2,77,75.4,74.4,79.4,81,80.5]
data = {'extension' : pd.Series(extensions,index=countries),'population' : pd.Series(populations,'life expectancy' : pd.Series(life_expectancies,index=countries)}

df = pd.DataFrame(data)
df = df.sort('life expectancy')

fig,axes = plt.subplots(nrows=3,ncols=1)
for i,c in enumerate(df.columns):
    df[c].plot(kind='bar',ax=axes\[i\],figsize=(12,10),title=c)
plt.savefig('EU1.png',bbox_inches='tight')]

用值注释matplotlib子图

zqnj2004 回答:用值注释matplotlib子图

实际上是相似的,但是在您的情况下,它是原始答案中的axes[i]而不是ax

fig,axes = plt.subplots(nrows=3,ncols=1)
for i,c in enumerate(df.columns):
    df[c].plot(kind='bar',ax=axes[i],figsize=(12,12),title=c)

    # here it's almost the same with your linked answer
    rects = axes[i].patches
    labels = df[c].values
    for rect,label in zip(rects,labels):
        height = rect.get_height()
        axes[i].text(rect.get_x() + rect.get_width() / 2,height + 5,label,ha='center',va='bottom')

fig.tight_layout() # to avoid overlapping

plt.savefig('EU1.png',bbox_inches='tight')

请注意,您可能仍需要对y轴进行一些微调,以免标签超出子图。

本文链接:https://www.f2er.com/3124786.html

大家都在问