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

Python绘制带两种线型的DataFrame多折线图:求更高效实现方法

更高效的多折线图实现方案(按X_Y字段区分样式)

原代码的核心问题在于循环内重复执行切片、列删除和转置操作,当数据量较大时会产生不必要的性能损耗。下面提供两种更高效的实现方式:

方法一:先重塑数据结构,批量绘图

先把数据整理成适合直接绘图的格式,避免循环内重复处理数据:

import pandas as pd
import matplotlib.pyplot as plt

# 假设df已存在,这里用示例数据
df = pd.DataFrame(
    {
        "Point": ("1", "1", "2", "2", "3", "3", "4", "4", "5", "5"),
        "X_Y": ("X", "Y", "X", "Y", "X", "Y", "X", "Y", "X", "Y"),
        0: (70, 67, 66.7, 68.8, 66.2, 69.5, 68.5, 67.7, 68.8, 67.72),
        1: (69, 68.2, 66.5, 68.1, 66.7, 70, 68.1, 66.7, 66.08, 65.72),
        2: (71, 68, 67.75, 67.8, 67.72, 70.3, 67.6, 66.5, 69.08, 66.72),
        3: (70.5, 67.3, 67.5, 64.8, 68.3, 69.3, 68.6, 68.5, 70.08, 67.72),
    }
)

# 一次性完成索引设置与转置,避免循环内重复操作
df_transposed = df.set_index(["Point", "X_Y"]).T

plt.figure()
plt.grid(True)
# 按X_Y分组后直接绘图,指定对应样式
for xy, group in df_transposed.groupby("X_Y", axis=1):
    linestyle = "--" if xy == "Y" else "-"
    plt.plot(group, linestyle=linestyle)

plt.show()

这个方法只做一次转置和分组操作,避免了循环内重复的切片、列删除步骤,数据量越大,性能提升越明显。

方法二:用pandas内置plot方法+样式映射

利用pandas的plot功能结合样式字典,代码更简洁,且pandas内部做了性能优化,执行效率更高:

import pandas as pd
import matplotlib.pyplot as plt

# 假设df已存在
df = pd.DataFrame(
    {
        "Point": ("1", "1", "2", "2", "3", "3", "4", "4", "5", "5"),
        "X_Y": ("X", "Y", "X", "Y", "X", "Y", "X", "Y", "X", "Y"),
        0: (70, 67, 66.7, 68.8, 66.2, 69.5, 68.5, 67.7, 68.8, 67.72),
        1: (69, 68.2, 66.5, 68.1, 66.7, 70, 68.1, 66.7, 66.08, 65.72),
        2: (71, 68, 67.75, 67.8, 67.72, 70.3, 67.6, 66.5, 69.08, 66.72),
        3: (70.5, 67.3, 67.5, 64.8, 68.3, 69.3, 68.6, 68.5, 70.08, 67.72),
    }
)

# 整理绘图数据
df_plot = df.set_index(["Point", "X_Y"]).T

# 定义X_Y对应的样式映射
style_map = {"X": "-", "Y": "--"}

# 批量提取分组数据并绘图
plt.figure()
plt.grid(True)
for xy in style_map:
    df_plot.xs(xy, level="X_Y", axis=1).plot(linestyle=style_map[xy], ax=plt.gca())

plt.show()

这个方法利用pandas的xs方法快速提取指定分组的数据,配合内置plot功能,代码更简洁,执行效率也优于原代码的循环处理方式。

两者的核心优化点都是减少循环内的数据重复处理,只做一次数据结构转换,后续直接基于整理好的数据绘图,在大数据量场景下性能提升显著。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:20:23