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

如何设置Plotly折线图:同Run同色,Val_A实线Val_B虚线

问题与解决方案

需求说明

现有如下DataFrame,需修改代码实现:

  • 每个Run对应专属折线颜色
  • Val_A列数据使用实线,Val_B列数据使用虚线
  • 最终生成包含12条折线(6个Run × 2个Val指标)、6种颜色、2种线型的图表

原始代码:

import pandas as pd
import plotly.express as px


df = pd.DataFrame(
    {
        "Run": (
            1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6
        ),
        "Point": (
            1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3,
        ),
        "Val_A": (
            78, 79, 77, 78, 79, 77, 78, 79, 77, 78, 79, 77, 78, 79, 77, 78, 79, 77,
        ),
        "Val_B": (
            76, 75, 74, 76, 75, 74, 76, 75, 74, 76, 75, 74, 76, 75, 74, 76, 75, 74,
        ),
    }
)

# Create the line plot with solid line for Val_A and dashed line for Val_B
fig = px.line(df, x="Point", y=["Val_A", "Val_B"], color="Run",
              title="Line Plot with Solid and Dashed Lines for Each Run")

# Show the plot
fig.show()

修改方案

Plotly Express直接传入y=["Val_A", "Val_B"]的方式无法同时绑定color="Run"和独立控制线型,需要先将宽表转换为长表,再通过line_dash参数指定线型规则。

修改后的完整代码

import pandas as pd
import plotly.express as px

df = pd.DataFrame(
    {
        "Run": (1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6),
        "Point": (1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3),
        "Val_A": (78, 79, 77, 78, 79, 77, 78, 79, 77, 78, 79, 77, 78, 79, 77, 78, 79, 77),
        "Val_B": (76, 75, 74, 76, 75, 74, 76, 75, 74, 76, 75, 74, 76, 75, 74, 76, 75, 74),
    }
)

# 宽表转长表:将Val_A、Val_B合并为Variable列,对应数值存入Value列
df_long = pd.melt(
    df,
    id_vars=["Run", "Point"],
    value_vars=["Val_A", "Val_B"],
    var_name="Variable",
    value_name="Value"
)

# 创建折线图:color绑定Run(同Run同色),line_dash绑定Variable(Val_A实线、Val_B虚线)
fig = px.line(
    df_long,
    x="Point",
    y="Value",
    color="Run",
    line_dash="Variable",
    title="每个Run对应专属颜色,Val_A实线/Val_B虚线",
    # 手动指定线型映射,确保Val_A是实线,Val_B是虚线
    line_dash_map={"Val_A": "solid", "Val_B": "dash"}
)

# 调整图例名称,提升可读性
fig.update_layout(
    legend_title_text="Run & 指标"
)

fig.show()

关键修改点说明

  1. 宽表转长表:用pd.melt将原数据的Val_A、Val_B列转换为Variable分类列,让每个Run+Variable组合对应一条独立折线,满足12条折线的需求。
  2. 绑定线型参数:新增line_dash="Variable",让不同指标(Val_A/Val_B)使用不同线型;通过line_dash_map手动指定线型,确保Val_A为实线、Val_B为虚线。
  3. 颜色绑定:保留color="Run",确保同一个Run的Val_A和Val_B折线使用相同颜色,实现6种颜色的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:10:16