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

如何在Plotly express中为DataFrame指定列设置折线虚线?

解决方案

Plotly Express 绘制多系列折线时,默认会自动为不同系列分配差异化样式,你可以通过以下两种可直接运行的方式,实现a、c列设为虚线、b、d列保持实线的需求:


方法1:绘图后直接修改对应轨迹属性(最简便)

先正常调用px.line()生成基础折线图,再遍历图中所有折线轨迹,匹配系列名后单独修改线型参数即可,不需要调整原始数据结构:

import pandas as pd
import plotly.express as px

# 构造示例DataFrame
a = [19.1, 18.4, 19.2, 18.2, 17.4]
b = [62.28, 57.07, 55.61,54.09,54.6]
c = [18.68,17.79,17.03,18.62,18.62]
d = [73.03,71.63,70.22,71.77,71.77]
df = pd.DataFrame({'a':a, 'b':b, 'c':c, 'd':d})

# 绘制基础折线图
fig = px.line(df, y=['a','b','c','d'])

# 单独指定a、c列为虚线
for trace in fig.data:
    if trace.name in ('a', 'c'):
        trace.line.dash = 'dash'
    # b、d列默认即为实线,无需额外配置

fig.show()

line.dash支持的常用样式值:

  • solid:实线(默认)
  • dash:短划线(即需求中的虚线)
  • dot:点线
  • dashdot:点划线

方法2:通过样式列映射线型(更规范)

如果你希望样式逻辑和数据绑定、图例自动展示线型差异,可以先将宽表转为长表,新增一列标记每个系列对应的线型,再通过line_dash参数完成映射:

# 转为长表结构
df_long = df.melt(var_name='列名', value_name='数值')
# 为每个系列匹配线型
df_long['线型'] = df_long['列名'].map({
    'a':'虚线',
    'c':'虚线',
    'b':'实线',
    'd':'实线'
})

fig = px.line(
    df_long,
    y='数值',
    color='列名',
    line_dash='线型',
    # 明确指定映射规则,避免Plotly自动分配样式
    line_dash_map={'虚线':'dash', '实线':'solid'}
)

fig.show()

两种方式最终渲染效果完全一致,列数少、样式规则简单时优先选方法1,需要批量管理多系列样式时选方法2即可。


内容的提问来源于stack exchange,提问作者Soumya Ranjan Sahoo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:45:33