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

如何用Plotly绘制Delta/Difference Histogram(差值直方图)

生成差值直方图(Delta/Difference Histogram)

原代码可生成Data A与Data B的重叠直方图,要创建差值直方图,需先对两个数据集使用完全相同的分箱规则计算计数,再统计每个分箱的计数差值,最后用柱状图展示结果。

实现步骤

  • 用numpy.histogram统一分箱,确保两个数据集的分箱边界完全一致
  • 计算每个分箱中Data A与Data B的计数差值(可根据需求调整差值方向)
  • 使用Plotly的柱状图绘制差值,通过颜色区分正负差值,提升可读性

完整代码

import pandas as pd
import plotly.graph_objects as go
import numpy as np

# 示例数据
data = {
    "data-a": [10, 15, 10, 20, 25, 30, 15, 10, 20, 25],
    "data-b": [12, 18, 14, 22, 28, 35, 17, 13, 21, 27]
}
df = pd.DataFrame(data)

# 统一分箱:计算两个数据集的合并范围,生成等宽分箱边界
all_data = np.concatenate([df["data-a"], df["data-b"]])
bins = np.histogram_bin_edges(all_data, bins='auto')  # 自动确定分箱数,也可手动指定bins=数值

# 计算每个数据集在统一分箱下的计数
count_a, _ = np.histogram(df["data-a"], bins=bins)
count_b, _ = np.histogram(df["data-b"], bins=bins)

# 计算差值:Data A 计数 - Data B 计数
delta_counts = count_a - count_b

# 计算分箱中心,用于X轴显示(可选,也可用分箱边界)
bin_centers = (bins[:-1] + bins[1:]) / 2

# 创建差值直方图
fig = go.Figure()
fig.add_trace(go.Bar(
    x=bin_centers,
    y=delta_counts,
    name="Data A - Data B",
    # 根据差值正负设置不同颜色
    marker_color=['#1f77b4' if val >=0 else '#ff7f0e' for val in delta_counts]
))

# 更新布局
fig.update_layout(
    font_size=15,
    title="差值直方图(Data A - Data B)",
    xaxis_title="数值区间",
    yaxis_title="计数差值"
)

# 添加水平参考线(y=0),更清晰区分正负
fig.add_hline(y=0, line_width=2, line_dash="dash", line_color="gray")

fig.show()

代码说明

  • np.histogram_bin_edges基于合并后的数据集生成分箱边界,保证两个数据集的分箱完全匹配
  • 差值方向可按需调整(比如改为count_b - count_a)
  • 通过marker_color设置正负差值的不同颜色,配合y=0的参考线,能直观对比两个数据集在各区间的计数差异

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 15:53:12