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

Matplotlib循环绘制多折线图报错及自定义绘图需求解决

解决plt.subplots(111)导致的AttributeError及批量DataFrame误差可视化方案

错误原因解析

你写的fig, ax = plt.subplots(111)是错误的调用方式:

  • matplotlib的subplots()方法中,若传入单个整数参数,会被解析为nrows=该整数, ncols=1,所以111会创建111行1列的子图网格,返回的ax是一个numpy数组(包含111个轴对象),而非单个轴对象。
  • 后续你尝试调用ax.yaxis这类单个轴的方法时,自然会触发AttributeError: 'numpy.ndarray' object has no attribute 'yaxis'。

修正方案+完整实现代码

下面是针对你的需求的完整可运行代码,包含正确的子图创建、批量线性回归、百分比误差计算与可视化:

1. 导入依赖库

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

2. 准备你的DataFrames集合(替换成你实际的200个DataFrame列表)

这里用随机数据生成模拟示例:

# 生成10个结构一致的DataFrame(特征x,目标y)
df_list = []
for i in range(10):
    df = pd.DataFrame({
        'x': range(1, 21),
        'y': [3*num + 2 + pd.np.random.randn()*5 for num in range(1,21)]
    })
    df_list.append(df)

3. 正确创建子图+批量处理与绘图

# 正确创建单个子图,自定义尺寸(宽12,高8)
fig, ax = plt.subplots(figsize=(12, 8))

# 循环处理每个DataFrame
for idx, df in enumerate(df_list):
    # 提取特征和目标变量
    X = df[['x']]
    y_true = df['y']
    
    # 拟合线性回归模型
    model = LinearRegression()
    model.fit(X, y_true)
    
    # 预测并计算百分比误差
    y_pred = model.predict(X)
    percent_error = ((y_true - y_pred) / y_true) * 100
    
    # 绘制百分比误差折线,添加标签方便区分
    ax.plot(df['x'], percent_error, label=f'DataFrame {idx+1}', alpha=0.6)

# 自定义图表样式
ax.set_title('所有DataFrame的百分比误差折线图', fontsize=14, pad=20)
ax.set_xlabel('X轴变量', fontsize=12)
ax.set_ylabel('百分比误差 (%)', fontsize=12)
# 旋转X轴刻度45度,避免重叠
ax.tick_params(axis='x', rotation=45)
# 200个图例会拥挤,可注释掉或调整位置
# ax.legend(bbox_to_anchor=(1.05, 1), loc='upper left')

# 调整布局,防止标签被截断
plt.tight_layout()

# 显示或保存图表
plt.show()
# plt.savefig('percent_error_plot.png', dpi=300, bbox_inches='tight')

关键细节说明

  • 子图创建:plt.subplots(figsize=(12,8))默认创建1行1列的单个子图,返回的ax是单个轴对象,可正常调用所有轴方法。
  • 百分比误差计算:公式((真实值-预测值)/真实值)*100是常用的相对误差计算方式,你可根据需求调整(比如用绝对值、或基于预测值计算)。
  • 200条折线优化:如果200条折线重叠严重,可添加alpha=0.6设置半透明,或只绘制误差统计线(比如均值、中位数),避免图表混乱。
  • 刻度旋转:ax.tick_params(axis='x', rotation=45)实现X轴刻度旋转,tight_layout()确保标签不被截断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:10:56