linux 在Ubuntu中显示matplotlib图(和其他GUI)(WSL1和WSL2)

628mspwn  于 2022-11-02  发布在  Linux
关注(0)|答案(9)|浏览(204)

因此,似乎在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的图像某处等,我只是想在一个窗口中显示的绘图。
有没有人想出一个体面的方法来做这件事?

n3h0vuf2

n3h0vuf21#

好的,我让它工作如下。我在Windows上安装了Ubuntu,安装了Anaconda Python 3. 6。
1.从sourceforge下载并安装VcXsrvXming(Windows版X11)(请参阅下面的编辑)

  1. sudo apt-get install python3.6-tk
  2. sudo apt-get install python3.6-tk(您可能需要安装不同的python*-tk,这取决于您使用的python版本)
  3. pip install matplotlib(用于matplotlib。但现在许多其他东西也可以工作)
  4. export DISPLAY=localhost:0.0(添加到~/.bashrc以使其永久化。请参阅下面的WSL 2
    不管怎样,在这一切之后,这段代码在ubuntu上运行在wsl上,就像现在这样:
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()

结果: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中):

export DISPLAY=`grep -oP "(?<=nameserver ).+" /etc/resolv.conf`:0.0

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在旧电脑上也能很好地工作。

uqjltbpv

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格式。

dz6r00yl

dz6r00yl3#

对于使用Ubuntu Focal Fossa发布的WSL 2,我在Windows上安装了downloadedVcXsrv。我使用以下配置:

我不知道 Native OpenGL,但禁用访问控制似乎很重要。
现在,您需要导出WSL中的env变量DISPLAY
我在/etc/resolv.conf中找到了正确的地址,但在ifconfig结果中找到的地址不正确。因此,下面的命令对我不起作用

export DISPLAY=$(ifconfig | grep inet | awk '{print $2}' | head -n 1 | awk '{print $0":0"}')

该IP地址也可以在CMD.exe命令上下文中的ipconfig命令中找到。搜索vEthernet (WSL),应该就是这个地址。
现在,您可以通过在WSL环境中执行xcalc来测试一切是否正常。如果xcalc不存在,请安装它:

sudo apt-get update && sudo apt-get install x11-apps

xcalc命令应在Windows上打开如下所示的应用程序:

如果它是工作的,这意味着连接到您的X-服务器是可能的,但您可能需要安装一些额外的Python包,如:

sudo apt-get install python3.x-tk

根据您的python版本更改.x

w8rqjzmb

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版本包括。

u59ebvdq

u59ebvdq5#

在Windows 11 22000中,Linux GUI应用程序开箱即用得到正式支持,前提是满足先决条件。无故障、无黑客攻击、无防火墙更改等。
先决条件:

  1. Windows 11内部版本22000或更高版本
    1.已安装的vGPU驱动程序(英特尔/Nvidia/AMD)
    然后运行命令
    wsl-更新
    wsl-关闭
    搞定了!!
    官方资料来源:https://learn.microsoft.com/en-us/windows/wsl/tutorials/gui-apps
khbbv19g

khbbv19g6#

在我的案例中(Windows 10、WSL 2、Ubuntu 20.04和miniconda 3,以及虚拟环境,在虚拟环境中,我使用conda命令安装了所有必需的Python 3.6包,基于Windows的Visual Studio代码带有'Python'和'Remote - WSL'扩展),我在Windows下安装了VcXsrv,并添加了

export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0

同样,在从WSL运行Python代码之前,我们必须启动XLaunch并选择“Disable access control”(我也选择了“Native opengl”)。在项目文件夹中,不要将Python文件命名为matplotlib.py(一些相关的问题报告为here)。

sqyvllje

sqyvllje7#

在两个独立的示例中(wsl 1和wls 2,ubuntu 20.04),当我使用PyQt 5时,我丢失了几个libxcb库(例如libxcb-icccm 4),在试图绘图时没有打印出来。我使用export QT_DEBUG_PLUGINS=1找到了它们,然后简单地安装了它们。基本上是here的步骤。

rfbsl7qr

rfbsl7qr8#

有类似的问题,所以简单地安装支持的GPU驱动程序解决了我的问题。检查this out

cidc1ykv

cidc1ykv9#

我发现最好的方法是在Windows Subsystem for Linux(WSL)上安装Jupyter,方法如下

sudo apt update && upgrade
sudo apt install python3 python3-pip ipython3

现在您可以安装matplotlib了

pip3 install matplotlib

还有Jupyter笔记本

pip3 install jupyter

如果您需要更多信息,请查看此链接Python setup on the Windows subsystem for Linux (WSL)

相关问题