【问题标题】:matplotlib plot creation very slow on a headless servermatplotlib 绘图在无头服务器上的创建速度非常慢
【发布时间】:2014-08-26 20:34:42
【问题描述】:

我在我的家庭服务器上运行 Ubuntu 14.04(服务器版),我安装了 Python 2.7.6 和 matplotlib 1.3.1,使用 TkAgg 作为后端。我通过 ssh -Y 连接到它。

我遇到的问题是绘图对象的创建速度非常慢。比如:

import matplotlib.pyplot as plt
x=[0,1,2,3,4]
y=[0,1,4,9,16]
plt.plot(x,y)

此代码需要大约 10 秒才能运行,而它应该只需要几分之一秒。请注意,它甚至没有显示情节,如果我添加 plt.show() 它在时间上没有显着差异。在 python 解释器或文件中运行代码也没有区别。一旦我等待足够长的时间,情节就会很好地显示在我的本地屏幕上。同样绘制 5 个点或 50 个点似乎没有任何区别。

有什么想法吗?

【问题讨论】:

  • 我的猜测是大部分时间都花在了导入 matplotlib 及其依赖项上。
  • 如果我在 python 解释器中逐行运行它,导入命令不会花费时间,它只是 plt.plot(x,y) 命令几乎占用了整个十秒。在我的本地机器上也没有那么滞后,那为什么它会存在于远程机器上呢?
  • TkAgg 是一个图形化的交互式后端。但是您的服务器是无头的。尝试不同的后端。
  • 你有推荐的后端尝试吗?
  • 您的选择是:GTK GTKAgg GTKCairo GTK3Agg GTK3Cairo CocoaAgg MacOSX Qt4Agg TkAgg WX WXAgg Agg Cairo GDK PS PDF SVG。如果您只保存为 PNG 文件,我会选择 Agg。除此之外,我会根据情况使用 PDF 或 SVG。

标签: python matplotlib headless


【解决方案1】:

为了以@Paul H 的回答为基础,此代码将绘图输出为 SVG 图形,然后使用外部 feh 实用程序显示它。

设置后端很重要——查看What is a Backend了解更多信息。

来源

import matplotlib
# see http://matplotlib.org/faq/usage_faq.html#what-is-a-backend
matplotlib.use('Svg')

import os
import matplotlib.pyplot as plt

x=[0,1,2,3,4]
y=[0,1,4,9,16]
plt.plot(x,y)
plt.savefig('plot.svg')
os.system('feh plot.svg')       # or "eog" for Gnome

【讨论】:

  • 但它已经在创建情节并通过我的 ssh 隧道转发它,只是花费的时间比预期的要长。
  • 您可以尝试调整 ssh 参数。或者,直接绘制到终端——快! stackoverflow.com/questions/20295646/…
  • 让我觉得它不是 ssh 连接的原因是命令 plt.plot(x,y) 需要 10 秒,但没有进行任何 x11 转发,而 plt.show() 几乎是即时的,即使它正在转发通过 ssh 连接的图形。
  • 您需要将后端从TkAgg 更改。添加import matplotlib; matplotlib.use('Agg')。确保在导入 pyplot 之前执行
  • 这确实使plt.plot(x,y) 工作得更快,但现在plt.show() 不显示情节。
猜你喜欢
  • 1970-01-01
  • 2017-06-25
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 2012-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多