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

如何在Plotly Python中设置多索引X轴的范围?

Plotly双索引X轴范围设置问题解决方法

问题原因

你用fig.update_xaxes(range=[[10,2],[12,1]])无效的核心原因是:当你通过x=[df['x1'], df['x2']]创建图表时,Plotly会将每个(x1,x2)组合视为分类轴的单个类别,而非二维数值轴。此时range参数不接受二维列表格式,只能对应分类项的索引范围或分类值列表。

解决方案

方法1:先筛选数据再绘图(推荐)

直接过滤出你需要的[10,2]到[12,1]对应的数据行,再生成图表,轴会自动适配筛选后的数据范围:

import plotly.graph_objs as go
import pandas as pd

df = pd.DataFrame({'x1': [10,10,11,11,12,12], 'x2': [1,2,1,2,1,2], 'y': [1, 2, 3, 4, 5, 6]})

# 筛选目标范围的数据:x1=10且x2=2、x1=11全量、x1=12且x2=1
filtered_df = df[
    ((df['x1'] == 10) & (df['x2'] == 2)) |
    (df['x1'] == 11) |
    ((df['x1'] == 12) & (df['x2'] == 1))
]

fig = go.Figure()
fig.add_trace(go.Scatter(x=[filtered_df['x1'], filtered_df['x2']], y=filtered_df['y']))
fig.show()

方法2:通过分类索引设置轴范围

如果需要保留所有数据但仅显示指定轴区间,可以先获取所有复合分类的列表,找到目标区间对应的索引后设置range:

import plotly.graph_objs as go
import pandas as pd

df = pd.DataFrame({'x1': [10,10,11,11,12,12], 'x2': [1,2,1,2,1,2], 'y': [1, 2, 3, 4, 5, 6]})

fig = go.Figure()
fig.add_trace(go.Scatter(x=[df['x1'], df['x2']], y=df['y']))

# 获取去重后的(x1,x2)复合分类列表,保持原始顺序
categories = list(zip(df['x1'], df['x2']))
unique_categories = []
for cat in categories:
    if cat not in unique_categories:
        unique_categories.append(cat)

# 定位目标分类的索引
start_idx = unique_categories.index((10,2))
end_idx = unique_categories.index((12,1))

# 设置轴范围为索引区间
fig.update_xaxes(range=[start_idx, end_idx])
fig.show()

补充说明

Plotly目前不支持直接通过二维数值范围定义这种复合分类轴的显示区间,必须通过分类值筛选或者索引范围实现。如果需要更灵活的多轴控制,可考虑将x1和x2分别设置为主X轴和次X轴,但范围设置逻辑会有所不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:05:25