<p>有点不同的路线。制作一个字符串<em>将</em>x值映射到名称,并将其添加到图形中</p>
<p>制作了我自己的数据框以供说明</p>
<pre><code>from matplotlib import pyplot as plt
import pandas as pd
import string,random
df = pd.DataFrame({'name':[''.join(random.sample(string.ascii_letters,15))
for _ in range(10)],
'data':[random.randint(1,20) for _ in range(10)]})
</code></pre>
<p>制作情节</p>
<pre><code>fig,ax = plt.subplots()
ax.bar(df.index,df.data)
</code></pre>
<p>制作<em>图例</em></p>
<pre><code>x_legend = '\n'.join(f'{n} - {name}' for n,name in zip(df.index,df['name']))
</code></pre>
<p>添加<em>图例</em>作为文本艺术家,并调整绘图以适应它</p>
<pre><code>t = ax.text(.7,.2,x_legend,transform=ax.figure.transFigure)
fig.subplots_adjust(right=.65)
plt.show()
plt.close()
</code></pre>
<p><a href="https://i.stack.imgur.com/7uVPY.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/7uVPY.png" alt="enter image description here"/></a></p>
<hr/>
<p>通过获取并使用文本艺术家的大小和人物的大小,可以使其<em>动态</em></p>
<pre><code># using imports and DataFrame from above
fig,ax = plt.subplots()
r = fig.canvas.get_renderer()
ax.bar(df.index,df.data)
x_legend = '\n'.join(f'{n} - {name}' for n,name in zip(df.index,df['name']))
t = ax.text(0,.1,x_legend,transform=ax.figure.transFigure)
# find the width of the Text and place it on the right side of the Figure
twidth = t.get_window_extent(renderer=r).width
*_,fwidth,fheight = fig.bbox.extents
tx,ty = t.get_position()
tx = .95 - (twidth/fwidth)
t.set_position((tx,ty))
# adjust the right edge of the plot/Axes
ax_right = tx - .05
fig.subplots_adjust(right=ax_right)
</code></pre>