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

Plotly多面柱状图:仅显示各子图数据中存在的X轴刻度

解决Plotly分面柱状图X轴仅显示有效刻度的问题

当前代码的问题在于Plotly分面图默认开启共享X轴(sharex=True),即便你过滤掉了count=0的数据,所有子图还是会沿用原始数据集的全部X轴刻度。要让每个子图只显示自身存在的有效刻度,需要关闭轴共享并为每个子图单独配置X轴:

修改后的完整代码

import pandas as pd
import plotly.express as px

df = pd.DataFrame({
    'row': [0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1],
    'col': [0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1 ],
    'x_value': [1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4], 
    'count':  [1,7,4,0,0,3,1,3,1,9,2,2,0,0,3,4]
})

df = df.query('count != 0 ')

# 关键改动1:关闭X轴共享
fig = px.bar(df, x='x_value', y='count', facet_col='col', facet_row='row', 
             template='simple_white', sharex=False)

# 关键改动2:为每个子图单独设置X轴刻度
for i, trace in enumerate(fig.data):
    # 获取当前子图对应的x_value集合(去重并排序)
    sub_df = df[(df['row'] == trace.facet_row) & (df['col'] == trace.facet_col)]
    valid_x = sorted(sub_df['x_value'].unique())
    
    # 找到对应子图的X轴对象并更新
    xaxis = fig.layout[f'xaxis{i+1}']
    xaxis.update(
        showticklabels=True,
        title_font=dict(size=20),
        type='category',
        tickvals=valid_x,
        ticktext=valid_x,
        categoryorder='array',  # 按valid_x的顺序显示刻度
        categoryarray=valid_x
    )

fig.show()

核心改动说明

  1. 关闭轴共享:在px.bar中添加sharex=False,让每个子图拥有独立的X轴配置权。
  2. 子图单独配置:遍历每个子图对应的trace,筛选出该子图下的有效x_value,然后更新对应X轴的tickvals和ticktext,同时指定categoryorder确保刻度按数据存在的顺序显示。

这样每个子图就只会显示自身数据中实际存在的X轴刻度,彻底移除无效的空刻度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 11:35:20