Python无头Matplotlib / Pyplot

10 浏览
0 Comments

Python无头Matplotlib / Pyplot

我正试图通过自动生成的图形文件使我的数据分析和报告更加图形化,以减少眼部刺痛感。为此,我一直在使用matplotlib/pyplot/pylab进行尝试。效果非常好,但是当我尝试在无头服务器上运行它时...

tkinter.TclError: no display name and no $DISPLAY environment variable

对于这个应用程序,我只使用PyLab,但是经过一番搜索后,我在pylab导入之前添加了以下内容:

import matplotlib
matplotlib.use("Agg")

这应该已经改变了后端,但没有效果。

你有什么主意我做错了什么吗?

远程机器具有X转发功能,但由于这个应用程序不需要显示任何内容,所以我认为通常的ssh -X方法过于繁琐。

示例:毒辣的欺骗

相同机器上的示例工作代码

import matplotlib
matplotlib.use("Agg")
import numpy as np
import pylab as pl
xvals=np.arange(100)
yvals=np.cumsum(np.random.random(100))
yvals[-10:]=0
yvals=np.log(yvals)
pl.close()
pl.plot(xvals,yvals)
pl.xlabel("X")
pl.ylabel("Y")
pl.title("Title")
pl.savefig("testgraph.png")

不起作用的真实代码

import matplotlib
matplotlib.use("Agg")
import numpy as np
import pylab as pl
import utility as util
import os
... 非图形部分...
def graph_p(self):
    pl.close()
    channels=range(self.p.shape[0])
    for line in range(self.p.shape[1]):
        yvals=np.ma.masked_invalid(map(util.watts_to_dbmhz,self.p[:,line]))
        pl.plot(channels,yvals) #错误发生在这里
    pl.xlabel("Subchannel Index")
    pl.ylabel("Power (dbmhz)")
    pl.title("Plot of per-tone power assignments for %d lines"%self.p.shape[1])
    pl.savefig(self.dest+self.scenario+'-power.png')

没有其他地方使用pyplot。

0