我在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()
在创建下一个图之前并不能解决问题,因为它只会删除颜色条,但图的布局会不断缩小:
请注意,图形大小保持不变,但是当我再次绘图时,图形的大小会变得越来越小,并且颜色栏会进一步向左移动,而整个图形的右侧部分仍会保持白色。
当我创建一个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正确重置布局。还有其他建议如何解决这个问题?
预先感谢