【问题标题】:Python Headless MatplotLib / Pyplot [duplicate]Python无头MatplotLib / Pyplot [重复]
【发布时间】:2011-07-27 02:12:53
【问题描述】:

我正在尝试使用自动生成的图形文件来减少我的数据分析和报告眼睛刺伤和更多图形,为此我一直在使用 matplotlib/pyplot/pylab。效果很好,但是当我尝试在无头服务器上运行它时......

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

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

import matplotlib
matplotlib.use("Agg")

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

任何想法我做错了什么?

远程机器确实具有 X 转发功能,但由于此应用程序不需要显示任何内容,我相信通常的 ssh -X hack 是矫枉过正的。

示例:恶魔般的欺骗

示例工作同一台机器上的代码

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

... non graph stuff...
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) #Error says it occurs here
    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 没有其他内容。

【问题讨论】:

  • 确实很奇怪。你能发布一个最小(非)工作的例子吗? Agg 后端不需要 X。
  • 更新了最小的例子,但现在我不能打破它!

标签: python matplotlib


【解决方案1】:

你描述的一切听起来都是正确的。运行时会发生什么:

import matplotlib
matplotlib.use('Agg')
import pylab
pylab.plot([1,2], [3,4], linestyle='-')
pylab.savefig('foo.png')

在我的环境中它会产生这个(我缩小了它):

【讨论】:

    【解决方案2】:

    原来是一个实用程序文件(不是我的!)正在拉入pylab 以获取其他内容。将matplotlib 后端选择移至初始页面。

    【讨论】:

    • 这似乎可以解决问题。 任何其他可能导入pylab的东西之前导入matplotlib。
    【解决方案3】:

    尝试导入matplotlib 并设置Agg 后端导入numpy:

    import matplotlib
    matplotlib.use("Agg")
    

    【讨论】:

    • 行为没有变化。即使 mpl 是第一个导入和“使用”的东西
    猜你喜欢
    • 2017-12-12
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多