使用matplotlib时,如何使每个图形始终绘制在屏幕上的同一位置?

问题描述 投票:0回答:1

我有一个 Python 脚本,可以使用 matplotlib 绘制 3 个图形。 当我运行此脚本,然后关闭 3 个图形并重新运行它时,与第一次运行相比,第二次运行中这些图形出现在屏幕上的不同位置。

(例如,在第一次运行中,第一个图形可能位于屏幕的左上角附近,第二个和第三个图形相对于第一个图形向右下角交错或层叠。在第二次运行中,第一个图形可能位于靠近屏幕中间的位置,第二个图形可能相对于第一个图形层叠,而第三个图形可能位于屏幕的左上角附近。)

有没有办法防止不同运行中出现这种图形位置不一致的情况? 换句话说,有没有办法强制 Python 在每次运行中保持屏幕上图形的相同位置?


到目前为止,为了尝试为第一个图指定固定位置,我已经尝试了针对 this 问题提出的许多答案,但没有成功。 例如,在我的电脑(运行 Windows 10)上,

plt.figure(num=1)
mngr = plt.get_current_fig_manager()
mngr.window.setGeometry = (250, 120, 1280, 1024)

不返回任何错误或警告,但似乎也无法在 IDLE 或 VS Code 中将图 1 修复到屏幕上的一个位置(跨多次运行)。

python matplotlib plot window figure
1个回答
0
投票

虽然我仍然希望有一个更优雅的答案(例如关闭图形放置的明显随机化的方法),但将后端设置为 TkAgg 似乎确实允许 Windows 10 用户使用 figure manager 来保持相同图形在屏幕上跨运行的放置。 这是一个近乎最小的可重复示例:

import matplotlib as mpl
import matplotlib.pyplot as plt

mpl.use("TkAgg")  # set the backend to TkAgg

plt.figure(num=1, figsize=(6,5))
mngr = plt.get_current_fig_manager()
mngr.canvas.manager.window.wm_geometry("+%d+%d" % (50, 100))

plt.figure(num=2, figsize=(6,5))
mngr = plt.get_current_fig_manager()
mngr.canvas.manager.window.wm_geometry("+%d+%d" % (70, 120))

plt.figure(num=3, figsize=(6,5))
mngr = plt.get_current_fig_manager()
mngr.canvas.manager.window.wm_geometry("+%d+%d" % (90, 140))

plt.show()

这基本上是 Cryptoman 对 this 问题的回答(上面也提到过)。

© www.soinside.com 2019 - 2024. All rights reserved.