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

