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

Plotly:不使用Traces时修改图例名称的实现方法求助

解决Plotly Express折线图图例项名称修改问题

我完全懂你的痛点——想用Plotly Express改图例里的项名称,搜了一堆方法但不用Traces就不管用,而且已经会改图例标题了,就差图例项这块。咱们来一步步调整你的代码解决这个问题。

问题根源

你现在直接把三个列表传给px.line的y参数,Plotly会自动给这些系列分配默认名称(比如y0、y1、y2),所以需要手动指定这些系列的自定义名称。另外提一句,你之前x = dates没用是因为dates包含了前两列(Region和Categoria),得先过滤出真正的日期列才行。

方案1:直接用px.line的labels参数修改

这种方法不用重构数据,直接在现有代码基础上添加labels参数,把自动生成的y0、y1、y2映射成你想要的名称:

import pandas as pd
import plotly.express as px
import numpy as np

def camasRegion():
    df = pd.read_csv('https://raw.githubusercontent.com/MinCiencia/Datos-COVID19/master/output/producto52/Camas_UCI.csv')
    # 过滤出真正的日期列(跳过前两列)
    dates = df.columns[2:]
    habilitadas = []
    ocupadasCovid = []
    ocupadasNoCovid = []
    region = 'Ñuble'
    
    for i in range(len(df)):
        if df.values[i][0] == region:
            if df.values[i][1] == 'Camas UCI habilitadas':
                # 只取日期对应的值,跳过前两列
                habilitadas = df.values[i][2:]
            if df.values[i][1] == 'Camas UCI ocupadas COVID-19':
                ocupadasCovid = df.values[i][2:]
            if df.values[i][1] == 'Camas UCI ocupadas no COVID-19':
                ocupadasNoCovid = df.values[i][2:]
    
    fig = px.line(
        y = [habilitadas, ocupadasCovid, ocupadasNoCovid], 
        x = dates,  # 现在可以直接用日期列了
        title=f'Camas por región: ({region})',
        # 关键:用labels映射图例项名称
        labels={
            'y0': 'Camas UCI habilitadas',
            'y1': 'Camas UCI ocupadas COVID-19',
            'y2': 'Camas UCI ocupadas no COVID-19'
        }
    )
    
    fig.add_annotation(
        x = 1, y = -0.1,
        text = 'Fuente: Datos obtenidos desde el Ministerio de Ciencia.',
        showarrow = False,
        xref='paper', yref='paper',
        xanchor='right', yanchor='auto',
        xshift=0, yshift=-20
    )
    
    fig.update_layout(
        legend_title_text='Estado de cama',
        xaxis_title="Fecha",  # 改成Fecha更准确
        yaxis_title="Cantidad de camas",
    )
    
    fig.show()

camasRegion()

方案2:重构数据为长格式(更推荐)

Plotly Express天生更适合处理长格式数据(每一行是一个观测值),这种方式不仅能自动生成正确的图例名称,代码也更简洁易维护:

import pandas as pd
import plotly.express as px

def camasRegion():
    df = pd.read_csv('https://raw.githubusercontent.com/MinCiencia/Datos-COVID19/master/output/producto52/Camas_UCI.csv')
    region = 'Ñuble'
    
    # 筛选目标区域的数据,然后把宽格式转成长格式
    df_region = df[df['Region'] == region]
    df_long = df_region.melt(
        id_vars=['Region', 'Categoria'],
        var_name='Fecha',
        value_name='Cantidad de camas'
    )
    
    # 直接用px.line,color参数对应Categoria,自动生成图例项
    fig = px.line(
        df_long,
        x='Fecha',
        y='Cantidad de camas',
        color='Categoria',
        title=f'Camas por región: ({region})'
    )
    
    fig.add_annotation(
        x = 1, y = -0.1,
        text = 'Fuente: Datos obtenidos desde el Ministerio de Ciencia.',
        showarrow = False,
        xref='paper', yref='paper',
        xanchor='right', yanchor='auto',
        xshift=0, yshift=-20
    )
    
    fig.update_layout(
        legend_title_text='Estado de cama',
        xaxis_title="Fecha",
        yaxis_title="Cantidad de camas",
    )
    
    fig.show()

camasRegion()

这种方法不需要手动处理列表,color='Categoria'会直接用Categoria列的内容作为图例项名称,完全符合你的需求,而且代码逻辑更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 00:12:33