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

Plotly Express中如何不改变图表形状按SITE_NUM升序重排图例

解决Plotly图例按指定顺序排列且不改变图表形状的问题

可以直接在绘图后调整图例顺序,不用重新排序数据破坏图表形状。核心逻辑是:Plotly的图例顺序由图中traces的顺序决定,我们只需要重新排列traces的顺序,就能改变图例展示顺序,同时不影响图表的原有形状(因为数据已经按VALUE排好序,每个trace的数据源没变化)。

修改后的完整代码

import pandas as pd
import plotly.express as px

# 原有数据处理逻辑
temp_dataframe = pd.DataFrame()
temp_dataframe['VALUE'] = relevant_dataframe.RESULT.tolist()
temp_dataframe['SITE_NUM'] = relevant_dataframe.SITE_NUM.tolist()
temp_dataframe.sort_values('VALUE', inplace = True)

temp_dataframe['IDX'] = list(range(len(temp_dataframe)))

# 生成初始图表(保持原有形状)
fig=px.line(temp_dataframe, x = 'VALUE', y = 'IDX', color='SITE_NUM')
fig.update_layout(
    yaxis = dict(
        tickmode = 'array',
        tickvals = (len(temp_dataframe)-1) * p/100,
        ticktext = p
    )
)

# ------------------- 新增:调整图例顺序的代码 -------------------
# 获取SITE_NUM的唯一值并按升序排序
sorted_sites = sorted(temp_dataframe['SITE_NUM'].unique())

# 根据排序后的站点顺序重新排列traces
sorted_traces = []
for site in sorted_sites:
    # 匹配对应站点的trace(Plotly会把数字类型的SITE_NUM转成字符串作为trace.name)
    for trace in fig.data:
        if trace.name == str(site):
            sorted_traces.append(trace)
            break

# 更新图表的traces顺序
fig.data = sorted_traces

# 确保图例按trace顺序显示(默认就是normal,可省略,明确写出更清晰)
fig.update_layout(legend={'traceorder': 'normal'})
# -------------------------------------------------------------

fig.show()

关键说明

  • 原代码里的len(d)修正为len(temp_dataframe),避免变量未定义报错。
  • 如果你的SITE_NUM本身是字符串类型,把str(site)改成site即可匹配trace.name。
  • 调整traces顺序后,每个trace对应的数据源还是原来按VALUE排序后的数据集,所以图表的线条形状完全不会改变,只有图例的顺序变成了SITE_NUM的升序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 03:17:32