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

如何使用Matplotlib叠加三个双峰直方图并展示实际值而非分箱区间

代码调整方案

核心调整逻辑

因为你的三个向量都只有两个非常接近的离散取值,默认hist的自动分箱规则会把这些相近值合并,无法呈现真实的分布情况,因此改用直接统计实际唯一值+计数的方式绘制柱状图,完全匹配你的需求。

调整后完整代码

import matplotlib.pyplot as plt
import numpy as np

x1 = [0.003996747444034554, 0.003996747444034554, 0.003996747458586469, 0.003996747444034554, 0.003996747444034554, 0.003996747444034554, 0.003996747458586469, 0.003996747444034554, 0.003996747444034554, 0.003996747444034554]
x2 = [0.003996536252088845, 0.003996536252088845, 0.003996536252088845, 0.003996536310296506, 0.003996536252088845, 0.003996536252088845, 0.003996536252088845, 0.003996536252088845, 0.003996536252088845, 0.003996536252088845]
x3 = [0.003996643703430891, 0.003996643703430891, 0.003996643703430891, 0.003996643703430891, 0.003996643703430891, 0.003996643761638552, 0.003996643703430891, 0.003996643703430891, 0.003996643703430891, 0.003996643703430891]

plt.figure(figsize=(10, 5))
# 匹配数值差异量级设置柱宽,避免柱子重叠
bar_width = 1e-11

# 遍历三个向量绘制柱状图
for x, label, color in zip([x1, x2, x3], ['x1', 'x2', 'x3'], ['#1f77b4', '#ff7f0e', '#2ca02c']):
    # 直接统计实际唯一值和对应出现次数
    vals, counts = np.unique(x, return_counts=True)
    plt.bar(vals, counts, width=bar_width, label=label, alpha=0.7, color=color)

# 配置横轴显示完整实际值,关闭科学计数法和偏移
plt.ticklabel_format(axis='x', useOffset=False, style='plain')
plt.xticks(rotation=45)
plt.xlabel('取值')
plt.ylabel('出现次数')
plt.legend()
plt.tight_layout()
plt.show()

效果说明

  • 三个二值分布全部绘制在同一绘图区域,通过颜色和标签区分
  • 横轴完全使用数据的实际取值展示,不会出现分箱合并的问题
  • 透明度设置避免数值接近的柱子完全遮挡,可同时看清三个分布的取值和计数

如果你需要的是分组并列展示而非半透明重叠,只需调整每个向量柱子的横向偏移量即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:36:07