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

如何按用户自定义区间为直方图配置颜色映射(colormap)

复现带渐变调色板的直方图

解决步骤

  • 生成数据并绘制基础直方图
    先调用plt.hist()绘制直方图,同时获取柱子对象、区间边界等核心信息,以均匀分布数据为例:

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 生成均匀分布模拟数据
    data = np.random.uniform(0, 10, 1000)
    # 绘制直方图,获取频数、区间边界、柱子对象
    n, bins, patches = plt.hist(data, bins=10, edgecolor='white')
    
  • 按柱子区间映射渐变颜色
    以每个柱子的中心位置为依据,先将其归一化到[0,1]区间,再通过指定色板(如viridis)生成对应颜色,逐个赋值给柱子:

    # 计算每个柱子的中心坐标
    bin_centers = 0.5 * (bins[:-1] + bins[1:])
    # 归一化柱子中心值到[0,1],适配色板输入要求
    norm = plt.Normalize(bin_centers.min(), bin_centers.max())
    # 遍历设置每个柱子的填充色
    for center, patch in zip(bin_centers, patches):
        color = plt.cm.viridis(norm(center))
        patch.set_facecolor(color)
    
  • 添加颜色条(可选)
    若需要和示例图一致显示颜色对应的数值范围,可添加颜色条:

    # 创建颜色条对应的映射对象
    sm = plt.cm.ScalarMappable(norm=norm, cmap=plt.cm.viridis)
    sm.set_array([])
    plt.colorbar(sm)
    
  • 调整显示细节
    补充坐标轴标签、标题后完成绘图:

    plt.xlabel('数值')
    plt.ylabel('频数')
    plt.title('渐变颜色直方图')
    plt.show()
    

关键说明

  • 之前颜色被限制在[0,1]是因为未对原始数值做归一化处理,上述代码通过plt.Normalize()将柱子位置值映射到色板要求的[0,1]区间,完美匹配色板输入逻辑。
  • 不管是plt.hist还是sns.histplot,最终生成的都是matplotlib的Patch对象,都可以通过遍历patches(sns需通过ax.patches获取)的方式设置渐变颜色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:02:45