Python 无头服务器上matplotlib绘图创建速度非常慢

Python 无头服务器上matplotlib绘图创建速度非常慢,python,matplotlib,headless,Python,Matplotlib,Headless,我在我的家庭服务器上运行Ubuntu14.04(服务器版),我安装了Python 2.7.6,matplotlib 1.3.1使用TkAgg作为后端。我通过ssh-Y连接到它 我遇到的问题是plot对象的创建非常缓慢。例如: import matplotlib.pyplot as plt x=[0,1,2,3,4] y=[0,1,4,9,16] plt.plot(x,y) 这段代码运行大约需要10秒,而这段代码应该只需要几分之一秒。请注意,它甚至没有显示绘图,如果我添加plt.show()它在

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

我遇到的问题是plot对象的创建非常缓慢。例如:

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分似乎没有任何区别


有什么想法吗?

要基于@Paul H的答案,此代码将绘图输出为SVG图形,然后使用外部
feh
实用程序显示它

设置后端非常重要--请查看更多信息

来源
我猜大部分时间都花在导入matplotlib及其依赖项上。如果我在python解释器中逐行运行import命令,则import命令不需要花费时间,只需要plt.plot(x,y)命令,它几乎占据了整个十秒钟。在我的本地机器上也没有这种延迟,那么为什么它会存在于远程机器上呢?TkAgg是一种图形化的交互式后端。但是你的服务器是无头的。尝试不同的后端。您是否有建议尝试哪个后端?您的选择是:GTK GTKAgg GTKCairo GTK3Agg GTK3Cairo CocoaAgg MacOSX Qt4Agg TkAgg WX WXAgg Agg CAROO GDK PS PDF SVG。如果你只保存到PNG文件,我会选择Agg。除此之外,我根据具体情况使用PDF或SVG。但是它已经在创建绘图并通过ssh隧道转发,所花的时间比应该的要长。您可以尝试调整ssh参数。或者,直接打印到终端——快!我之所以认为它不是ssh连接,是因为命令
plt.plot(x,y)
需要10秒,但没有执行任何x11转发,而
plt.show()
几乎是瞬时的,即使它通过ssh连接转发图形。您需要将后端从
TkAgg
更改。添加
导入matplotlib;matplotlib.use('Agg')
。确保在导入
pyplot
之前执行它,这确实使
plt.plot(x,y)
工作得更快,但现在
plt.show()
不显示绘图。
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