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

如何在同一图表中绘制多个2D数据直方图?

在同一图表中绘制多个2D直方图的实现方法

当然可以实现,下面是几种基于Matplotlib的实用方案:

方法1:叠加hist2d并调整透明度

通过多次调用plt.hist2d(),配合透明度参数alpha让不同数据集的直方图叠加显示,同时用不同的颜色映射区分。

示例代码:

import matplotlib.pyplot as plt
import numpy as np

# 生成两组模拟2D数据
np.random.seed(42)
data1 = np.random.multivariate_normal([0, 0], [[1, 0.5], [0.5, 1]], 1000)
data2 = np.random.multivariate_normal([2, 2], [[1, -0.3], [-0.3, 1]], 1000)

# 创建画布
plt.figure(figsize=(8, 6))

# 绘制第一组数据的2D直方图
plt.hist2d(data1[:, 0], data1[:, 1], bins=30, alpha=0.6, cmap='Blues', label='数据集1')
# 绘制第二组数据的2D直方图
plt.hist2d(data2[:, 0], data2[:, 1], bins=30, alpha=0.6, cmap='Reds', label='数据集2')

# 添加图例、色标和标题
plt.legend()
plt.colorbar(label='频数')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.title('叠加的2D直方图')

plt.show()

这里的关键是alpha参数(取值0-1),它让不同直方图的颜色重叠区域可见,同时cmap选择对比强烈的颜色映射,避免视觉混淆。

方法2:用hexbin绘制六边形分箱直方图

如果觉得矩形分箱的叠加效果不够清晰,可以用plt.hexbin()生成六边形分箱的2D直方图,同样支持叠加和透明度设置:

plt.figure(figsize=(8, 6))

plt.hexbin(data1[:, 0], data1[:, 1], gridsize=30, alpha=0.6, cmap='Greens', label='数据集1')
plt.hexbin(data2[:, 0], data2[:, 1], gridsize=30, alpha=0.6, cmap='Oranges', label='数据集2')

plt.legend()
plt.colorbar(label='频数')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.title('叠加的六边形2D直方图')

plt.show()

方法3:转换为等高线图叠加

如果不想用颜色叠加,还可以先计算每组数据的2D直方图统计结果,再用contourf()绘制填充等高线图:

plt.figure(figsize=(8, 6))

# 计算第一组数据的直方图统计
counts1, xedges1, yedges1 = np.histogram2d(data1[:, 0], data1[:, 1], bins=30)
# 计算网格中心点
xcenters1 = (xedges1[:-1] + xedges1[1:]) / 2
ycenters1 = (yedges1[:-1] + yedges1[1:]) / 2
# 绘制等高线
plt.contourf(xcenters1, ycenters1, counts1.T, alpha=0.5, cmap='Purples', label='数据集1')

# 第二组数据同理
counts2, xedges2, yedges2 = np.histogram2d(data2[:, 0], data2[:, 1], bins=30)
xcenters2 = (xedges2[:-1] + xedges2[1:]) / 2
ycenters2 = (yedges2[:-1] + yedges2[1:]) / 2
plt.contourf(xcenters2, ycenters2, counts2.T, alpha=0.5, cmap='YlOrBr', label='数据集2')

plt.legend()
plt.colorbar(label='频数')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.title('等高线式多2D直方图')

plt.show()

这些方法都能在同一图表中清晰展示多组2D数据的分布特征,你可以根据数据特点和可视化需求选择合适的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 15:32:43