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

Plotly 5.3.1如何实现双Y轴关联计数直方图与KDE曲线

Plotly双Y轴实现KDE密度轴+直方图计数轴方案

ff.create_distplot 默认生成的直方图是归一化到概率密度的,和KDE曲线共用同一个Y轴,要实现双Y轴绑定不同数据的需求,按照以下步骤修改即可:

  • 先生成初始distplot对象,保留KDE曲线的概率密度数值
  • 给图表新增右侧Y轴,作为计数频率轴
  • 重新计算直方图的原始计数值,替换原有归一化后的直方图Y值,将直方图轨迹绑定到右侧Y轴,KDE曲线保持绑定左侧原Y轴

完整修改代码

import dash_core_components as dcc
import plotly.figure_factory as ff
import plotly.graph_objects as go
import numpy as np

# 替换为你自己的数据源
data = filtered_df['count_region_biosynthetic_protein_homologs'].tolist()

# 1. 生成初始distplot
fig = ff.create_distplot(
    [data], 
    group_labels=['count_region_biosynthetic_protein_homologs'],
    show_rug=True  # 不需要毛毯图可设置为False
)

# 2. 配置双Y轴布局
fig.update_layout(
    yaxis=dict(
        title="概率密度",  # 左侧Y轴绑定KDE曲线
        side="left"
    ),
    yaxis2=dict(
        title="计数频率",  # 右侧Y轴绑定直方图
        side="right",
        overlaying="y",
        showgrid=False # 避免双Y轴网格重叠
    ),
    legend=dict(x=1.1) # 调整图例位置避免遮挡
)

# 3. 更新直方图数据为原始计数,绑定到右侧Y轴
bin_edges = fig.data[0].x
# 计算原始计数
counts, _ = np.histogram(data, bins=bin_edges)
# 替换原有归一化的Y值
fig.data[0].y = counts
fig.data[0].yaxis = 'y2'

# 4. 传入Dash组件
dcc.Graph(
    id = 'rug_plot_count_region_biosynthetic_protein_homologs',
    figure = fig
)

注意:如果distplot生成的轨迹顺序有变动,可通过print(fig.data)查看每个trace的type属性确认:histogram类型对应直方图,scatter类型对应KDE曲线,调整对应索引即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:54:04