1、在老版本的matplotlib中,只能通过plt.text一个个给柱状图添加数值,后续新版本中添加了plt.bar_label()函数,可以方便快捷的标注,方法如下:
bar1 = plt.bar([1,2,3],[2,5,9])
plt.bar_label(bar1)
但是如果要在seaborn上操作的话:
bar2 = sns.barplot([1,2,3],[2,3,4])
plt.bar_label(bar2)
上面运行报错,显示该对象没有datavalues这个属性,猜测可能是传入给plt.bar_label的对象不对,对plt.bar与sns.barplot返回的对象进行探究:
可以看到两个对象不一致,观察可知plt.bar_label传入的应为BarContainer对象,而sns.barplot返回的是AxesSubplot对象。
正确做法如下:取出AxesSubplot的containers属性,得到container对象的迭代器,遍历其或单独取出container对象传给plt.bar_label即可。
bar2 = sns.barplot([1,2,3],[2,3,4])
plt.bar_label(bar2.containers[0])