Python使用seaborn绘制多张lmplot图分别保存时出现报错如何解决
问题成因
matplotlib.pyplot模块仅提供标准的savefig()方法,不存在你自定义的savefig_1、savefig_2这类方法,这是触发属性报错的直接原因。- seaborn的
lmplot()会返回独立的FacetGrid对象,调用plt.savefig()默认只会保存最后创建的、处于激活状态的画布,所以你原代码里只有最后生成的4阶拟合图(fig_2)能够保存。
解决方法
直接调用每个FacetGrid对象自带的savefig()方法,分别保存两幅图像即可,修正后的代码如下:
import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt T = np.array([10.03,100.348,1023.385]) power = np.array([44000,63000,89000]) df= pd.DataFrame(data = {'Size': T, 'Time': power}) # 生成两张图 fig_1= sns.lmplot(x='Size', y='Time', data=df, ci=None, lowess=True, truncate=False) fig_2= sns.lmplot(x='Size', y='Time', data=df, ci=None, order=4, truncate=False) # 分别调用各自的savefig方法保存 fig_1.savefig('exp1.png') fig_2.savefig('exp2.png') plt.show()
如果要使用pyplot的全局方法保存,也可以在每次保存前手动切换到对应画布:
# 切换到fig_1的画布再保存 plt.figure(fig_1.fig.number) plt.savefig('exp1.png') # 切换到fig_2的画布再保存 plt.figure(fig_2.fig.number) plt.savefig('exp2.png')
内容的提问来源于stack exchange,提问作者Vaibhav Tyagi
相关产品推荐
相关产品推荐

