因此,似乎在ubuntu的windows(windows子系统的linux)的人建议我们需要使用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的图像某处等,我只是想在一个窗口中显示的绘图。
有没有人想出一个体面的方法来做这件事?
9条答案
按热度按时间n3h0vuf21#
好的,我让它工作如下。我在Windows上安装了Ubuntu,安装了Anaconda Python 3. 6。
1.从sourceforge下载并安装VcXsrv或Xming(Windows版X11)(请参阅下面的编辑)
sudo apt-get install python3.6-tk
sudo apt-get install python3.6-tk
(您可能需要安装不同的python*-tk
,这取决于您使用的python版本)pip install matplotlib
(用于matplotlib。但现在许多其他东西也可以工作)export DISPLAY=localhost:0.0
(添加到~/.bashrc
以使其永久化。请参阅下面的WSL 2)不管怎样,在这一切之后,这段代码在ubuntu上运行在wsl上,就像现在这样:
结果:x1c 0d1x
也许通过Jupyter笔记本电脑或其他东西可以更好地完成这一点,但是在Linux子系统上的Ubuntu for Windows中拥有基本的命令行python matplotlib功能是很好的,这使得许多其他的GUI应用程序也可以工作。
例如你可以安装xeyes,它会说安装x11-apps,安装它会安装很多GUI应用程序使用的GTK。但重点是一旦你正确设置了DISPLAY,并且在Windows上安装了x服务器,那么大多数在原生ubuntu上工作的东西都可以在WSL上工作。
编辑日期:2019年9月4日:今天我升级了一些库后遇到了“无法获得屏幕资源”的问题。所以我安装了VcXsrv,并使用它代替Xming。只需从https://sourceforge.net/projects/vcxsrv/安装并运行xlaunch.exe,选择多个窗口,下一个下一个OK。然后一切都正常了。
编辑WSL 2用户2020-06-23WSL 2(目前内部快速环)有GPU/docker支持,所以值得升级。但是它在虚拟机中运行。对于WSL 2,遵循相同的步骤1-4,然后:
1.该IP地址不是localhost,它在resolv.conf中,因此请运行以下命令(并包含在~/.bashrc中):
1.现在仔细检查防火墙:Windows安全-〉防火墙和网络保护-〉允许应用程序通过防火墙-〉确保VcXsrv同时选中了public和private。(第一次启动xlaunch时,您可能会得到允许通过防火墙的提示。这也可以。另外,如果VcXsrv不在应用程序列表中,您可以手动添加它,例如从“C:\program files\vcxsrv\vcxsrv.exe”添加)
1.启动VcXsrv,并勾选“禁用访问控制”
注意:一些WSL 2用户会遇到类似
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来显示。对于大多数WSL 2用户来说,#5中的命令起作用。针对Windows 11进行编辑:如果微软说服你扔掉你的旧电脑,买一台有TPM的电脑,这样你就得到了Windows 11,你就可以免费得到GUI。我希望他们在Windows 10上添加升级路径,因为Win10将像XP一样,而且持续很长时间,因为微软决定你需要最新的电脑,尽管Win 11在旧电脑上也能很好地工作。
uqjltbpv2#
图也可以在WSL上使用Visual Studio代码查看,截至2019年6月发布,包含"Plot Viewer"。
在常规的.py文件中,插入注解字符串
#%%
会将代码标记为Jupyter(IPython)单元格,并且代码透镜会显示Run Cell
的选项。此外,在Python文件中右键单击会包含以下选项:在Python交互式窗口中运行当前文件
来自VS代码2019年6月发布版本:
2019年6月的更新包含了一个全新的Plot Viewer,可用于操作任何图像图,如流行的matplotlib图。
您可以通过双击图或单击“展开图像”按钮(悬停在Python交互式窗口中的图图像上时显示)来进行尝试:
使用出图检视器,您可以平移、拉近/拉远、导览目前阶段作业中的出图,以及将出图导出为PDF、SVG或PNG格式。
dz6r00yl3#
对于使用Ubuntu Focal Fossa发布的WSL 2,我在Windows上安装了downloaded和 VcXsrv。我使用以下配置:
我不知道 Native OpenGL,但禁用访问控制似乎很重要。
现在,您需要导出WSL中的env变量
DISPLAY
。我在
/etc/resolv.conf
中找到了正确的地址,但在ifconfig
结果中找到的地址不正确。因此,下面的命令对我不起作用:该IP地址也可以在
CMD.exe
命令上下文中的ipconfig
命令中找到。搜索vEthernet (WSL)
,应该就是这个地址。现在,您可以通过在WSL环境中执行xcalc来测试一切是否正常。如果xcalc不存在,请安装它:
xcalc命令应在Windows上打开如下所示的应用程序:
如果它是工作的,这意味着连接到您的X-服务器是可能的,但您可能需要安装一些额外的Python包,如:
根据您的python版本更改
.x
。w8rqjzmb4#
要让matplotlib与Windows* 上Ubuntu *Bash上的GTKAgg配合使用,我可以:
1.我在Windows下安装了VcXsrv(但是Xming的工作原理应该是一样的)
1.如上所述设置DISPLAY [
export DISPLAY=localhost:0.0
(添加到~/.bashrc以使其永久化)]1.已执行
sudo pip uninstall matplotlib
1.然后是
sudo apt install python-matplotlib
1.更新了matplotlibrc以读取
backend : GTKAgg
(而不是backend : agg
)1.我还运行了
sudo apt-get install python-gtk2-dev
,但这可能不是必需的。Uninstalling the pip-installed matplotlib and reinstalling it via apt似乎是必要的,因为pip不包括运行GTK所需的C扩展,但apt版本包括。
u59ebvdq5#
在Windows 11 22000中,Linux GUI应用程序开箱即用得到正式支持,前提是满足先决条件。无故障、无黑客攻击、无防火墙更改等。
先决条件:
1.已安装的vGPU驱动程序(英特尔/Nvidia/AMD)
然后运行命令
wsl-更新
wsl-关闭
搞定了!!
官方资料来源:https://learn.microsoft.com/en-us/windows/wsl/tutorials/gui-apps
khbbv19g6#
在我的案例中(Windows 10、WSL 2、Ubuntu 20.04和miniconda 3,以及虚拟环境,在虚拟环境中,我使用
conda
命令安装了所有必需的Python 3.6包,基于Windows的Visual Studio代码带有'Python'和'Remote - WSL'扩展),我在Windows下安装了VcXsrv,并添加了同样,在从WSL运行Python代码之前,我们必须启动
XLaunch
并选择“Disable access control”(我也选择了“Native opengl”)。在项目文件夹中,不要将Python文件命名为matplotlib.py
(一些相关的问题报告为here)。sqyvllje7#
在两个独立的示例中(wsl 1和wls 2,ubuntu 20.04),当我使用PyQt 5时,我丢失了几个libxcb库(例如libxcb-icccm 4),在试图绘图时没有打印出来。我使用
export QT_DEBUG_PLUGINS=1
找到了它们,然后简单地安装了它们。基本上是here的步骤。rfbsl7qr8#
有类似的问题,所以简单地安装支持的GPU驱动程序解决了我的问题。检查this out!
cidc1ykv9#
我发现最好的方法是在Windows Subsystem for Linux(WSL)上安装Jupyter,方法如下
现在您可以安装matplotlib了
还有Jupyter笔记本
如果您需要更多信息,请查看此链接Python setup on the Windows subsystem for Linux (WSL)