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

如何将pandas DataFrame的每一行绘制成意面图样式的独立折线

问题原因

你去掉.mean()后报错是因为plt.plot()要求输入的x、y参数维度匹配:你传入的x是长度为6的频率列表,未取均值的fft_df是3行6列的二维结构,维度不匹配触发报错。

实现方案

方法1:逐行遍历绘制(逻辑清晰,可自定义单条线样式)

直接遍历DataFrame的每一行,为每个参与者单独绘制折线,可调低透明度避免多线重叠看不清:

import pandas as pd
import matplotlib.pyplot as plt

# 示例数据构造
data = [['1', 9.45e-09, 9.85e-09, 8.33e-09, 6.06e-09, 4.80e-09, 4.08e-09],
        ['2', 1.30e-08, 1.25e-08, 8.99e-09, 6.25e-09, 4.44e-09, 3.45e-09],
        ['3', 9.32e-09, 8.60e-09, 5.67e-09, 3.68e-09, 2.53e-09, 1.75e-09]]
fft_df = pd.DataFrame(data, columns = ['id', '1','2','3','4','5','6']).set_index('id')

# 把列名转为数值型,避免x轴显示顺序异常
x = fft_df.columns.astype(int)

plt.figure(figsize=(10, 10))
# 逐行绘制每条折线
for user_id, row in fft_df.iterrows():
    plt.plot(x, row, alpha=0.7, label=f'参与者{user_id}')

# 可选:额外绘制均值线,用粗红线突出显示
plt.plot(x, fft_df.mean(), color='red', linewidth=3, label='群体均值')

plt.ylabel('Absolute Power (log)',fontsize=12)
plt.xlabel('Frequencies',fontsize=12)
plt.legend()
plt.show()

方法2:转置DataFrame直接绘制(代码更简洁)

将DataFrame转置后,每一列对应一个参与者的全频率数据,plt.plot会自动为每一列生成独立折线:

plt.figure(figsize=(10, 10))
plt.plot(x, fft_df.T, alpha=0.7)
plt.ylabel('Absolute Power (log)',fontsize=12)
plt.xlabel('Frequencies',fontsize=12)
# 可选添加图例
# plt.legend(fft_df.index.map(lambda x: f'参与者{x}'))
plt.show()

两种方法都可以实现你需要的意面图效果,参与者数量多的时候建议调低alpha参数的数值,避免折线重叠导致辨识度下降。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:09:02