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
相关产品推荐
相关产品推荐

