带有matplotlib的Tkinter-热图颜色条未与其余轴清除

凯尔·卡洛(Kyle Carow)

我正在使用tkinter和matplotlib(和seaborn)构建一个GUI,以显示用户选择的csv的热图。我希望热图每次加载时都使用适当的颜色栏进行更新。每次加载新数据时,我都会清理轴,但色条永远不会消失,新的热图会向侧面挤压。我也希望清除旧的颜色条,以便新的热图可以正确填充空间。

我做了一个MWE来炫耀我的问题:

import numpy as np
import tkinter as tk
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import seaborn as sns

class App(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.state('zoomed')
        self.winfo_toplevel().title('App')

        frame = tk.Frame(self)
        frame.pack()

        button_reload = tk.Button(frame, text='Reload data', command=self.reload_data)
        button_reload.pack()

        self.fig = Figure()
        self.ax = self.fig.add_subplot(111)

        self.fig.tight_layout()  # Small margins
        self.ax.axis('off')  # Disable axis lines
        self.canvas_heatmap = FigureCanvasTkAgg(self.fig, master=frame)
        self.canvas_heatmap.get_tk_widget().pack(expand=True, fill='both')

    def reload_data(self):
        # dummy data for example
        data = np.random.rand(3,3)

        # Clear old heatmap from axes
        self.ax.clear()

        # Set up new heatmap
        self.ax = sns.heatmap(data, ax=self.ax, linewidth=0.1)
        self.canvas_heatmap.draw()
        self.canvas_heatmap.get_tk_widget().pack(expand=True, fill='both')  # necessary?
    
def quit_GUI():
    root.quit()
    root.destroy()

if __name__ == '__main__':
    root = App()
    root.protocol('WM_DELETE_WINDOW', quit_GUI)  # Kill process on clicking 'X'
    root.mainloop()

这是一些照片,您可以在不希望看到的地方看到颜色条。

目前很好: 第一热图

坏: 第二热图

更差: 在此处输入图片说明

我可以一直这样下去,直到我的热图变成一片碎片为止。

小说

您需要清除图形并重新制作斧头。

import numpy as np
import tkinter as tk
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import seaborn as sns

class App(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.state('zoomed')
        self.winfo_toplevel().title('App')

        frame = tk.Frame(self)
        frame.pack()

        button_reload = tk.Button(frame, text='Reload data', command=self.reload_data)
        button_reload.pack()

        self.fig = Figure()
        self.canvas_heatmap = FigureCanvasTkAgg(self.fig, master=frame)
        self.canvas_heatmap.get_tk_widget().pack(expand=True, fill='both')

    def reload_data(self):
        data = np.random.rand(3,3)
        self.fig.clear()
        ax = self.fig.add_subplot(111)
        ax.axis('off')  # Disable axis lines
        line = sns.heatmap(data, ax=ax, linewidth=0.1)
        self.fig.tight_layout()  # Should go after the drawing
        self.canvas_heatmap.draw()
        # ~ self.canvas_heatmap.get_tk_widget().pack(expand=True, fill='both')  # not necessary
        
if __name__ == '__main__':
    root = App()
    # ~ root.protocol('WM_DELETE_WINDOW', quit_GUI)  # not needed
    root.mainloop()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

tkinter中带有matplotlib图的弹出窗口

透明的python matplotlib热图颜色条

带有分隔列的 matplotlib 热图

如何自定义 Seaborn/Matplotlib 热图颜色条

Matplotlib条形图,带有不同的颜色条和显示值的条

Matplotlib热图Y轴

显示带有Alpha值的“热图”图像-Matplotlib / Python

一个水平的颜色条,用于Seaborn热图子图和带有xticklabel的Annot问题

检索Matplotlib热图颜色

如何创建带有多个颜色图的热图?

在Matplotlib图组中标记并带有正确颜色的图例

带有滑块的 Matplotlib 动态图

绘制带有QThread问题的matplotlib图

带有 matplotlib 图的多色标记

带有隐藏zaxis的matplotlib表面图

带有颜色的Python并排matplotlib boxplots

如何在不更改 python matplotlib 中的热图的情况下更改颜色条的值?

Matplotlib:条形图,每个条上带有颜色渐变。错误:TypeError:“ ListedColormap”类型的对象没有len()

ImportError:未安装带有matplotlib的名为matplotlib的模块

ggplot2热图,图形之间具有固定比例的颜色条

Matplotlib子图如何将颜色条与其他图例对齐,或如何使子图向左对齐

matplotlib.pyplot:在为每个子图使用颜色条时对齐轴标签

带有两个 Y 轴和公共 X 轴的 Matplotlib 条形图

使用matplotlib的pyplot在每个单元格中带有文本的热图

Python:带有颜色条的条形图

如何单独保存带有颜色条的每个图?

matplotlib中的多个图,带有返回图的函数

带有行颜色渐变和颜色栏的python matplotlib

Matplotlib将y轴放置在带有翻转标签的右侧