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

2024-04-25 18:23:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我在tkinter gui中嵌入了matplotlib。使用seaborn热图函数,我创建了一个热图和一个colorbar,它在创建第一个绘图时按我所希望的那样工作。但是,如果我再次打印,这将不会覆盖颜色栏,而是添加另一个颜色栏到我的数字。这样我就得到了很多色条。你知道吗

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

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

第一个是绘图本身,第二个是颜色条,如下所示: plot 1

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

只需使用

self.fig.axes[1].remove()

在创建下一个绘图之前,这样做不起作用,因为它只会删除颜色条,但绘图的布局会不断缩小:

plot 3plot 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正确地重置布局。还有其他关于如何解决这个问题的建议吗?你知道吗

提前谢谢


Tags: self绘图datasettingsplotmatplotlib颜色tkinter