首页 > 解决方案 > 在 tkinter 中实现时的热图大小问题

问题描述

我正在尝试在 tkinter 中实现 pcolor 热图,但即使输入的数据是 20x20 大小的矩阵,它们似乎也被拉伸了,我希望它们像它们应该的那样是正方形的

图片: https ://drive.google.com/file/d/1VBSUM8p3HeacW7wQJaCmR8ocrF0WYqBP/view

起初我将 figsize 称为均匀大小,但它对热图的大小没有任何影响。然后,我调用了 axs.set_aspect = True,这实际上使热图呈方形,但也使它们的尺寸显着缩小。

然后我更改了画布的背景,其中包含了热图。我发现画布的大小不是正方形的,所以我怀疑是画布的大小是罪魁祸首。但是,无论我给画布什么宽度/高度,它的大小仍然不会改变???

self.frame1 = Frame(self) 
self.frame1.pack() 
self.cvs_plt = LabelFrame(self.frame1, bg = "white")
self.cvs_plt.pack()
data1 = np.random.randn(20, 20)

self.fig = self.drawHeatMap2(data1)
self.fig_cv = FigureCanvasTkAgg(self.fig, self.cvs_plt)
self.fig_cv.get_tk_widget().pack()

def drawHeatMap2(self, data1):
    fig, axes = plt.subplots(1, 2, sharey=True)
    names = ["Actual", "Expected"]
    a = []
    for i in range(2):
        pcm = axes[i].pcolor(data1, cmap = "viridis_r")
        axes[i].set_title(names[i])
        axes[i].set_aspect("auto", "datalim", share = True)
        cb = fig.colorbar(pcm, ax = axes[i])
        a.append(cb)
    a[0].ax.set_visible(False)

标签: pythonmatplotlibtkinterheatmap

解决方案


    tkAgg = FigureCanvasTkAgg(self.fig, self.cvs_plt)

    self.fig_cvs = tkAgg.get_tk_widget()
    self.fig_cvs.config(width = 1000)
    self.fig_cvs.pack()

最初,我认为 FigureCanvasTkAgg 会返回一个 tkinter 对象。事实证明它没有,而 get_tk_widget() 正是这项工作。在获得作为 pyplot 的 tk 对象后,您可以使用 config() 以任何您喜欢的方式操作它


推荐阅读