如何通过循环生成多个seaborn countplot图表并解决绘图重叠问题
问题原因
绘图重叠是因为matplotlib/seaborn默认复用当前活跃的画布对象,循环过程中没有新建独立画布,多次绘图的内容都叠加到了同一张画布上。
解决方法
每次循环时创建独立画布,保存后关闭画布释放资源即可,修改后代码如下:
import matplotlib.pyplot as plt import seaborn as sns dispo = df_8th['Dispensary'].unique() for i in dispo: # 新建独立画布,可自行调整figsize参数适配标签长度 plt.figure(figsize=(10, 8)) df_loop = df.loc[(df['Dispensary'] == i)] c1 = sns.countplot(y="Brand Name", data=df_loop) c1.set(title = f"{i} Flower Sku Count") c1.tick_params(axis='x', rotation=0) # 保存时添加bbox_inches='tight'避免品牌名称标签被截断 c1.figure.savefig(f"count_charts/{i} Brand Skus.png", format="PNG", bbox_inches='tight') # 关闭当前画布,避免内容叠加 plt.close()
如果偏好面向对象的绘图写法,也可以用如下写法:
import matplotlib.pyplot as plt import seaborn as sns dispo = df_8th['Dispensary'].unique() for i in dispo: fig, ax = plt.subplots(figsize=(10, 8)) df_loop = df.loc[(df['Dispensary'] == i)] sns.countplot(y="Brand Name", data=df_loop, ax=ax) ax.set(title = f"{i} Flower Sku Count") ax.tick_params(axis='x', rotation=0) fig.savefig(f"count_charts/{i} Brand Skus.png", format="PNG", bbox_inches='tight') plt.close(fig)
内容的提问来源于stack exchange,提问作者Dookie9636
相关产品推荐
相关产品推荐

