使用 ssh 在远程计算机上使用 corner.py 禁用显示
Disable display using corner.py on a remote machine using ssh
我一直在使用 ssh 在远程机器上创建绘图。当我使用 matplotlib 时,我可以保存图形并避免使用 matplotlib.use("PDF")
显示它们。我现在正在使用 corner.py API 创建一个图,但我想不出类似的方法来避免显示该图。 (我没有明确要求在任何地方展示这个数字。)
可以通过以下方式重新创建错误:
import corner
import numpy as np
# Random data
ndim, nsamples = 3, 1000
np.random.seed(42)
samples = np.random.randn(ndim * nsamples).reshape([nsamples, ndim])
# Make figure
figure = corner.corner(samples)
figure.savefig('test.pdf')
我的第一个错误是
_tkinter.TclError: no display name and no $DISPLAY environment variable.
我尝试将 export DISPLAY=localhost:0.0
添加到我的 .bashrc 文件中,但后来得到
_tkinter.TclError: couldn't connect to display "localhost:0.0".
我已经尝试 figure.ioff(), plt.close(figure)
,并使用 ssh -X remoteMachine
,但我不断收到类似的错误。
我不需要也不想显示图,我只是想保存它。
corner
uses matplotlib
as backend, so the answer from Calling pylab.savefig without display in ipython 适用于此处 -- select 在内存中呈现的 matplotlib
后端:
import matplotlib
matplotlib.use('Agg')
import corner
<etc>
注意顺序:matplotlib
需要在matplotlib.pyplot
或其他plotting-related模块首次导入之前调用.use()
;否则,它没有任何效果,并且会打印一个 UserWarning
来解释这一点。 corner.corner
module imports pyplot
right upon its import.
我一直在使用 ssh 在远程机器上创建绘图。当我使用 matplotlib 时,我可以保存图形并避免使用 matplotlib.use("PDF")
显示它们。我现在正在使用 corner.py API 创建一个图,但我想不出类似的方法来避免显示该图。 (我没有明确要求在任何地方展示这个数字。)
可以通过以下方式重新创建错误:
import corner
import numpy as np
# Random data
ndim, nsamples = 3, 1000
np.random.seed(42)
samples = np.random.randn(ndim * nsamples).reshape([nsamples, ndim])
# Make figure
figure = corner.corner(samples)
figure.savefig('test.pdf')
我的第一个错误是
_tkinter.TclError: no display name and no $DISPLAY environment variable.
我尝试将 export DISPLAY=localhost:0.0
添加到我的 .bashrc 文件中,但后来得到
_tkinter.TclError: couldn't connect to display "localhost:0.0".
我已经尝试 figure.ioff(), plt.close(figure)
,并使用 ssh -X remoteMachine
,但我不断收到类似的错误。
我不需要也不想显示图,我只是想保存它。
corner
uses matplotlib
as backend, so the answer from Calling pylab.savefig without display in ipython 适用于此处 -- select 在内存中呈现的 matplotlib
后端:
import matplotlib
matplotlib.use('Agg')
import corner
<etc>
注意顺序:matplotlib
需要在matplotlib.pyplot
或其他plotting-related模块首次导入之前调用.use()
;否则,它没有任何效果,并且会打印一个 UserWarning
来解释这一点。 corner.corner
module imports pyplot
right upon its import.