我有一个 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 修复到屏幕上的一个位置(跨多次运行)。
虽然我仍然希望有一个更优雅的答案(例如关闭图形放置的明显随机化的方法),但将后端设置为 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 问题的回答(上面也提到过)。