在Ubuntu中显示matplotlib图(适用于Linux的Windows子系统)

Awo*_*ing 35 python linux matplotlib windows-subsystem-for-linux

因此,似乎在ubuntu for windows(Linux子系统的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
Run Code Online (Sandbox Code Playgroud)

我们怎么能把它带到plt.show()实际向我们展示图像的地方?我当前的选择是覆盖plot.show(),而只是在Windows中的/ mnt/c/Users/james/plots /下保存一个plot-148123456.png,只需打开一个浏览器窗口查看图像.

我想我可以托管该文件夹并使用浏览器.

我的目标是能够运行像上面代码这样的简单示例,而无需将代码更改为ftp图像等等.我只是希望绘图显示在窗口中.

有没有人想出一个体面的方法呢?

Awo*_*ing 54

好的,所以我按照以下方式开展工作.我在Windows上安装了Ubuntu,安装了anaconda python 3.6.

  1. sourceforge下载并安装Xming(适用于Windows的X Window服务器)
  2. sudo apt-get update
  3. sudo apt-get install python3.6-tk(您可能必须python*-tk在您正在使用的python版本上安装不同的depnding)
  4. pip install matplotlib (对于matplotlib.但现在很多其他的东西也可以工作)
  5. export DISPLAY=localhost:0.0(添加到~/.bashrc永久)

无论如何,毕竟在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()
Run Code Online (Sandbox Code Playgroud)

结果: 在此输入图像描述

也许通过Jupyter笔记本或其他东西可以做得更好,但是在Linux的子系统上使用Ubuntu for Windows中的基本命令行python matplotlib功能很好,这使得许多其他gui应用程序也可以工作.

  • 我刚安装的Xming窗户上的侧&`sudo易于得到在Ubuntu上安装侧的python-tk` - 然后我设置好显示之后去. (5认同)
  • 郑重声明:“export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0”也适用于 Ubuntu-WSL2。虽然 `plt.plot(x,y)` 在 Windows 上立即显示绘图,但 WSL 作为客户端连接到 VcXsrv,**但绘图只会在 `plt.show()`** 上显示! (4认同)
  • `DISPLAY=localhost:0.0`,如上面的答案。 (2认同)
  • 按照建议的步骤,它对我有用。唯一的区别是现在您可以安装 python3-tk (而不是指定 python3 的特定版本)。多谢! (2认同)

Chr*_*ert 11

还可以使用 Visual Studio Code 在 WSL 上查看绘图,从 2019 年 6 月发布开始,它包括一个“绘图查看器”

在常规 .py 文件中,插入注释字符串#%%将代码标记为 Jupyter (IPython) 单元格,并且代码镜头显示Run Cell. 此外,在 Python 文件中右键单击包括以下选项:

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

从 VS Code 2019 年 6 月发布:

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

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

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

  • `#%%` +1,对于wsl来说,这是一种非常简单的绘制图片的方法。 (3认同)

sno*_*ogg 6

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

VcXsrv配置

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

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

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

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

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

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

sudo apt-get update && sudo apt-get install x11-apps
Run Code Online (Sandbox Code Playgroud)

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

计算结果

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

sudo apt-get install python3.x-tk
Run Code Online (Sandbox Code Playgroud)

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


mar*_*ano 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版本却包含。