matplotlib颜色条更新/删除会破坏轴布局

时间:2019-05-08 16:32:14

标签: python matplotlib seaborn colorbar

我在tkinter gui中嵌入了matplotlib。使用seaborn热图功能,我可以创建一个热图和一个色条,它们可以在创建第一个图时按其期望的方式工作。但是,如果我再次绘图,这不会覆盖颜色栏,而是向我的图形添加另一个颜色栏。这样我最终会出现很多颜色条。

我为绘图创建的图形包含两个轴:

[<matplotlib.axes._subplots.AxesSubplot object at 0x000001F36C8C3390>, <matplotlib.axes._subplots.AxesSubplot object at 0x000001F36D6ABF98>]

第一个是情节本身,第二个是颜色条,看起来像这样: plot 1

如果我再次绘图,结果是: plot 2

只需使用

删除颜色栏。
self.fig.axes[1].remove()

在创建下一个图之前并不能解决问题,因为它只会删除颜色条,但图的布局会不断缩小:

plot 3 plot 4

请注意,图形大小保持不变,但是当我再次绘图时,图形的大小会变得越来越小,并且颜色栏会进一步向左移动,而整个图形的右侧部分仍会保持白色。

当我创建一个tkinter gui时,在第一次运行该程序时会初始化绘图窗口。

self.fig = plt.figure.Figure( facecolor = "white", figsize = (7,4)) 

          self.ax = self.fig.subplots()

          self.x_data = x_data
          self.y_data = y_data

当有人按下绘图按钮时,便会创建绘图

    def plot_on_plotframe(self):
        self.ax.cla()

        #executes required matplotlib layout
        self.plotlayout[self.plot_type]()

        print('plottype: {}'.format(self.plot_type))       
        #print('Plot xdata: {}'.format(self.x_data))
        self.canvas.draw()

我需要制作不同类型的图,并通过plotlayout选择适当的类型:

        self.ax = sns.heatmap(self.x_data, vmin=self.settings[2][0], vmax=self.settings[2][1], cmap='viridis', fmt=self.settings[0], annot=self.settings[1], linewidths=0.5, annot_kws={'size': 8}, ax = self.ax)

        self.ax.set_xticklabels(self.ax.get_xticklabels(), rotation=0)
        self.fig.tight_layout()

如果有人能告诉我为什么matplotlib甚至在我一开始删除旧的颜色条后仍会干扰布局,那就太好了。我认为这与gridSpec有关,但是我不知道如何告诉matplotlib正确重置布局。还有其他建议如何解决这个问题?

预先感谢

0 个答案:

没有答案