You need to enable JavaScript to run this app. 基于双字典使用Plotly(优先Plotly Express)绘制多系列折线图的方法
优惠活动
大模型
产品
解决方案
定价
更多

基于双字典使用Plotly(优先Plotly Express)绘制多系列折线图的方法

多系列折线图实现方案

最优DataFrame结构设计

适配后续新增系列的需求,长格式(Tidy Data)DataFrame是Plotly Express的最优输入结构,完全兼容不同系列x轴值不对齐、长度不一致的场景(比如你示例中a系列x为[1,2,3],b系列x为[3,4,5]的情况)。
该结构仅需3列,后续新增任意数量折线都无需修改绘图代码:

  • series:存储折线的唯一标识(即原字典的key,如a/b)
  • x:存储对应系列的x轴数值(即days字典的列表元素)
  • y:存储对应系列的y轴数值(即vals字典的列表元素)

你示例数据转换后的长表结构如下:

seriesxy
a110
a220
a330
b39
b416
b525

现有字典转长格式DataFrame的代码

通用兼容写法(所有pandas版本支持)

import pandas as pd

rows = []
# 遍历所有系列(前提:days和vals的key完全一一对应)
for series_name in days.keys():
    for x_val, y_val in zip(days[series_name], vals[series_name]):
        rows.append({
            "series": series_name,
            "x": x_val,
            "y": y_val
        })
df = pd.DataFrame(rows)

简洁写法(pandas 1.3+支持)

import pandas as pd

# 先构造以系列为行的中间表,再拆分为每行一个数据点的长表
df = pd.DataFrame({
    "series": list(days.keys()),
    "x": list(days.values()),
    "y": list(vals.values())
}).explode(["x", "y"])
# 转换回数值类型(explode后默认会转为object类型)
df[["x", "y"]] = df[["x", "y"]].astype(float)

Plotly Express 绘图代码

直接传入长表即可自动识别多系列,无需手动逐条绘制:

import plotly.express as px

fig = px.line(
    df,
    x="x", # 指定x轴取值的列
    y="y", # 指定y轴取值的列
    color="series", # 按series列自动区分不同折线,自动生成图例、匹配颜色
    title="多系列数值对应折线图"
)
fig.show()

扩展说明

后续新增折线系列时,仅需在days和vals字典中新增对应key和数值列表,重新运行上述DataFrame转换代码,绘图代码完全不需要修改,即可自动生成新增折线的展示。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 22:06:04