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

时间:2017-04-13 16:14:56

标签: python linux matplotlib windows-subsystem-for-linux

所以在ubuntu for windows(windows子系统for 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图像等等。我只想让图表显示在窗口中。

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

6 个答案:

答案 0 :(得分:39)

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

  1. sourceforge
  2. 下载并安装Xming(适用于Windows的X Window服务器)
  3. sudo apt-get update
  4. sudo apt-get install python3.6-tk(您可能需要在您正在使用的python版本上安装不同的python*-tk展开)
  5. pip install matplotlib(对于matplotlib。但其他许多东西现在也有效)
  6. export DISPLAY=localhost:0.0(添加到~/.bashrc以永久保留)
  7. 无论如何,在这之后,在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()
    

    结果: enter image description here

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

答案 1 :(得分: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,但这可能没必要。
  7. Uninstalling the pip-installed matplotlib and reinstalling it via apt似乎是必要的,因为pip不包含运行GTK所需的C扩展,但是apt版本可以。

答案 2 :(得分:3)

在WSL上,也可以使用Visual Studio Code在WSL上查看该图,该代码自2019年6月发行以来包括"Plot Viewer"

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

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

摘自VS Code 2019年6月版:

2019年6月的更新包括可以使用的全新Plot Viewer 来处理任何图像图,例如流行的matplotlib图。

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

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

答案 3 :(得分:0)

我发现最好的方法是按照以下说明在Linux的Windows子系统(WSL)上安装Jupyter:

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

现在您可以安装matplotlib

pip3 install matplotlib

还有Jupyter Notebook

pip3 install jupyter

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

答案 4 :(得分:0)

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

VcXsrv configuration

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

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

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

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

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

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

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

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

xcalc result

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

sudo apt-get install python3.x-tk

根据您的python版本更改.x

答案 5 :(得分:0)

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

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

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