我需要在一个没有显示器的系统上进行绘图。 如果我使用matplotlib.pyplot.plt天真地绘制,我得到
raise RuntimeError('Invalid DISPLAY variable')
我发现matplotlib.use()
可以在这种情况下使用。
现在我有一个主文件:
**main.py:**
import my_module
....
# do stuff
**my_module.py:**
import matplotlib
matplotlib.use('Agg') # Must be before importing matplotlib.pyplot or pylab!
import matplotlib.pyplot as plt
# do stuff
plt.plot(data)
运行main.py时,我得到:
UserWarning:
This call to matplotlib.use() has no effect because the backend has already
been chosen; matplotlib.use() must be called *before* pylab, matplotlib.pyplot,
or matplotlib.backends is imported for the first time.
但对我而言,我似乎是在导入pyplot
之前调用它。后来我收到了这个运行时错误
File "[OMIT]/python2.7/site-packages/matplotlib /backends/backend_qt5.py", line 144, in _create_qApp
raise RuntimeError('Invalid DISPLAY variable')
RuntimeError: Invalid DISPLAY variable
那么改变matplotlib
后端的正确方法是什么?我不需要显示,但我需要能够使用plt.savefig存储数据
答案 0 :(得分:1)
你需要
import matplotlib
matplotlib.use('Agg')
在新内核上,特别是如果您使用ipython
,在导入matplotlib.pyplot
之前
我很好奇,并且很高兴知道是否有办法清除/刷新ipython内核,而不必重新启动它;到目前为止,我的任务还没有成功。
答案 1 :(得分:1)
最后,我解决了:
**main.py***
import matplotlib
matplotlib.use('Agg') # Must be before importing matplotlib.pyplot or pylab!
import my_module
因为my_module
中的许多子导入无法确定首次导入pyplot的位置。
我也做了:
import my_module
而不是我做得更早。
from my_module import my_func