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

如何用Python/Matplotlib绘制横轴累计纵轴非累计的2D直方图

横轴为累计分布、纵轴为非累计分布的2D直方图实现方案

可以直接通过Python+Matplotlib实现,核心思路是先对横轴变量做经验累积分布转换,再调用原生2D直方图接口绘制即可。


完整可运行代码

import numpy as np
import matplotlib.pyplot as plt

# 1. 生成配对随机变量样本
x = np.random.normal(size=1000)
y = np.random.normal(size=1000)

# 2. 计算x对应的经验累积分布值作为新横轴(无需额外依赖)
x_sorted = np.sort(x)
x_cdf = np.searchsorted(x_sorted, x) / len(x)

# 可选:如果已经安装scipy,也可以用更标准化的ECDF接口计算
# from scipy.stats import ecdf
# x_cdf = ecdf(x).cdf.evaluate(x)

# 3. 绘制目标2D直方图
plt.figure(figsize=(8, 6))
# 横轴为x的累计分布,纵轴为原始y的非累计分布,bins参数可调整分箱精度
plt.hist2d(x_cdf, y, bins=30, cmap='Blues')

# 补充图表标注
plt.xlabel('X的经验累积分布')
plt.ylabel('Y的原始取值')
plt.colorbar(label='样本计数')
plt.show()

实现逻辑说明

  • 首先通过排序+位置映射的方式,把原始x的每个取值转换成它在样本中的累计占比,取值范围固定为0~1,完全符合累计分布的横轴要求
  • 纵轴保持原始y的取值不变,hist2d默认就是按y的非累计频次统计计数,刚好匹配需求
  • 如果需要调整分箱精度、配色等样式,直接修改hist2d的bins、cmap等参数即可,和普通2D直方图的参数完全通用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 11:42:01