【发布时间】:2021-09-05 08:39:29
【问题描述】:
我正在使用 python 编写的后处理绘图脚本,使用 python 3.7 和 OSX 10.14
该脚本可能没有优化,但当我使用外接显示器时它运行良好。 当我尝试在我的 macbook pro 15" 显示器 (2018) 上运行它时,它会冻结并变得非常缓慢且无响应,除非我将图形尺寸设置得足够小。
我不知道原因,也没有找到任何解释浏览互联网。关于什么可能导致这种行为以及如何解决它的任何线索?
这是我正在运行的脚本的“剪辑”版本。
import numpy as np
import matplotlib
from matplotlib import pyplot as plt
from matplotlib.patches import Rectangle, Circle
import sys
def main(iter0,iterN,its,out_dir='output'):
it0 = int(iter0)
itN = int(iterN)
itstep = int(its)
a = list(range(it0,itN+1,itstep))
loaded_steps=len(a)
e = np.loadtxt(out_dir+'/energy_data_dynamics')
#... load many other files
plt.ion()
fig = plt.figure(figsize=(20, 20),facecolor="white") #THESE DIMENSIONS WORK FOR ANY EXTERNAL SCREEN
# fig = plt.figure(figsize=(10, 10),facecolor="white") #THESE DIMENSIONS WORK FOR MACBOOK SCREEN
it = 0
for index in range(0,loaded_steps):
plt.cla()
plt.axes().set_aspect('equal')
#... plot many other subplots
ax414=plt.subplot(414)
ax414.plot(e[it0+it,0], e[it0+it,2], marker="o", color="crimson", ms=15)
ax414.plot(e[it0:itN+1,0], e[it0:itN+1,2],'-r')
ax414.set_title("Energy")
plt.show()
plt.pause(0.0000000001)
it+=itstep
if index == loaded_steps-1:
input("Plot finished - Press [enter] to continue.")
if __name__ == '__main__':
matplotlib.use("TkAgg")
its = 1
out_dir = 'output'
if len(sys.argv)>=4:
its = sys.argv[3]
if len(sys.argv)>=5:
out_dir = sys.argv[4]
main(sys.argv[1],sys.argv[2],its,out_dir)
【问题讨论】:
-
tkAgg 在 MacOS 上似乎存在重大问题 - 也许尝试使用 pyqt5 或 macOSx 后端。您也可以重新考虑使用如此巨大的图形尺寸。 20 英寸 x 20 英寸比大多数显示器都大,除非您有 32 英寸显示器...
-
20x20 背后的想法是它在大多数显示器上自动调整为 max_dimension,或者至少这是我在 tkAgg 中观察到的行为。使用 macOSX 似乎可以解决“缓慢”问题,但后来我无法再更改尺寸并且自动调整大小不起作用。尝试 pyqt5 结果为
ValueError: 'pyqt5' is not a valid value for backend; supported values are ['GTK3Agg', 'GTK3Cairo', 'MacOSX', 'nbAgg', 'Qt4Agg', 'Qt4Cairo', 'Qt5Agg', 'Qt5Cairo', 'TkAgg', 'TkCairo', 'WebAgg', 'WX', 'WXAgg', 'WXCairo', 'agg', 'cairo', 'pdf', 'pgf', 'ps', 'svg', 'template'] -
如果你真的想这样做,你可能会尝试最大化窗口? stackoverflow.com/questions/12439588/…
-
@JodyKlymak 我看到了那个页面,但没有针对 macOSX 后端的建议解决方案,而且我似乎无法使用 qt 或 wx 后端......(也许我做错了什么尝试实现它们时?)编辑:使用 macOSX 是不可行的:它会停止与图形的所有交互,所以我无法缩放或保存它,使绘图几乎没用。
-
试试 qt5agg。很抱歉让您感到困惑
标签: python macos matplotlib multiple-monitors