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

Matplotlib如何绘制不同颜色、不同透明度的并列直方图?

多数据集并列直方图绘制(带独立颜色与透明度)

需求:将多个数据集绘制成并列直方图,每个数据集需拥有独立的颜色和透明度(alpha)值。

遇到的问题

第一次尝试代码

colors = ['red', 'green', 'blue']
alphas = [1.0, 0.7, 0.3]
plt.hist([data1, data2, data3], bins = 15, label=['Data 1', 'Data 2', 'Data 3'], color = colors, alpha = alphas)

直接传入alpha列表时触发报错:

alpha must be numeric or None, not <class 'list'>

第二次尝试(循环绘制)

改用循环逐个绘制后,得到的是重叠的直方图,而非需求中的并列样式:

datas = [data1, data2, data3]
colors = ['red', 'green', 'blue']
alphas = [1.0, 0.7, 0.3]
labels = ['Data 1', 'Data 2', 'Data 3']
plt.savefig('images/bla.png')
for data, label, color, alpha in zip(datas, labels, colors, alphas):
    plt.hist(data, bins=10, label=label, color=color, alpha=alpha)

解决方案

要实现并列直方图且保留每个数据集的独立颜色与透明度,需要:

  1. 统一所有数据集的bins范围,确保柱子对齐
  2. 在循环绘制时,通过调整柱子位置和宽度,实现并列效果

正确代码示例

import matplotlib.pyplot as plt
import numpy as np

# 模拟测试数据(可替换为实际数据集)
data1 = np.random.normal(0, 1, 1000)
data2 = np.random.normal(2, 1, 1000)
data3 = np.random.normal(4, 1, 1000)

datas = [data1, data2, data3]
colors = ['red', 'green', 'blue']
alphas = [1.0, 0.7, 0.3]
labels = ['Data 1', 'Data 2', 'Data 3']

# 计算所有数据的统一区间,生成对齐的bins
all_data = np.concatenate(datas)
bins = np.histogram_bin_edges(all_data, bins=15)
bin_width = bins[1] - bins[0]
# 设置单根柱子的宽度,留出并列间隙
rwidth = 0.25

# 循环绘制每个数据集的并列柱子
for i, (data, label, color, alpha) in enumerate(zip(datas, labels, colors, alphas)):
    # 调整每个数据集的柱子起始位置,实现并列排列
    plt.hist(data, bins=bins, label=label, color=color, alpha=alpha,
             histtype='bar', rwidth=rwidth, align='edge',
             left=bins[:-1] + i * rwidth * bin_width)

plt.legend()
plt.title('并列直方图(独立颜色与透明度)')
plt.savefig('images/bla.png')
plt.show()

关键说明

  • 统一bins:确保所有数据集的柱子基于相同的区间范围,避免错位
  • left参数:通过偏移每个数据集的柱子起始位置,实现并列布局
  • rwidth:控制单根柱子的宽度,防止并列时出现重叠
  • 循环内单独指定alpha和color,满足每个数据集的独立样式需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:40:27