【问题标题】:Is there any way to ask Basemap not show the plot?有没有办法让 Basemap 不显示情节?
【发布时间】:2014-12-28 00:42:44
【问题描述】:

我正在尝试在 python 上使用 mpl_toolkits.basemap,每次我使用 drawcoastlines() 或任何其他函数进行绘图时,程序都会自动在屏幕上显示绘图。

我的问题是我稍后尝试在外部服务器上使用这些程序,它返回“SystemExit:无法访问 X 显示器,$DISPLAY 设置正确吗?”

当我在其上使用底图功能时,有什么方法可以避免显示该图? 我只是想将它保存到一个文件中,以便稍后我可以在外部读取它。

我的代码是:

from mpl_toolkits.basemap import Basemap
import numpy as np

m = Basemap(projection='robin',lon_0=0)
m.drawcoastlines()

#m.fillcontinents(color='coral',lake_color='aqua')
# draw parallels and meridians.
m.drawparallels(np.arange(-90.,120.,10.))
m.drawmeridians(np.arange(0.,360.,60.))

【问题讨论】:

  • 你用的是什么python shell?我怀疑你正在使用 iPython?当我使用 cPython(即python)shell 运行您的代码时,除非我调用matplotlib.pyplot.show()(或类似的东西),否则它不会显示数字。
  • 是的,我正在使用 ipython,但是当我在计算机控制台中使用 python filename.py 时,图形不会出现,但如果我在服务器控制台上执行此操作,它会返回相同的错误。
  • 您是否尝试过明确关闭交互模式,即plt.ioff()?或者您是否尝试过明确使用非交互式后端,即将matplotlib.rcsetup.non_interactive_bk 中的字符串之一提供给matplotlib.use

标签: python matplotlib plot show matplotlib-basemap


【解决方案1】:

使用Agg 后端,它不需要图形环境:

在脚本的最开始执行此操作:

import matplotlib as mpl
mpl.use('Agg')

另请参阅Generate images without having a window appear 上的常见问题解答。

【讨论】:

    【解决方案2】:

    最简单的方法是关闭matplotlib的交互模式。

    from mpl_toolkits.basemap import Basemap
    import matplotlib.pyplot as plt
    import numpy as np
    
    #NOT SHOW
    plt.ioff()
    
    m = Basemap(projection='robin',lon_0=0)
    m.drawcoastlines()
    
    #m.fillcontinents(color='coral',lake_color='aqua')
    # draw parallels and meridians.
    m.drawparallels(np.arange(-90.,120.,10.))
    m.drawmeridians(np.arange(0.,360.,60.))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-16
      • 2022-01-15
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      相关资源
      最近更新 更多