草庐IT

Python headless MatplotLib/Pyplot

coder 2023-05-24 原文

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

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 没有其他内容。

最佳答案

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

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

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

关于Python headless MatplotLib/Pyplot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5503601/

有关Python headless MatplotLib/Pyplot的更多相关文章

  1. python - 让 Pyplot 窗口显示为 Windows 7 中的最顶层窗口 - 2

    我在Spyder环境中使用Anaconda和Python2.7。绘制pyplot时,窗口隐藏在我所有其他打开的窗口后面,而不是出现在前面。我怎样才能让图形出现在所有其他打开的窗口前面?matplotlib后端是:Qt4Agg 最佳答案 (Spyderdevhere)唯一具有此功能的后端是TkAgg。@valentin在他/她的回答中发布的代码在使用该后端时应该可以工作。所有其他后端都错过了这种可能性。很长一段时间以来,这一直是Matplotlib的一个已知限制,如本Githubissue中所示。.

  2. python - 如何使用 "matplotlib.pyplot"在不同的窗口中绘制我的图形? - 2

    我有4个数组,p1&p2和v1&v2相似,我喜欢在2个不同的窗口上绘制它们。我使用以下代码将它们全部绘制在1个窗口中,但我喜欢像上面所说的那样将它们分开:p1=real_stock_price_volume[:,0]v1=real_stock_price_volume[:,1]p2=predicted_stock_price_volume[:,0]v2=predicted_stock_price_volume[:,1]plt.plot(p1,color='red',label='p1')plt.plot(v1,color='brown',label='v1')plt.plot(p2,c

  3. python - Matplotlib pyplot show() 一旦关闭就不起作用 - 2

    我有一个这样的循环#!/usr/bin/envpythonimportmatplotlib.pyplotaspforiinxrange(N):#Createmy_imagehere#Displaythisimagep.figure()p.imshow(my_image)p.show()p.close()这在i=0时工作正常。为了让程序继续,我需要关闭由pyplot创建的新图形。对于所有其他循环迭代(i>0),不会创建另一个新图形,不会显示绘图,程序会继续运行。为什么关闭图形使pyplot无法打开新图形(如MATLAB)?我期望的行为是:执行停止在p.show()当我关闭图形时,执行继续

  4. python - 如何在 matplotlib 中为 pyplot.show() 设置超时? - 2

    我正在使用python的matplotlib来绘制图形。我想画一个带有超时的图形,比如3秒,然后窗口将关闭以在代码上移动。我知道pyplot.show()会创建一个无限超时的阻塞窗口;pyplot.show(block=False)或pyplot.draw()将使窗口非阻塞。但我想要的是让代码阻塞几秒钟。我想到了一个想法,我可能会使用事件处理程序或其他东西,但仍然不太清楚如何解决这个问题。有什么简单优雅的解决方案吗?假设我的代码如下:绘图.py:importmatplotlib.pyplotasplt#Drawsomethingplt.show()#Blockornot?

  5. python - 导入 pyplot,运行时错误 : Cannot dlopen tkinter module file - 2

    我使用pyenv在windowsbash中安装pypy,然后使用pip安装matplotlib,但是当导入pyplot时,我得到了一个运行时错误In[1]:importmatplotlib.pyplotasplt---------------------------------------------------------------------------RuntimeErrorTraceback(mostrecentcalllast)in()---->1importmatplotlib.pyplotasplt/home/zjshao/.pyenv/versions/pypy-5.

  6. python - Pyplot 等高线图 - clabel 间距 - 2

    我在使用matplotlib/pyplot/basemap时遇到了问题。我在map上绘制等高线(气压)。我使用clabel来显示轮廓线的值。但问题是:值和轮廓线之间的填充太多了。我找到了参数“inline_spacing”,我已将其设置为零。但是仍然有很多可用空间。有什么想法吗?Python代码:importmatplotlibmatplotlib.use('Agg')importmatplotlib.pyplotaspltfrommpl_toolkits.basemapimportBasemapimportpygribfilename="file.grib2"grbs=pygrib.

  7. python - 代码终止后保持 matplotlib/pyplot 窗口打开 - 2

    我希望python绘制一个绘图,在不阻塞控制流的情况下显示它,并在代码退出后让绘图保持打开状态。这可能吗?这个和相关主题存在于许多其他线程中(见下文),但我无法让情节既保持开放又非阻塞。例如,如果我在pyplot.show()之前使用pyplot.ion(),或者如果我使用pyplot.show(block=False)然后当代码终止时情节关闭。使用python或ipython都是如此。如果重要的话,我在OSX10.8.2(MountainLion)上运行,运行python27和ipython27相关讨论:pylabmatplotlib"show"waitsuntilwindowclo

  8. python - Matplotlib.pyplot : force exponential axis label notation - 2

    这个问题在这里已经有了答案:Changexaxesscaleinmatplotlib(4个答案)关闭8年前。在matplotlib.pyplot创建的绘图中,如何强制轴标签以指数表示法显示?对于

  9. python - 如何在 pylab/pyplot 中裁剪极坐标图 - 2

    我有一个极坐标图,其中theta从0到pi/2变化,所以整个图位于第一个四分之一,如下所示:%pylabinlineX=linspace(0,pi/2)polar(X,cos(6*X)**2)(来源:schurov.com)是否可以通过pyplot或matplotlib裁剪极坐标图,以便只显示四分之一(因此不会浪费空间)?我想要这样的图片(但缩放比例合适):(来源:schurov.com)我想通过pyplot来完成,因为我有几张这样的图像,想将它们排列成一个大图(带子图)。可能吗? 最佳答案 我建议不要使用polar绘图,而是设置坐

  10. python - 导入 matplotlib 和 matplotlib.pyplot 有什么区别? - 2

    我对python还是很陌生,想知道x.y语句是否意味着y是x的子模块?如果是这样,命令不是:importmatplotlib.pyplotasplt只导入这个特定的子模块,没有别的?我必须这样做才能访问hist函数。这对调用importmatplotlibasplt时正常导入的模块有何影响?能否把matplotlib中的所有模块都放在plt名下?我知道这个问题与whatisthedifferencebetweenimportingpythonsub-modulesfromNumPy,matplotlibpackages有关但是这个问题的答案并没有告诉我是否导入了matplotlib中的

随机推荐