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

如何绘制每10个值区间使用不同颜色的直方图?

解决方案:按10值区间设置彩色直方图

问题分析

你之前用list(range(100))作为bins,会生成99个宽度为1的细碎区间,和目标效果不符。要实现每10个值的区间用不同颜色,需要调整bins的分组逻辑,同时为每个区间单独设置颜色。

步骤1:调整bins分组

把bins设置为间隔10的序列,比如0-10、10-20……90-100,每个区间覆盖10个值。如果你的数据里有超过100的数值(比如示例中的500),可以选择过滤掉这些值,或者把bins范围扩展到最大数值以上。

步骤2:为每个区间设置不同颜色

绘制直方图后,遍历每个bar的patch对象分配不同颜色;也可以直接在plt.hist中传入自定义颜色列表。

完整代码示例

import matplotlib.pyplot as plt
import numpy as np

# 你的原始数据
y = [500, 477, 455, 434, 415, 396, 378, 361, 344, 328, 314, 299, 286, 273, 260, 248, 237, 226, 216, 206, 197, 188, 179, 171, 163, 156, 149, 142, 135, 129, 123, 118, 112, 107, 102, 98, 93, 89, 85, 81, 77, 74, 70, 67, 64, 61, 58, 56, 53, 51, 48, 46, 44, 42, 40, 38, 36, 35, 33, 32, 30, 29, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 15, 14, 13, 13, 12, 12, 11, 11, 10, 10, 9, 9, 8, 8, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5, 5]

# 过滤掉大于100的值(如果需要保留,可跳过这步并扩展bins范围)
filtered_y = [val for val in y if val <= 100]

# 设置每10个值一个区间的bins
bins = np.arange(0, 101, 10)

# 绘制直方图,获取每个bar的patch对象
n, bins, patches = plt.hist(filtered_y, bins=bins, edgecolor='black')

# 为每个区间分配不同颜色(使用viridis渐变配色)
colors = plt.cm.viridis(np.linspace(0, 1, len(patches)))
for patch, color in zip(patches, colors):
    patch.set_facecolor(color)

# 添加图表元素
plt.xlabel('数值区间')
plt.ylabel('频数')
plt.title('每10值区间分组的彩色直方图')
plt.grid(axis='y', alpha=0.75)

plt.show()

扩展说明

  • 如果要保留大于100的值,只需把bins改为np.arange(0, max(y)+10, 10),所有数据都会被分到对应的10值区间中。
  • 可以替换plt.cm.viridis为其他配色方案,比如plt.cm.tab10(离散配色更适合区分独立区间)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:45:03