사용자가 선택한 csv의 히트 맵을 표시하기 위해 tkinter 및 matplotlib (및 seaborn)을 사용하여 GUI를 구축하고 있습니다. 히트 맵이로드 될 때마다 적절한 컬러 바로 업데이트되기를 원합니다. 새 데이터를로드 할 때마다 축을 지우지 만 컬러 바가 사라지지 않고 새 히트 맵이 옆으로 찌그러집니다. 새 히트 맵이 공간을 제대로 채울 수 있도록 이전 컬러 바도 지워 졌으면합니다.
내 문제를 과시하기 위해 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] 삭제
몇 마디 만하겠습니다