如何在Plotly Express中实现多面直方图的独立分桶
在Plotly Express中绘制不同尺度多列数据的独立分桶直方图
你当前的代码通过melt规整数据并使用facet_col分面展示,同时取消了坐标轴的强制匹配,但Plotly Express的分面直方图默认会采用全局统一的分桶区间,这就导致不同尺度的子图分桶无法适配各自的数据范围——比如你当前输出里,右侧total_bill_times_100的直方图分桶过粗,完全看不清数据分布细节,而左侧total_bill的分桶相对合理。
要实现每个子图的分桶完全独立,需要手动创建子图并分别绘制各变量的直方图,具体代码如下:
import plotly.express as px import plotly.subplots as sp import plotly.graph_objects as go # 准备数据 df = px.data.tips() df['total_bill_times_100'] = df['total_bill'] * 100 cols_to_plot = ['total_bill', 'total_bill_times_100'] # 创建1行多列的子图布局 fig = sp.make_subplots(rows=1, cols=len(cols_to_plot), subplot_titles=cols_to_plot) # 为每个变量单独绘制直方图,确保分桶独立计算 for idx, col in enumerate(cols_to_plot, 1): # 用Plotly Express单独生成当前列的直方图数据,自动计算适配的分桶 single_hist = px.histogram(df, x=col) fig.add_trace(single_hist.data[0], row=1, col=idx) # 统一设置布局样式 fig.update_layout(template='simple_white', showlegend=False) fig.update_xaxes(title_text='数值') fig.update_yaxes(title_text='频数') fig.show()
核心改进点
- 每个子图的分桶是基于单独变量的数据分布自动计算的,完全独立于其他子图
- 保留了分面展示的布局结构,同时解决了不同尺度数据的分桶适配问题
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

