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

Plotly横轴刻度值与数据不匹配问题求助

问题:Plotly水平条形图x轴刻度与实际数据不匹配

我是Plotly的新用户,绘制的图表中x轴(标签/刻度)值与指定的x轴数据不匹配。

我的代码如下:

import pandas as pd
import psycopg2 as odb
import plotly.express as px
from urllib.parse import quote_plus
from sqlalchemy import create_engine

connection = odb.connect(...)

q = """select SOMEATTR, OTHERATTR, SOMETYPE from SOMETABLE...."""

uri = f"postgresql+psycopg2://{quote_plus(user)}:{quote_plus(pw)}@{host}:{port}/{db}"
alchemyEngine = create_engine(uri)

df = pd.read_sql(q, connection)

fig = px.bar(df, x="SOMEATTR", y="OTHERATTR", color="SOMETYPE", orientation='h')
fig.update_xaxes(rangemode="normal")
fig.write_html('first_figure.html', auto_open=True)

我的示例中SOMEATTR值范围为0到7.2808,但图表在条形图末端显示的刻度标签为900。我期望x轴标签/刻度范围为0到7或8,而非0-900。

能否有人帮我让x轴值匹配实际的x数据范围(0、1、2……8等)?是否可以通过添加副轴来实现?


解决方案

问题根源是你搞反了水平条形图的参数逻辑:在Plotly Express的bar函数中,orientation='h'会交换x/y参数对应的轴:

  • 垂直条形图(默认):x轴对应x参数,y轴对应y参数(条形高度的数值)
  • 水平条形图:y轴对应x参数,x轴对应y参数(条形长度的数值)

你的代码把SOMEATTR设为x参数,加上orientation='h'后,x轴实际显示的是y参数OTHERATTR的数值范围(0-900),而非你期望的SOMEATTR。

方案1:修正参数对应关系(保留水平条形图)

如果需要水平条形图,且希望x轴显示SOMEATTR的范围(条形长度对应SOMEATTR),只需互换x/y参数:

fig = px.bar(df, x="OTHERATTR", y="SOMEATTR", color="SOMETYPE", orientation='h')
fig.update_xaxes(rangemode="normal", range=[0, 8]) # 可选:手动锁定x轴到0-8的范围

方案2:改用垂直条形图

如果不需要水平条形图,直接去掉orientation='h'参数,默认的垂直条形图会让x轴对应SOMEATTR的数值:

fig = px.bar(df, x="SOMEATTR", y="OTHERATTR", color="SOMETYPE")
fig.update_xaxes(rangemode="normal", range=[0, 8]) # 可选:手动设置x轴范围

方案3:强制锁定x轴范围(治标方案)

如果不想修改参数逻辑,也可以直接强制设置x轴的显示范围:

fig = px.bar(df, x="SOMEATTR", y="OTHERATTR", color="SOMETYPE", orientation='h')
fig.update_xaxes(rangemode="normal", range=[0, 8]) # 强制x轴显示0到8

但这个方法没解决根源问题,优先推荐前两个方案。

关于副轴

完全不需要添加副轴,这只是参数对应关系的问题,副轴会让图表复杂化,毫无必要。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:25:38