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

matplotlib子图创建异常:生成独立图表而非同画布子图求助

问题排查与解决方案

嘿,我来帮你搞定这个子图的问题~你之所以生成了两个独立图表,是因为代码里犯了一个常见的小错误:你直接把q1.plot()的结果赋值给了axes1[count],但**pandas的plot()方法在不指定绘图目标轴的时候,会自动创建新的画布和轴对象**,这就导致每次循环都生成了新的独立图表,而不是在plt.subplots创建的统一画布子图里绘制。

核心问题拆解

plt.subplots(nrows=2, ncols=1)返回的axes1是一个包含2个子图轴的数组,它的作用是给你提供已经创建好的绘图区域,你需要在这些已有的轴上绘图,而不是用新生成的轴覆盖它。

修正后的代码示例

我给你两种可行的修正方式,选哪种都可以:

方式1:给pandas的plot方法指定ax参数

这是最贴合你原有代码逻辑的方式,直接告诉pandas要把图绘到哪个子图轴上:

import matplotlib.pyplot as plt
import pandas as pd

# 假设b是你的数据集合,这里模拟示例数据
b = [pd.DataFrame({'data': [1,3,5,7]}), pd.DataFrame({'data': [2,4,6,8]})]

count = 0
fig1, axes1 = plt.subplots(nrows=2, ncols=1, figsize=(10, 10))  # 把高度从80调整成合理值,避免子图过长
for x in b:
    # 关键:通过ax参数指定当前子图轴
    x.plot(ax=axes1[count])
    count += 1

plt.tight_layout()  # 自动调整子图间距,避免标签重叠
plt.show()

方式2:直接使用子图轴的plot方法

如果你更习惯用matplotlib原生的绘图方式,可以直接调用轴对象的plot方法:

import matplotlib.pyplot as plt
import pandas as pd

b = [pd.DataFrame({'x': [1,2,3], 'y': [4,5,6]}), pd.DataFrame({'x': [1,2,3], 'y': [6,5,4]})]

count = 0
fig1, axes1 = plt.subplots(nrows=2, ncols=1, figsize=(10, 10))
for x in b:
    # 直接在已有的子图轴上绘制数据
    axes1[count].plot(x['x'], x['y'])
    count += 1

plt.tight_layout()
plt.show()

额外小提示

你原来设置的figsize=(10,80)高度太大了,会导致子图被拉得异常长,建议调整成类似(10,10)这样的合理尺寸,让图表显示更美观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:39:15