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

使用Matplotlib绘制字典直方图时柱子高度一致且无间隔的问题求助

问题分析与解决方案

你遇到的问题核心是用错了绘图函数:plt.hist() 是用来绘制直方图(展示数据分布频数)的,而你需要的是绘制柱状图(展示键值对的对应关系)。下面详细解释问题原因和修复方案:

为什么会出现这些问题?

  1. 所有柱子高度一致:
    当你把字典传入 plt.hist() 时,Python会默认遍历字典的键(也就是那些字符串),直方图会把每个键当作一个独立的数据点,每个点只出现一次,所以每个类别的计数都是1,最终所有柱子高度都相同。你实际想展示的是字典的值,而不是键的出现次数。

  2. 条目增多后变成大矩形:
    当字典条目变多,plt.hist() 会生成对应数量的bin(区间),每个bin对应一个键。但直方图的柱子宽度会自动适配画布,当bin数量足够多时,柱子会完全挤在一起,没有间隔,看起来就像一个大矩形。

修复后的代码

改用 plt.bar() 绘制柱状图,这才是展示键值对关系的正确函数:

import matplotlib.pyplot as plt
dict_1={'a123456': 3000, 'b123456': 3600, 'c13456': 3700, 'd123456': 4000}

# 提取字典的键和值,分别作为x轴标签和柱子高度
keys = list(dict_1.keys())
values = list(dict_1.values())

# 绘制柱状图,通过width参数控制柱子宽度(条目多时可调小)
plt.bar(keys, values, width=0.7)

# 优化标签显示,避免截断
plt.xticks(size=10, rotation='vertical')
plt.subplots_adjust(bottom=0.2)  # 调大底部边距,防止x轴标签被截断
plt.margins(0.05)
plt.show()

条目数量较多时的优化建议

如果字典条目是原来的5倍,可以通过以下方式优化显示:

  • 缩小柱子宽度:比如把 width 设为 0.5 或更小,增加柱子之间的间隔
  • 进一步调整x轴字体大小:比如 plt.xticks(size=8, rotation='vertical')
  • 使用 plt.tight_layout() 自动适配布局,替代手动调整边距:
    plt.bar(keys, values, width=0.5)
    plt.xticks(size=8, rotation='vertical')
    plt.tight_layout()
    plt.show()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:12:28