在for循环中重复使用seaborn画图,未清除缓存导致一张图中存在多条colorbar

在尝试用for循环绘制21张2*20热力图时,遇到每张图叠加前一张的颜色柱问题。原因是未清除图像缓存。通过添加plt.close(all)到循环中,每次绘制后关闭所有图形窗口,成功解决了颜色柱积累的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

有一个21∗2∗2021*2*2021220的矩阵,分别代表21个类别的数据,每个类别的输出是一个2∗202*20220的矩阵,我想要把每个类别的输出用热力图画出来,一共需要画21张图。
因此使用了for循环,代码如下:

avg_out_open = np.random.rand(21, 2, 20)
for i, open_vector in enumerate(avg_out_open):
    fig = sns.heatmap(data=open_vector,cmap="RdBu_r",linewidths=0.3) 
    heatmap = fig.get_figure()
    heatmap.savefig(log_name+str(step)+'out_open_class'+str(i)+'.png', dpi = 400)

但是这样的代码存在问题。
画出的图中会有多条颜色柱,并且后面的循环颜色柱越多。
猜测是由于没有清除缓存导致的,尝试使用fig.cla(),无效。
在这里插入图片描述

解决办法

使用plt.close("all")

for i, open_vector in enumerate(avg_out_open):
    fig = sns.heatmap(data=open_vector,cmap="RdBu_r",linewidths=0.3) 
    heatmap = fig.get_figure()
    heatmap.savefig(log_name+str(step)+'out_open_class'+str(i)+'.png', dpi = 400)
    plt.close("all")
Seaborn 是一个基于 matplotlib 的 Python 数据可视化库,提供了更高级的接口用于绘制吸引人的统计形。要在一个组中绘制一个 colorbar,可以使用 seaborn 的 `heatmap` 函数来创建热,这通常会自带 colorbar。下面是一个简单的例子来说明如何使用 seaborn 创建组并在组中包含一个 colorbar: ```python import seaborn as sns import matplotlib.pyplot as plt import numpy as np # 创建一些数据 data = np.random.rand(10, 12) # 创建组,假设我们有3行4列的子 fig, axes = plt.subplots(nrows=3, ncols=4, figsize=(12, 8)) # 通过遍历axes中的每一个axes对象来绘制热,并添加colorbar for i, ax in enumerate(axes.flatten()): if i < len(data): # 只处理非空的子位置 sns.heatmap(data[i], ax=ax, cbar=True if i == 0 else False, vmin=0, vmax=1) else: ax.axis('off') # 对于超出数据数量的子,隐藏它 # 调整colorbar的位置,使其只在第一个子上显示 cbar_ax = fig.add_axes([1.01, 0.1, 0.02, 0.8]) cbar = plt.colorbar(axes[0].collections[0], cax=cbar_ax) cbar.set_label('数据值范围') plt.tight_layout() plt.show() ``` 在这个例子中,我们首先导入必要的库,并创建了一个随机数据集。然后,我们创建了一个组,其中有12个子位置。我们遍历这些子位置,对于每个位置,我们检查是否还有数据要显示。如果有,我们就绘制一个热并在第一个子上添加一个 colorbar。最后,我们将 colorbar 的位置调整到组的外部,并设置了 colorbar 的标签。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值