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

如何修改直方图(histogram)柱形颜色,按另一组数据为柱体设置对应颜色

直方图按自定义数据集上色实现方案

以下给出不同常用技术栈的实现方案,可直接根据你使用的工具选择:

Python Matplotlib 实现

核心逻辑是先绘制直方图获取每个柱形的对象,再遍历柱形绑定自定义配色数据的对应颜色:

  • 绘制直方图时接收返回的三个值:每个柱子的高度、分箱边界、每个柱形的patch对象
  • 准备和分箱数量长度一致的配色用数据集
  • 用归一化方法把配色数据映射到0-1区间后匹配色板,逐个设置柱形颜色

代码示例:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.colors import Normalize

# 替换为你自己的待统计原始数据
raw_data = np.random.randn(1000)
# 绘制直方图,bins参数可自行调整分箱数量
bin_count = 20
height, bins, patches = plt.hist(raw_data, bins=bin_count)

# 替换为你自己的配色用数据集,长度必须等于分箱数量bin_count
# 这里示例用每个分箱的中位数作为配色值,可直接替换为你的自定义数组
color_value = (bins[:-1] + bins[1:]) / 2

# 归一化配色值,绑定色板
norm = Normalize(vmin=color_value.min(), vmax=color_value.max())
color_map = cm.get_cmap('viridis')

# 遍历给每个柱形设置对应颜色
for val, patch in zip(color_value, patches):
    patch.set_facecolor(color_map(norm(val)))

# 可选:添加颜色条说明颜色和数值的对应关系
sm = cm.ScalarMappable(norm=norm, cmap=color_map)
sm.set_array([])
plt.colorbar(sm, label='颜色对应数值')

plt.xlabel('统计值')
plt.ylabel('频数')
plt.show()

Python Seaborn 实现

通过hue参数直接绑定配色维度,代码更简洁:

import seaborn as sns
import pandas as pd

# 把原始数据做分箱,绑定对应配色值
df = pd.DataFrame({
    'raw_value': raw_data,
    'color_dim': pd.cut(raw_data, bins=bin_count, labels=color_value)
})

sns.histplot(
    data=df, x='raw_value', hue='color_dim',
    palette='viridis', bins=bin_count, legend=False
)
plt.show()

R ggplot2 实现

直接在geom_histogram的fill参数绑定配色变量即可:

library(ggplot2)

# 替换为自己的数据集
data <- data.frame(raw_value = rnorm(1000))

ggplot(data, aes(x = raw_value)) +
  # fill参数替换为你自己的配色变量即可,这里示例用x轴数值做映射
  geom_histogram(aes(fill = ..x..), bins = 20, color = "white") +
  scale_fill_viridis_c(name = "颜色对应数值") +
  labs(x = "统计值", y = "频数") +
  theme_minimal()

以上方案均会自动按原始数据计算柱形高度,完全匹配你提到的“仅柱形高度和示例图不同”的需求,只需要把示例中的配色数据集替换为你自己的数值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:06:03