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

Plotly绘制条形图Y轴数值乱序显示异常如何修复

问题根源

你遇到的Y轴价格排序混乱问题,由两个核心错误导致:

  • 两个数据集的BARCODE字段格式不统一,筛选逻辑存在隐式错误:仅对df_bar的条码做了字符串截断处理,df_markets中的条码仍为数值类型,isin()匹配时会出现类型转换偏差,筛出的数据集混入无关数据;同时原有str(x)[:-2]的条码处理写法存在浮点数精度问题,容易生成错误的条码值。
  • 价格列数据类型异常:从你贴的df_markets_rm样例可以看到部分行存在列值错位粘连的问题,导致AB价格列混入非数值内容,Plotly会自动将Y轴识别为分类轴而非连续数值轴,数值就会按出现顺序排布而非按大小排序,最终出现混乱效果。
修复代码

按以下步骤调整代码即可正常展示价格波动:

import plotly.express as px
import pandas as pd

# --------------------------
# 第一步:统一两个表的BARCODE格式,从根源解决匹配错误
# --------------------------
# 处理df_bar:浮点数条码先转整数(规避科学计数法、.0后缀问题),再转为13位标准字符串
df_bar['BARCODE'] = df_bar['BARCODE'].apply(lambda x: str(int(x)).zfill(13))
# 处理df_markets:数值型条码统一转为和df_bar一致的13位字符串
df_markets['BARCODE'] = df_markets['BARCODE'].astype(str).str.zfill(13)

# --------------------------
# 第二步:筛选目标数据+清洗价格列
# --------------------------
# 提取category_id=61对应的目标条码集合
target_barcodes = df_bar.loc[df_bar['category_id'] == 61.0, 'BARCODE'].unique()
# 筛选出超市数据中对应条码的记录
df_markets_rm = df_markets[df_markets['BARCODE'].isin(target_barcodes)].copy()

# 强制将所有价格列转为数值类型,无法解析的脏数据转为空值,保证Y轴被识别为连续轴
price_columns = ['AB', 'BFRESH', 'LIDL', 'SUPERM']
for col in price_columns:
    df_markets_rm[col] = pd.to_numeric(df_markets_rm[col], errors='coerce')

# 将日期索引转为普通列,避免Plotly解析索引时出现异常
df_markets_rm = df_markets_rm.reset_index()

# 如果你发现列错位问题仍然存在,说明最开始读取df_markets时分隔符识别错误
# 重新读取文件时指定分隔符即可,比如多空格分隔的文件用以下写法读取:
# df_markets = pd.read_csv('markets_data.csv', sep='\s+', parse_dates=['Date'], index_col='Date')

# --------------------------
# 第三步:调整绘图参数
# --------------------------
fig = px.bar(
    df_markets_rm,
    x='Date',
    y='AB',
    hover_data=['BARCODE', 'AB'],
    color='BARCODE',
    labels={'AB': 'AB超市商品售价'},
    height=800,
    width=1000,
    facet_row='BARCODE',
    facet_row_spacing=0.05 # 调整分面间距,避免条码标签重叠
)
# 可选:放开分面Y轴的统一范围限制,每个商品单独适配价格区间,波动展示更清晰
fig.update_yaxes(matches=None, showticklabels=True)
fig.show()

内容的提问来源于stack exchange,提问作者Zoi K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:18:15