当前位置: 首页 > 知识库问答 >
问题:

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

张建树
2023-03-14

因此,在ubuntu for windows(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(),而不是只保存 /mnt/c/Users/james/plots/窗口下的plot-148123456.png,只打开一个浏览器窗口查看图像。

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

有人想出一个体面的方法来做这件事吗?

共有3个答案

别帅
2023-03-14

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

  1. 在Windows下安装VcXsrv(但与Xming的工作原理相同)
  2. 如上所述设置显示[export DISPLAY=localhost:0.0(添加到~/.bashrc以使其永久化)]
  3. 已执行sudo pip卸载matplotlib
  4. 然后是sudo-apt-install-python-matplotlib
  5. 将matplotlibrc更新为后端:GTKAgg(而不是后端:agg
  6. 我还运行了sudo apt get install python-gtk2-dev,但这可能不是必需的

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

拓拔麒
2023-03-14

也可以使用Visual Studio代码在WSL上查看绘图,自2019年6月发布以来,该代码包括一个“绘图查看器”。

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

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

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

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

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

韦绍晖
2023-03-14

好的,我让它工作如下。我在windows上安装了Ubuntu,并安装了anaconda python 3.6。

  1. 下载并安装VcXsrv或Xming(X11 for Windows)从源Forge(请参阅下面的编辑)
  2. sudo apt-get更新
  3. sudo apt-get安装python3.6-tk(根据您使用的python版本,您可能需要安装不同的python*-tk)
  4. pip安装matplotlib(用于matplotlib.但许多其他东西现在也工作)
  5. 导出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()

也许这最好通过Jupyter笔记本或其他东西来实现,但在Ubuntu for Windows on Subsystem for Linux中具有基本的命令行python matplotlib功能也很好,这使得许多其他gui应用也可以工作。

例如,您可以安装xeyes,它会说安装x11应用程序,安装它将安装许多GUI应用程序使用的GTK。但关键是,一旦你的显示设置正确,并且你的x服务器在windows上,那么大多数在本机ubuntu上工作的东西都会在WSL上工作。

编辑2019-09-04:今天我在升级一些库后遇到了“无法获取屏幕资源”的问题。所以我安装了VcXsrv并用它代替了Xming。只需从安装https://sourceforge.net/projects/vcxsrv/然后跑去。exe,选择多个窗口,然后单击“确定”。然后一切顺利。

《为WSL2用户编辑》2020-06-23 WSL2(目前为insider fast ring)具有GPU/docker支持,因此值得升级。然而,它在虚拟机中运行。对于WSL 2,请遵循相同的步骤1-4,然后:

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

注意:一些WSL2用户出现了错误,比如无法连接到显示"172. x. x. x: 0"。如果是这样,请尝试使用以下命令检查DISPLAY中存储的IP地址:echo$DISPLAY。如果显示的IP似乎是错误的(即8.8.8.8或其他不工作的IP地址),您需要将第5点中显示的~/. bashrc中的代码更改为可以获取实例的IP地址的代码。一个用户说这是可行的:导出DISPLAY=$(ifconfig|grep net|awk'{print 2美元}'|head-n 1|awk'{print 0美元": 0"}')。然而,对其他一些人来说,它不起作用。YMMV,但只是找到你的IP和使用如果显示。对于大多数WSL2用户来说,#5中的命令有效。

 类似资料:
  • 主要内容:绘制线性函数图像,绘制正弦波图,subplot(),bar()柱状图,numpy.histogram(),plt()Matplotlib 是 Python 的绘图库,它经常与 NumPy 一起使用,从而提供一种能够代替 Matlab 的方案。不仅如此 Matplotlib 还可以与 PyQt 和 wxPython 等图形工具包一起使用。 Matplotlib 最初由 John D. Hunter 编写,目前,它的最新的版本是 3.3.1,最后一个支持 Python 2 的版本是 2.2

  • 问题内容: 在Matplotlib中,我按如下所示制作虚线网格: 但是,我无法找出如何(甚至可能)在其他图形元素(如条形图)后面绘制网格线。更改添加网格的顺序与添加其他元素的顺序没有区别。 是否有可能使网格线出现在其他所有内容的后面? 问题答案: 据此-http://matplotlib.1069221.n5.nabble.com/axis-elements-and-zorder- td5346.

  • 我有福勒。数据帧: 我是这样画的: 结果图如下所示: 如何修复主要和次要刻度的数量,以便在主要刻度之间至少有10个主要刻度和用户指定的次要刻度的数量?

  • 我使用Liferay portlet bundle 6.2(Tomcat)和Liferay IDE(eclipse)。我创建了两个Liferay插件项目。在第一个portlet(第一个插件portlet)中,我使用portlet首选项保存了一些数据。现在,我将在第一个portlet中显示第二个portlet。我怎么能做到?我找到了下面的代码和这个链接 从其他portlet打开portlet 但是,

  • 主要内容:第一个三维绘图程序,3D散点图,3D等高线图,3D线框图,3D曲面图最初开发的 Matplotlib,仅支持绘制 2d 图形,后来随着版本的不断更新, Matplotlib 在二维绘图的基础上,构建了一部分较为实用的 3D 绘图程序包,比如 ,通过调用该程序包一些接口可以绘制 3D散点图、3D曲面图、3D线框图等 mpl_toolkits 是 Matplotlib 的绘图工具包。 第一个三维绘图程序 下面编写第一个三维绘图程序。 首先创建一个三维绘图区域, plt

  • 1.4.1 简介Matplotlib 可能是 Python 唯一一个最广泛使用的二维图包。它同时提供了从 Python 中可视化数据非常的快速方式以及多种格式的出版质量图片。我们将在交互模式下研究 Matplotlib,包含大多数的常用案例。 1.4.1.1 IPython和matplotlib模式IPython 是强化版交互Python shell,有许多有趣的功能,包括:输入输出的命名、访问s