Plotly Express折线图如何修改图例与悬浮提示的默认variable文本
Plotly Express多折线图默认
variable文本替换方法 问题背景
使用Plotly Express绘制多折线图时,如果直接传入宽表数据、给y参数传入多个列名,Plotly会在内部自动完成数据长宽转换,将分类维度默认命名为variable,该名称会同时显示在两个位置:
- 图例的标题
- 数据点的悬浮提示文本
需要将该通用名称替换为具备实际语义的名称,示例场景要求替换为class。
最优实现方案
在调用px.line()时传入labels参数做字段名映射,一次配置即可同时覆盖上述两个位置,无需单独调整图例或悬浮提示模板。
代码示例
存在默认variable问题的原始写法:
import plotly.express as px import pandas as pd # 示例宽表数据:x_axis为x轴维度,两列分别对应不同类别的统计值 df = pd.DataFrame({ "x_axis": [1, 2, 3, 4], "category_1": [2, 4, 1, 5], "category_2": [3, 1, 4, 2] }) # 原始写法:会生成默认的variable图例和提示文本 fig = px.line(df, x="x_axis", y=["category_1", "category_2"]) fig.show()
添加labels参数完成替换的修改后写法:
fig = px.line( df, x="x_axis", y=["category_1", "category_2"], # key为默认字段名,value为替换后的实际语义名称 labels={ "variable": "class", "value": "统计值" # 对应y轴数值的显示名称,可按需修改 } ) fig.show()
修改效果
- 图例标题从默认的
variable替换为class - 悬浮提示中原
variable: category_1格式的文本同步替换为class: category_1
备选方案:提前转换长表
如果习惯提前将宽表处理为长表格式再绘图,可在调用pandas.melt()转换时直接指定分类列名为目标名称,Plotly会自动读取列名生成图例和提示,不会出现默认variable文本:
# 宽表转长表时直接指定分类列名 df_long = df.melt( id_vars="x_axis", var_name="class", # 分类列直接命名为目标名称class value_name="统计值" ) # 传入长表绘图,通过color参数指定分类列 fig = px.line(df_long, x="x_axis", y="统计值", color="class") fig.show()
内容的提问来源于stack exchange,提问作者matanox
相关产品推荐
相关产品推荐

