我有这样一个需求:在我的raspberry pi 3中运行着一个爬虫程序,根据爬到的数据,使用matplotlib自动生成统计图(图片格式),然后发送到我的邮箱.
但是我ssh远程登录树莓派,运行如下脚本生成test.png图片时
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
t = np.arange(0.0, 10.0, 0.001)
s = np.sin(2*np.pi*t)
plt.plot(t, s)
plt.xlabel('time (s)')
plt.ylabel('voltage (mV)')
plt.title('About as simple as it gets, folks')
plt.grid(True)
plt.savefig("test.png")
出现如下错误:
(process:2818): Gtk-WARNING **: Locale not supported by C library.
Using the fallback 'C' locale.
Unable to init server: Could not connect: Connection refused
Unable to init server: Could not connect: Connection refused
(simple_plot.py:2818): Gdk-CRITICAL **: gdk_cursor_new_for_display: assertion 'GDK_IS_DISPLAY (display)' failed
Traceback (most recent call last):
File "simple_plot.py", line 1, in <module>
import matplotlib.pyplot as plt
File "/usr/local/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 114, in <module>
_backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/__init__.py", line 32, in pylab_setup
globals(),locals(),[backend_name],0)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_gtk3agg.py", line 11, in <module>
from . import backend_gtk3
File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_gtk3.py", line 58, in <module>
cursors.MOVE : Gdk.Cursor.new(Gdk.CursorType.FLEUR),
TypeError: constructor returned NULL
而我在树莓派gui系统中运行上述脚本是可以生成test.png文件的。
所以上述错误只是出现在无gui的情况下,google了多个结果都没有解决方法。
使用python绘制统计图库(类似matplotlib)可以在无gui的情况下根据所给数据生成统计图(png,jpeg等等)。
或者有别的方法实现我上述需求。
リーリー
の理由
matplotlib.use("Agg")
の前にimport matplotlib.pyplot as plt
が置かれている理由を説明する以下の文章を公式サイトで見つけました。 @sPeng のおかげで、matplotlib.use("Pdf")
を使用することでもこのエラーを解決できます。