【问题标题】:Absolute Values and Percentage Values Side by Side in Bar Chart Matplotlib条形图 Matplotlib 中并排的绝对值和百分比值
【发布时间】:2021-01-10 16:50:15
【问题描述】:

对于我遇到的以下问题,我希望得到您的帮助。我一直在尝试将绝对值和百分比值并排放置,但没有成功。其中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()

【问题讨论】:

  • 欢迎来到stackoverflow!您可能想要创建一个minimal, reproducible example 将您的代码剥离到绝对必要的状态,并包含所有需要的东西,即所有库,尤其是一些玩具数据。也许你可以附上一张图,它现在的样子和应该是什么样子
  • @max 你好,max,非常感谢你的回归。我是这个社区的初学者,我仍在学习正确行事,遵守规则和礼貌。因为我会更有效地参与,我会习惯这一切。在下一篇文章中,我处理了您向我提出的所有建议,对此我非常感谢。我借此机会在这里,如果你能帮助我,我在这里留下深深的感谢。
  • 很高兴来到这里。你可以编辑你的帖子,让人们更有可能回复它
  • @Sr.我更完整地编辑了问题,包括代码,所以毫无疑问。非常感谢。

标签: python matplotlib seaborn bar-chart


【解决方案1】:

你快到了。我们将条形矩形、百分比值和绝对值与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()

示例输出:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多