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

使用matplotlib绘制大量整数直方图时触发颜色参数不匹配报错

问题根源

你传入plt.hist()的values是嵌套列表结构:你将字典的每个值单独转成列表存入values,matplotlib会把一级列表中的每个元素识别为独立数据集,最终识别出9342个数据集,因此要求传入和数据集数量一致的颜色值,和你要绘制整数分布直方图的需求不匹配。另外你的代码里还有三处隐性问题:

  • 排序后的字典没有赋值回原变量,属于无效代码
  • 旧版本的normed参数在新版matplotlib中已经被废弃,会触发警告
  • 普通Python列表没有.min()/.max()方法,直接调用会触发属性错误
修正方案

如果你的需求是统计字典存储的所有整数的整体频率分布,只需要把嵌套的values展平为一维列表即可,修正后的完整代码如下:

import matplotlib.pyplot as plt

# 按值频率排序列表,补上变量赋值
date_frequency = dict(sorted(date_frequency.items(), key=lambda item: item[1]))
keys = list(date_frequency.keys())

# 展平所有字典值为一维整数列表,不要生成嵌套结构
values = []
for val_group in date_frequency.values():
    values.extend(list(val_group))

fig_per_date = plt.figure()
per_date = fig_per_date.add_subplot(111)
counts, bins, patches = per_date.hist(
    values,
    bins=len(keys),
    density=False, # 替换已废弃的normed参数
    color='g',
    linewidth=0
)
# 普通Python列表使用内置min/max计算坐标范围
plt.gca().set_xlim(min(values), max(values))
plt.show()

如果你确实需要按字典分组绘制多数据集的分组/堆叠直方图,不需要逐个指定9342个颜色,只要去掉手动传入的color参数,matplotlib会自动调用内置颜色循环为每个数据集分配颜色,示例修改如下:

# 多数据集模式下移除color参数即可自动分配颜色
counts, bins, patches = per_date.hist(
    values,
    bins=len(keys),
    density=False,
    linewidth=0
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:57:19