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

2024-10-24 08:51:00
admin
原创
185
摘要:问题描述:因此,似乎在适用于 Windows 的 ubuntu(适用于 Linux 的 Windows 子系统)上,人们建议我们需要使用 Agg 后端并仅保存图像,而不是显示图表。import matplotlib matplotlib.use('Agg') # no UI...

问题描述:

因此,似乎在适用于 Windows 的 ubuntu(适用于 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 传输到某处等。我只希望情节显示在窗口中。

有谁找到一个不错的方法来做到这一点?


解决方案 1:

好的,我按照如下方法让它工作了。我在 Windows 上安装了 Ubuntu,并安装了 anaconda python 3.6。

  1. 从 sourceforge下载并安装VcXsrv或Xming (Windows 的 X11)(请参阅下面的编辑)

  2. sudo apt-get update

  3. sudo apt-get install python3.6-tk(你可能需要python*-tk根据你使用的 Python 版本来安装不同的版本)

  4. pip install matplotlib(适用于 matplotlib。但是许多其他东西现在也可以工作了)

  5. export DISPLAY=localhost:0.0(添加~/.bashrc以使之永久生效。请参阅下面的WSL2

无论如何,经过所有这些,在 wsl 上的 ubuntu 中运行的这段代码可以按原样工作:

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()

结果:
在此处输入图片描述

也许通过 Jupyter 笔记本或其他东西来完成这一点会更好,但在 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 支持,因此值得升级。但是它在虚拟机中运行。对于 WSL 2,请按照相同的步骤 1-4 然后:

  1. 该 IP 不是 localhost。它在 resolv.conf 中,因此运行它(并包含在 ~/.bashrc 中):

 export DISPLAY=`grep -oP "(?<=nameserver ).+" /etc/resolv.conf`:0.0
  1. 现在仔细检查防火墙:Windows 安全 -> 防火墙和网络保护 -> 允许应用程序通过防火墙 -> 确保 VcXsrv 已选中公共和私人。(首次启动 xlaunch 时,您可能会收到允许通过防火墙的提示。这也有效。此外,如果 VcXsrv 不在应用程序列表中,您可以手动添加它,例如从“C:\program files\vcxsrv\vcxsrv.exe”添加)

  2. 启动 VcXsrv 并勾选“禁用访问控制”

注意:一些 WSL2 用户遇到了类似这样的错误couldn't connect to display "172.x.x.x:0"。如果是这样,请尝试使用以下命令检查 DISPLAY 中存储的 IP 地址: echo $DISPLAY。如果显示的 IP 似乎有误(即“8.8.8.8”或其他不起作用的 IP 地址),则需要将~/.bashrc第 5 点中显示的代码更改为可以获取实例 IP 地址的代码。一位用户说这有效:export DISPLAY=$(ifconfig | grep inet | awk '{print $2}' | head -n 1 | awk '{print $0":0"}')。但是对于其他一些用户来说,它不起作用。YMMV,但只需找到您的 IP 并将其用于 DISPLAY。对于大多数 WSL2 用户,#5 中的命令有效。

针对 Windows 11 进行编辑:如果 MS 说服您扔掉旧电脑并购买一台带有 TPM 的电脑,这样您就得到了 Windows 11,您可以免费获得 GUI。我希望他们添加在 Windows 10 上执行此操作的升级路径,因为 Win10 将像 XP 一样持续很长时间,因为 MS 认为您需要最新的电脑,即使 Win11 在旧电脑上运行良好。

解决方案 2:

还可以使用 Visual Studio Code 在 WSL 上查看图表,自 2019 年 6 月发布以来,Visual Studio Code 包含一个“图表查看器”。

在常规 .py 文件中,插入注释字符串#%%会将代码标记为 Jupyter (IPython) 单元,并且代码透视图会显示选项Run Cell。此外,在 Python 文件内单击鼠标右键还会显示以下选项:

在 Python 交互窗口中运行当前文件

从 VS Code 2019 年 6 月版本开始:

2019 年 6 月的更新包括一个全新的绘图查看器,可用于操作任何图像绘图,例如流行的 matplotlib 绘图。

您可以通过双击图表或单击在 Python 交互窗口中将鼠标悬停在图表图像上时显示的“展开图像”按钮来尝试一下:

使用图表查看器,您可以平移、放大/缩小、浏览当前会话中的图表以及将图表导出为 PDF、SVG 或 PNG 格式。

解决方案 3:

对于使用 Ubuntu Focal Fossa 版本的WSL2 ,我在 Windows 上下载并安装了VcXsrv。我使用以下配置:

VcXsrv 配置

我不知道Native OpenGL但禁用访问控制似乎很重要。

现在,您需要DISPLAY在 WSL 中导出环境变量。

我在 中找到了正确的地址/etc/resolv.conf,但结果中找到的地址ifconfig不正确。因此以下命令对我不起作用:

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

ipconfig该 IP 地址也可以在命令上下文中找到CMD.exe。搜索vEthernet (WSL),应该就是那个。

现在,您只需在 WSL 环境中执行 xcalc 即可测试一切是否正常。如果不存在 xcalc,请安装它:

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

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

xcalc 结果

如果它正常工作,则意味着可以连接到你的 X 服务器,但你可能需要为 Python 安装一些额外的包,例如:

sudo apt-get install python3.x-tk

.x根据你的python版本进行更改。

解决方案 4:

在 Windows 11 22000 中,只要满足先决条件,Linux GUI 应用程序即可获得官方支持无需调整、无需黑客攻击、无需更改防火墙等。

先决条件:

  1. Windows 11 Build 22000 或更高版本

  2. 已安装 vGPU 驱动程序 (Intel/Nvidia/AMD)

然后运行命令

wsl --update

wsl --shutdown

完毕 !!

官方来源: https: //learn.microsoft.com/en-us/windows/wsl/tutorials/gui-apps

解决方案 5:

为了使 matplotlib 与Windows 上 Ubuntu 上的 Bash上的 GTKAgg 一起工作,我:

  1. 在 Windows 下安装了 VcXsrv(但使用 Xming 应该可以正常工作)

  2. 按照上述说明设置 DISPLAY [ export DISPLAY=localhost:0.0(添加到 ~/.bashrc 以使其永久生效)]

  3. 执行sudo pip uninstall matplotlib

  4. 其次是sudo apt install python-matplotlib

  5. 更新 matplotlibrc 为backend : GTKAgg(而不是backend : agg

  6. 我也跑了sudo apt-get install python-gtk2-dev,不过这个可能没有必要。

卸载通过 pip 安装的 matplotlib 并通过 apt 重新安装它似乎是必要的,因为 pip 不包含运行 GTK 所需的 C 扩展,但 apt 版本包含。

解决方案 6:

就我的情况而言(Windows 10、WSL2、带有 miniconda3 的 Ubuntu 20.04 和虚拟环境,我在其中使用命令安装了所有必需的 Python 3.6 包conda,基于 Windows 的 Visual Studio Code 带有“Python”和“Remote - WSL”扩展),我在 Windows 下安装了 VcXsrv,并添加了

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

.bashrcUbuntu 中的文件。此外,在从 WSL 运行 Python 代码之前,我们必须启动XLaunch并选择“禁用访问控制”(我还选中了“Native opengl”)。在项目文件夹中,不要将您的 Python 文件命名为(此处matplotlib.py报告了一些相关问题)。

解决方案 7:

在两个不同的实例(wsl1 和 wls2,使用 ubuntu 20.04)中使用 PyQt5 时,我缺少几个 libxcb 库(例如 libxcb-icccm4),尝试绘图时未打印这些库。我过去常常export QT_DEBUG_PLUGINS=1找出哪些库,然后简单地安装它们。基本上步骤如下。

解决方案 8:

有类似的问题,所以只需安装支持的 gpu 驱动程序即可解决我的问题。看看这个!

解决方案 9:

我发现最好的方法是按照以下步骤在 Windows Subsystem for Linux (WSL) 上安装 Jupyter

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

现在你可以安装 matplotlib

pip3 install matplotlib

和 Jupyter Notebook

pip3 install jupyter

如果你需要有关在 Windows 子系统(WSL)上设置 Linux 的 Python 的更多信息,请查看此链接

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   681  
  在项目管理领域,集成产品开发(IPD)流程以其高效、协同的特点,被众多企业视为提升产品竞争力的关键。IPD流程强调跨部门、跨职能的紧密合作,以确保产品从概念到市场各个环节的无缝衔接。然而,实现这一目标并非易事,它需要企业深刻理解并掌握IPD流程中的跨部门协作艺术。本文将深入探讨IPD流程中跨部门协作的三个关键点,旨在为...
IPD项目管理咨询   9  
  掌握IPD流程图:提升团队协作的关键路径在当今快速变化的商业环境中,团队协作的效率与效果直接关系到项目的成功与否。集成产品开发(Integrated Product Development,简称IPD)作为一种先进的研发管理理念,通过跨部门、跨领域的协同工作,能够显著提升产品开发的速度与质量。而IPD流程图,则是这一理...
IPD流程阶段   9  
  IPD流程概述:理解其核心价值与实施背景集成产品开发(Integrated Product Development,简称IPD)是一种先进的产品开发管理理念,它强调跨部门协作、市场导向和快速响应变化的能力。IPD流程不仅关注产品本身的技术创新,更注重将市场、研发、生产、销售等各个环节紧密集成,以实现产品从概念到市场的高...
华为IPD是什么   7  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程以其跨部门协作、高效决策和快速响应市场变化的特点,被众多企业视为提升竞争力的关键。然而,实践IPD流程并非易事,项目管理中的种种错误往往阻碍了其效果的充分发挥。本文旨在深入探讨如何在实施IPD流程时避免这些常见错误,...
IPD框架   7  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用