柱状图加label text

普通柱状图:
seaborn.barplot()画图后返回一个matplotlib.axes.Axes的对象,这个对象有一个方法
Axes.text(selfxysfontdict=Nonewithdash=<deprecated parameter>**kwargs)
把s字符加到坐标xy处,这个xy是所谓的数据坐标,我这里只涉及到barplot,我用barplot举例,普通的barplot每一个bar从左到右是0、1、2、...这样,y就是实际数据的y,而s一般就是这个bar的高度,s往往同y,这个函数是一个text一个text去操作,所以涉及到多个bar,一般是遍历,每一个坐标,在dataframe的应用往往是
for index,row in df.iterrows():
    g.text(index,row['y'],row['y'],color="black",ha="center")
这里的index真的df的index,如果index不是自然数,那就有问题。
我尝试了一种写法
for i,index in enumerate(df.index):
    g.text(i,df.loc[index,'b'],df.loc[index,'b'],color="black",ha="center")

多bars柱状图:
其实明白了text这个方法机制就明白了,text因为传入的是坐标,所以两个标签,一个往左移一下,一个往右移一下便可。
我用多bars画法,是pd.melt列转行,barplot传入hue参数,这个时候我要加text,使用列转行的df,用variable进行条件筛选,分别遍历两次就好。
for i,index in enumerate(df[df['variable'] == 'XXX'].index):
    g.text(i-0.2,df.loc[index,'b'],df.loc[index,'b'],color="black",ha="center")
for i,index in enumerate(df[df['variable'] == 'YYY'].index):
    g.text(i+0.2,df.loc[index,'b'],df.loc[index,'b'],color="black",ha="center")

这个左右平移的距离,自己把握,可以想象,1个单位是下一个bar,本身bar有宽度,一般0.18合适

另外matplotlib.pyplot as plt
也有text方法,用法就是plt.text()各个参数都是相同的

另外matplotlib有一个感觉更底层的方法,供参考
https://matplotlib.org/gallery/lines_bars_and_markers/barchart.html#sphx-glr-gallery-lines-bars-and-markers-barchart-py

留言

熱門文章