You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas绘制的条形图上方显示对应字典数值?

解决条形图顶部显示对应数值的问题

核心问题分析

你遇到的两个问题根源在于:

  • 未保证counter_dct的顺序与排序后的条形图一致
  • plt.text的坐标参数使用错误(x/y顺序搞反,且未基于条形高度定位)

最优实现代码

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl

mpl.rcParams['axes.formatter.useoffset'] = False

# 定义原始字典
population_dct = {'pak': 210, 'afg': 182, 'ban': 94, 'ind': 32, 'aus': 14, 'usa': 345, 'nz': 571, 'col': 47, 'iran': 2}
counter_dct = {'pak': 1.12134, 'afg': 32.4522, 'ban': 3.44, 'ind': 1.123, 'aus': 4.22, 'usa': 9.44343, 'nz': 57.12121, 'col': 2.447, 'iran': 27.5}

# 合并为DataFrame,确保国家与两个数值一一对应
df = pd.DataFrame({
    'population': population_dct,
    'counter': counter_dct
})

# 按population降序排序,与条形图顺序完全匹配
df_sorted = df.sort_values('population', ascending=False)

# 绘制条形图并获取轴对象
ax = df_sorted['population'].plot.bar(color='g')

# 遍历每个条形,添加顶部文本
for idx, (pop_value, counter_value) in enumerate(zip(df_sorted['population'], df_sorted['counter'])):
    # 文本位置:条形x坐标为idx,y坐标为条形高度+偏移量(避免重叠)
    # 水平居中,垂直底部对齐,保证文本在条形顶部
    ax.text(
        x=idx,
        y=pop_value + 10,
        s=f'{counter_value:.2f}',  # 保留两位小数优化显示
        ha='center',
        va='bottom',
        color='blue',
        fontweight='bold'
    )

# 调整y轴上限,防止顶部文本被截断
ax.set_ylim(0, df_sorted['population'].max() + 30)

plt.savefig("temp_fig.png")
plt.show()

关键改进点

  1. 顺序匹配:通过将两个字典合并到同一DataFrame并按population排序,确保counter值的顺序与条形图完全对应,彻底解决顺序错位问题。
  2. 文本定位:
    • 使用条形的索引idx作为x坐标,保证每个文本对应正确的条形
    • 以条形高度pop_value为基础,加上固定偏移量作为y坐标,让文本显示在条形顶部
    • 通过ha='center'和va='bottom'实现文本在条形顶部居中对齐,解决位置混乱问题
  3. 显示优化:对counter值保留两位小数,调整y轴范围避免文本被截断,提升图表可读性

内容的提问来源于stack exchange,提问作者Jlow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 15:55:24