在条形图Matplotlib中并排显示绝对值和百分比值

2024-09-29 23:31:16 发布

您现在位置:Python中文网/ 问答频道 /正文

对于我一直面临的以下问题,我想依靠你的帮助。我一直在尝试,但没有成功,把绝对值和百分比值放在一起。其中5347为百分比值,位于括号外,1715为绝对值,位于括号内。绝对值和百分比值都是已知的,因此,无需进行任何计算即可获得它们。我把代码留在这里,让你看看我能走多远。这就是错误:

TypeError: __init__() got multiple values for argument 'xytext'
x_axis = ["MJO Active","MJO Inactive"]
y_axis = [53,47]

fig, ax = plt.subplots(figsize=(10,7))
palette = sns.color_palette(["#55a868"])
rects = sns.barplot(x_axis,y_axis, linewidth = 0, color='#55a868')

ax.tick_params(axis='both', which='major', pad=1)
plt.xlabel('MJO Activity', fontsize=24)
plt.xticks(rotation="horizontal", size = 20)

ax.locator_params(axis='y', integer=True)
plt.ylabel('Percentage of Events (%)', fontsize=24)
plt.yticks(size = 18)
plt.ylim(0,60)

plt.title('ONDJFMA - 1996/2014',fontsize=24)
 
ax.get_xaxis().set_label_coords(0.5,-0.10)
ax.get_yaxis().set_label_coords(-0.06,0.5)

values = [17, 15]
v = 0
for rect in rects.patches:
    rects.annotate(format(rect.get_height(), '.0f'), 
                   (rect.get_x() + rect.get_width() / 2., 1.0*rect.get_height()), 
                   '%d(%d)' % (int(rect.get_height()), values[v]), ha = 'center', va='bottom', fontsize = 20, 
                   xytext = (0, 0), 
                   textcoords = 'offset points')
    v = v + 1

plt.show()

Tags: rectforgetpltax括号百分比values
1条回答
网友
1楼 · 发布于 2024-09-29 23:31:16

你就快到了。我们使用zip链接条形图矩形、百分比值和绝对值,然后使用f-string formatting进行显示:

...
values = [17, 15]

for rect, perc, vals  in zip(rects.patches, y_axis, values):    
    rects.annotate(f"{perc}% ({vals})", (rect.get_x() + rect.get_width() / 2., rect.get_height()),
                 ha='center', va='center', fontsize=20, color='black', xytext=(0, 10),
                 textcoords='offset points')

plt.tight_layout()
plt.show()

样本输出: enter image description here

相关问题 更多 >

    热门问题