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

如何在Plotly中绘制可自定义分箱的双组连续柱状直方图?

在Plotly中复刻自定义分箱的双组直方图

要在Plotly中实现和Matplotlib一致的自定义3分箱双组直方图,核心是手动控制分箱逻辑,避免Plotly自动分箱的差异。以下是具体实现方案:

步骤1:手动计算分箱频数

用numpy.histogram按照指定分箱数计算两组数据的频数,确保和Matplotlib的bins=3逻辑对齐(默认等宽分箱):

import numpy as np
import plotly.graph_objects as go

# 替换为你的真实数据
total_cu = np.random.uniform(0, 100, size=100)
valid_cu = np.random.uniform(0, 100, size=70)

# 定义分箱数,和Matplotlib一致
num_bins = 3
# 生成等宽分箱区间,覆盖两组数据的极值
bins = np.linspace(
    min(min(total_cu), min(valid_cu)),
    max(max(total_cu), max(valid_cu)),
    num_bins + 1
)

# 计算每组数据在各分箱的频数
total_counts, _ = np.histogram(total_cu, bins=bins)
valid_counts, _ = np.histogram(valid_cu, bins=bins)

# 生成可读性强的分箱标签(用于x轴)
bin_labels = [f"[{bins[i]:.1f}, {bins[i+1]:.1f})" for i in range(num_bins)]
bin_labels[-1] = bin_labels[-1].replace(")", "]")  # 最后一个区间改为闭合格式

步骤2:用Plotly Bar绘制分组直方图

通过barmode='group'实现双组条形并排,完全复刻Matplotlib的直方图效果:

fig = go.Figure()

# 添加Total Data组
fig.add_trace(go.Bar(
    x=bin_labels,
    y=total_counts,
    name="Total Data",
    marker_color="#1f77b4"
))

# 添加Valid Data组
fig.add_trace(go.Bar(
    x=bin_labels,
    y=valid_counts,
    name="Valid Data",
    marker_color="#2ca02c"
))

# 配置布局
fig.update_layout(
    barmode="group",
    title="CU值分布(自定义3分箱)",
    xaxis_title="CU值区间",
    yaxis_title="频数",
    legend_title="数据分组",
    bargap=0.15  # 调整组内条形间距
)

fig.show()

关键说明

  • 手动分箱彻底避免了Plotly自动分箱算法(如Sturges'规则)与Matplotlib的差异,确保数值完全一致。
  • 若需要非等宽分箱,直接修改bins数组即可(例如bins=[0, 25, 75, 100]),灵活性拉满。
  • 此前用Plotly Histogram出现数值错误,本质是其默认分箱逻辑和Matplotlib不同,手动计算是最可靠的解决方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:12:29