因此,似乎在 ubuntu for windows(linux 的 windows 子系统)上,人们建议我们需要使用 Agg 后端并只保存图像,而不是显示绘图。
import matplotlib
matplotlib.use('Agg') # no UI backend
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2*np.pi*t)
plt.plot(t, s)
plt.title('About as simple as it gets, folks')
#plt.show()
plt.savefig("matplotlib.png") #savefig, don't show
我们怎样才能让它到达 plt.show() 实际向我们显示图像的位置?我目前的选择是覆盖 plot.show() ,而不是在 windows 中的 /mnt/c/Users/james/plots/ 下保存一个 plot-148123456.png ,并且只打开一个浏览器窗口来查看图像。
我想我可以托管该文件夹并使用浏览器。
我的目标是能够运行像上面的代码这样的简单示例,而无需将代码更改为 ftp 某处的图像等。我只是希望该图显示在一个窗口中。
有没有人想出一个体面的方法来做到这一点?
原文由 AwokeKnowing 发布,翻译遵循 CC BY-SA 4.0 许可协议
好的,所以我让它按如下方式工作。我在 Windows 上安装了 Ubuntu,安装了 anaconda python 3.6。
sudo apt-get update
sudo apt-get install python3.6-tk
(您可能需要安装不同的python*-tk
取决于您使用的python版本)pip install matplotlib
(用于matplotlib。但现在许多其他东西也可以使用)export DISPLAY=localhost:0.0
(添加到~/.bashrc
以使其成为永久性的。请参阅下面的 WSL2 )无论如何,毕竟,在wsl上的ubuntu中运行的这段代码按原样工作:
结果:
也许这最好通过 Jupyter notebook 或其他东西来完成,但是在 Linux 子系统上的 Ubuntu for Windows 中具有基本的命令行 python matplotlib 功能是很好的,这使得许多其他 gui 应用程序也可以工作。
例如,您可以安装 xeyes,它会说安装 x11-apps 并安装它将安装许多 GUI 应用程序使用的 GTK。但关键是一旦您正确设置了 DISPLAY,并且您的 x 服务器在 Windows 上,那么大多数可以在本机 ubuntu 上运行的东西都将适用于 WSL。
编辑 2019-09-04 :今天我在升级一些库后遇到了“无法获取屏幕资源”的问题。所以我安装了 VcXsrv 并使用它而不是 Xming。只需从 https://sourceforge.net/projects/vcxsrv/ 安装并运行 xlaunch.exe,选择多个窗口,下一步下一步就可以了。然后一切正常。
为 WSL 2 用户编辑 2020-06-23 WSL2(目前是内部快速环)具有 GPU/docker 支持,因此值得升级。但是它在vm中运行。对于 WSL 2,请执行相同的步骤 1-4,然后:
注意:一些 WSL2 用户遇到了类似
couldn't connect to display "172.x.x.x:0"
的错误。如果那是您尝试使用以下命令检查存储在 DISPLAY 中的 IP 地址:echo $DISPLAY
。如果显示的 IP 似乎是错误的(即“8.8.8.8”或另一个不工作的 IP 地址),您需要将第 5 点中显示的~/.bashrc
中的代码更改为可以获取实例 IP 地址的内容.一位用户说这有效:export DISPLAY=$(ifconfig | grep inet | awk '{print $2}' | head -n 1 | awk '{print $0":0"}')
。然而,对于其他一些人来说,它不起作用。 YMMV,但只需找到您的 IP 并将 if 用于 DISPLAY。对于大多数 WSL2 用户,#5 中的命令有效。为 Windows 11 编辑:如果 MS 说服您扔掉旧计算机并购买一台带有 TPM 的计算机,因此您获得了 Windows 11,您将免费获得 GUI。我希望他们在 Windows 10 上添加升级路径,因为 Win10 将像 XP 一样,并且持续很长时间,因为 MS 决定你需要最近的计算机,即使 Win11 在旧计算机上可以正常工作。