python - 在 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)
解决方案
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() 以任何您喜欢的方式操作它
推荐阅读
- google-apps-script - 使用 gscript 从工作表到 gmail 的日期格式
- php - PHP Curl响应不是可读格式
- cakephp - CakePHP 3.x 中两个用户关联到一个事务
- c++ - VS 为我的构造函数提供了另一种解决方案,但我想知道为什么我的不能工作
- python - 如何在 django 网页中显示来自数据库的结果?
- javascript - 如何在另一个表中显示隐藏表的前两行
- c# - 在 .NET 环境中运行 Python 代码而不安装 Python
- angular - 添加 ngForm 后 Angular 应用程序无法正常工作
- c# - azure function c# http trigger blob output
- jsf - 过滤后更新数据表行数