从图中移除颜色条

3 投票
4 回答
10770 浏览
提问于 2025-04-18 12:48

我写了一段代码,用来创建一个栅格对象的png图片(self[:] = 一个np数组)。这个代码本来是一个方法,目的是为了方便绘制图表。

问题是,这段代码第一次运行的时候没问题,但当我多次运行这个方法时,生成的图片上会出现多个图例。

enter image description here

我试着用delaxes来解决这个问题,但这个图例真的很顽固。
如果有解决办法,欢迎分享。

以下是代码:

    def plot(self,image_out,dpi=150, rotate = 60):
        xur = self.xur()
        xll = self.xll()
        yur = self.yur()
        yll = self.yll()
        fig = plt.figure()
    #tmp = range(len(fig.axes))
    #tmp = tmp[::-1]
    #for x in tmp:
    #    fig.delaxes(fig.axes[x])
        ax = fig.add_subplot(111)
        cax = ax.imshow(self[:],cmap='jet', extent = [yll,yur,xll,xur],
                            interpolation = 'nearest')
        cbar = fig.colorbar()
        plt.xticks(rotation=70)
        plt.tight_layout(pad = 0.25)
        plt.savefig(image_out,dpi=dpi)
        return

4 个回答

0

你可以通过调用它的 .remove() 方法来去掉颜色条:

cbar = fig.colorbar()
...
cbar.remove()
1

我遇到了同样的问题,另一篇帖子里的答案帮我解决了这个问题。

在matplotlib中从图形中移除颜色条

请参考第二个答案。

我也遇到过类似的问题,试了试,找到两个可能更优雅的解决办法:

一种是清空整个图形,然后重新添加子图(如果需要的话也可以加上颜色条)。

如果颜色条总是存在,你可以简单地更新坐标轴,使用自动缩放,这样也会更新颜色条。

我用这个方法试过imshow,但我想其他绘图方法也差不多。

特别是,我使用了第一种方法,就是通过 clf() 清空图形,然后每次重新添加坐标轴。

1

一个更好的选择是告诉colorbar你希望它显示在哪些坐标轴上,具体可以参考这个例子 这里

3

你需要关闭这个图。我也遇到过同样的问题

在 plt.savefig 之后,添加 plt.close()。

撰写回答