使用Seaborn生成两张图表时第二张图覆盖第一张的问题如何解决?
问题原因
你遇到的图片覆盖问题核心是Matplotlib的全局画布机制:默认情况下所有绘图操作都会在当前激活的画布上执行,第一张图绘制保存后没有释放画布,第二张图的内容会直接叠加到原有画布上,导致输出结果异常。
修复方案
你可以选择以下任意一种方法解决:
方法1:绘制保存后关闭当前画布
每次保存完一张图后调用plt.close()释放画布资源,后续绘图会自动创建新的空白画布。
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt iris = sns.load_dataset('iris') sns.pairplot(iris) plt.savefig("Pairplot") # 释放当前画布 plt.close() # 仅选取数值列计算相关性,避免高版本Pandas报错 sns.heatmap(iris.select_dtypes('number').corr()) plt.savefig("heatmap") plt.close()
方法2:显式创建独立画布
为每张图单独声明画布对象,绘图逻辑完全隔离,更适合复杂的多图绘制场景,也方便单独调整每张图的样式参数。
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt iris = sns.load_dataset('iris') # 第一张图独立画布 plt.figure() sns.pairplot(iris) plt.savefig("Pairplot") # 第二张图独立画布 plt.figure(figsize=(8, 6)) sns.heatmap(iris.select_dtypes('number').corr()) plt.savefig("heatmap")
内容的提问来源于stack exchange,提问作者Ctrl7
相关产品推荐
相关产品推荐

