python - 通过vscode的SSH隧道打开一个Matplotlib图
问题描述
我正在设置一个远程工作站,以便在另一台包含 GPU 的计算机上从我的笔记本电脑上运行与机器学习相关的 python 代码。
我使用 vscode 的 SSH 远程功能来远程运行和调试我的代码,我对界面非常满意。但是,我无法生成来自“matplotlib”库的数字。
我试图修改一些 matlplotlib 选项,但没有成功:
import matplotlib
matplotlib.use('Agg')
按照以下说明:_tkinter.TclError: no display name and no $DISPLAY environment variable
简而言之,我的问题出现在以下示例代码中:
import numpy as np
from matplotlib import pyplot as plt
x = np.linspace(0,1,101)
y = x ** 2
plt.close()
plt.figure()
plt.plot(x,y)
plt.show()
~/vscode$ cd /home/*/vscode ; env PYTHONIOENCODING=UTF-8 PYTHONUNBUFFERED=1 /usr/bin/python3 /home/*/.vscode-server/extensions/ms-python.python-2019.6.24221/pythonFiles/ptvsd_launcher.py --default --client --host localhost --port 39903 /home/*/vscode/test_plot.py
Traceback (most recent call last):
File "/home/*/.vscode-server/extensions/ms-python.python-2019.6.24221/pythonFiles/ptvsd_launcher.py", line 43, in <module>
main(ptvsdArgs)
File "/home/*/.vscode-server/extensions/ms-python.python-2019.6.24221/pythonFiles/lib/python/ptvsd/__main__.py", line 434, in main
run()
File "/home/*/.vscode-server/extensions/ms-python.python-2019.6.24221/pythonFiles/lib/python/ptvsd/__main__.py", line 312, in run_file
runpy.run_path(target, run_name='__main__')
File "/usr/lib/python3.6/runpy.py", line 263, in run_path
pkg_name=pkg_name, script_name=fname)
File "/usr/lib/python3.6/runpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/*/vscode/test_plot.py", line 8, in <module>
plt.figure()
File "/usr/lib/python3/dist-packages/matplotlib/pyplot.py", line 539, in figure
**kwargs)
File "/usr/lib/python3/dist-packages/matplotlib/backend_bases.py", line 171, in new_figure_manager
return cls.new_figure_manager_given_figure(num, fig)
File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_tkagg.py", line 1049, in new_figure_manager_given_figure
window = Tk.Tk(className="matplotlib")
File "/usr/lib/python3.6/tkinter/__init__.py", line 2023, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
非常感谢你帮助我!
解决方案
我发现以前的答案略有变化,效果很好。
将绘图另存为.png
而不是绘制它。
plt.savefig("dummy_name.png")
上一个答案然后建议将文件移动到scp
. 相反,我建议dummy_name.png
使用 Visual Code 打开,无需编写命令,它会在您绘制其他内容时自动刷新图像。我从美国通过 SSH 测试到欧洲的服务器,图像在不到半秒的时间内刷新。
推荐阅读
- php - PHP 7 的路径 - 使用“|” 特点
- mysql - MySQL 查询 - 显示更高的“薪水”
- python - 带有二维索引的 numpy 多维选择
- php - CakePHP 3.6.14:在引导模式中呈现视图 (.ctp)
- android - 如何轻松访问在按钮单击时膨胀的片段中的视图?
- javascript - 如何从 Google API 检索用户名
- c# - 如何在 C# 中基于级联下拉列表在文本框中显示固定数据?
- ios - 使用集合视图交换卡片
- c - realloc():C 程序中的下一个大小错误无效
- ios - iOS Cocoalumberjack:ThreadId 和 ProcessId 未在 File Logger 中打印,但在 TTY 控制台日志中打印