如何用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
相关产品推荐
相关产品推荐

