<p>以下是一种方法:</p>
<pre><code>ax=df.plot(kind='bar', stacked=True)
#loop to add the text
list_values = (dffinal['numPatients6month'].tolist()[::3]
+ dffinal['numPatients6month'].tolist()[1::3]
+ dffinal['numPatients6month'].tolist()[2::3])
for rect, value in zip(ax.patches, list_values):
h = rect.get_height() /2.
w = rect.get_width() /2.
x, y = rect.get_xy()
ax.text(x+w, y+h,value,horizontalalignment='center',verticalalignment='center')
#same than your code
plt.xticks(range(0,10), ['6month','1 year','1.5 year','2 year','2.5 year','3 year','3.5 year','4 year','4.5 year','5 year'], fontsize=8, rotation=45)
plt.title('Cognitive Impairement-Stack bar')
plt.show()
</code></pre>
<p><code>list_values</code>将以与<code>ax.patches</code>中的<code>rect</code>相同的顺序从列'numPatients6month'获取值,结果是:</p>
<p><a href="https://i.stack.imgur.com/oNcvR.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/oNcvR.png" alt="enter image description here"/></a></p>
<p>但由于一些条形图很小,结果并不容易阅读。在</p>
<p>编辑:关于循环,<code>ax.patches</code>包含了关于您绘制的所有条的信息,因此对于我命名为<code>rect</code>的每个条,使用<code>get_xy</code>可以得到条形图左下角的位置,使用<code>get_height</code>(r.<code>get_width</code>)可以得到条的高度(r.width)。所以(x+w,y+h)给出了条中间的坐标,在这里您可以使用函数<code>ax.text</code>(参数<code>horizontalalignment</code>和<code>verticalalignment</code>来添加文本<code>value</code>(来自<code>list_values</code>)来将文本居中)</p>
<p>编辑2:更通用的方法,感谢@SpghttCd获取<code>list_values</code></p>
^{pr2}$