Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将图例标签添加为条形图批注?_Python_Python 3.x_Pandas_Matplotlib - Fatal编程技术网

Python 如何将图例标签添加为条形图批注?

Python 如何将图例标签添加为条形图批注?,python,python-3.x,pandas,matplotlib,Python,Python 3.x,Pandas,Matplotlib,我想根据条形图图例中出现的文本获取注释。请看我的最小复制示例: import matplotlib.pyplot as plt import pandas as pd import numpy as np data = { 'cat1':[np.nan, 0.33, 0.25], 'cat2':[0.4, 0.33, np.nan], 'cat3':[np.nan, np.nan, 0.25]} df = pd.DataFrame(data) fig = plt.figure(); ax =

我想根据条形图图例中出现的文本获取注释。请看我的最小复制示例:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

data = { 'cat1':[np.nan, 0.33, 0.25], 'cat2':[0.4, 0.33, np.nan], 'cat3':[np.nan, np.nan, 0.25]}
df = pd.DataFrame(data)
fig = plt.figure();
ax = df.plot.barh(stacked=True, figsize=(10,8));
ax.grid()
ax.legend()
 
# annotations:
for p in ax.patches:
    left, bottom, width, height = p.get_bbox().bounds
    if width > 0:
         ax.annotate((str(round(width*100))+' %'), xy=(left+width/2, bottom+height/2), 
                    ha='center', va='center')
我得到的结果如下:

但是我想要这样的输出(在单个条中以注释的形式描述图例)

我试图从
ax.patches[0]中获取注释文本。获取标签()
,但它给出了输出
“\u nolegend”

感谢您的帮助

  • 请参阅内联代码注释
  • 绘制堆叠条形图时,首先绘制与图例
    标签中的第一个值相对应的底部面片
    p
  • 除非
    i==0
    ,否则根据
    df
    的长度,将
    计数器的值增加1,并使用
    计数器
    标签
    索引正确的标签。
    • 在这种情况下,对于前31个修补程序,
      计数器
      将为
      0
      ,然后对于第二个31个修补程序,计数器将增加到
      1
      ,依此类推。
      • 打印每个标签的所有行(31)后,计数器需要递增
  • 我将为图例使用不同的调色板,因为当前调色板中没有足够的颜色用于所有列
导入matplotlib.pyplot作为plt
作为pd进口熊猫
将numpy作为np导入
导入seaborn作为sns
#设置数据帧
df=pd.read\u csv('test.csv'))
df.set_索引('hyd_yr',就地=真)
#新调色板
颜色=sns.color\u调色板('husl',n\u colors=len(df.columns))
#密谋
图=plt.figure();
ax=df.plot.barh(叠加=True,figsize=(20,16),color=colors)
ax.grid()
ax.图例()
handles,labels=ax.get_legend_handles_labels()#提取图例标签
#注释:
计数器=0#计数器用于索引图例标签
对于枚举中的i,p(ax.patches,0):#
如果(i%len(df)==0)和(i!=0):#根据df的长度将计数器重置为0
计数器+=1#增加计数器
左、下、宽、高=p。获取_bbox()边界
标签=标签[计数器]#为正确的标签编制索引
如果宽度>0:
ax.annotate((f'{label}:{width*100:0.0f}%'),xy=(左+宽/2,下+高/2),ha='center',va='center')

test.csv中的真实数据
hyd_yr、BM、HFA、HFZ、HM、HNA、HNZ、NWA、NWZ、NZ、SEA、SWA、SWZ、TB、TRM、WA、WS、WZ
1989,,,,,,,,0.0979020979020979,,,,,,,0.3006993006993007,,0.23776223776223776
1990,0.14835164835164835,,,,,,,,,,,,,,0.17582417582417584,,0.21428571428571427
1991,0.23626373626373626,0.08791208791208792,,,,,,,,,,,,,,,0.25824175824175827
1992,,,,0.18032786885245902,,,,,,,,,,,0.16393442622950818,,0.16393442622950818
1993,0.0989010989010989,,,0.12087912087912088,,,,,,,,,,,,,0.22527472527472528
1994,,,0.07142857142857142,,,,,,,0.09340659340659341,,,,,,,0.34615384615384615
1995,,,,0.1043956043956044,,,,0.0989010989010989,,,,,,,,,0.3241758241758242
1996,,0.12571428571428572,,,,,,,0.11428571428571428,,0.13142857142857142,,,,,,
1997,,,,0.08791208791208792,,,,,,,,,,,0.08791208791208792,,0.2032967032967033
1998,,,,,0.08241758241758242,,0.08791208791208792,,,,,,,,,,0.22527472527472528
1999,0.15934065934065933,,,,,,,,,,,,,0.09340659340659341,,,0.23076923076923078
2000,,,,,,,,0.11475409836065574,,,,,,,0.12021857923497267,,0.22404371584699453
2001,,,,,,,,,,,,0.11299435028248588,0.11299435028248588,,,,0.1751412429378531
2002,0.1043956043956044,,,,,,,0.17032967032967034,,,,,,,,,0.2032967032967033
2003,0.11538461538461539,0.11538461538461539,,,,,,,,,,,,,,,0.14285714285714285
2004,0.14207650273224043,,,,,,,,,,,,,0.12568306010928962,,,0.2185792349726776
2005,0.13736263736263737,,,,,,,0.13736263736263737,,,,,,0.2087912087912088,,,
2006,0.13186813186813187,,,,,,,0.15934065934065933,,,,,,0.13736263736263737,,,
2007,0.10989010989010989,,,,,,,,,,,0.16483516483516483,,,,,0.21428571428571427
2008,0.20765027322404372,,,,,,,0.08196721311475409,,,,,,,,,0.28415300546448086
2009,0.11731843575418995,,,,,,,0.12290502793296089,,,,,,0.10614525139664804,,,
2010,,,,,,,,,,,,0.10989010989010989,,,,0.12637362637362637,0.13186813186813187
2011,0.15254237288135594,,,,,,,,,,,0.0903954802259887,,,,,0.11864406779661017
2012,,,,0.10382513661202186,,,,0.18032786885245902,,,,,,,,,0.15300546448087432
2013,,,,,,0.13186813186813187,,,,,,,,0.15934065934065933,,,0.10989010989010989
2014,0.1043956043956044,,,,,,,,,,,0.23076923076923078,,,,,0.08241758241758242
2015,0.12290502793296089,,,,,,,,,,,,,0.1452513966480447,,,0.1340782122905028
2016,,,,,,,,,,,,,,0.09836065573770492,0.1366120218579235,,0.14207650273224043
2017,0.14285714285714285,,,0.14835164835164835,,,,,,,,,,,,,0.13736263736263737
2018,0.1043956043956044,,,,,,,,,,,,,0.12637362637362637,,,0.15934065934065933
2019,0.11363636363636363,,,,,,0.12121212121212122,0.12121212121212122,,,,,,,,,