【问题标题】:mpl_toolkits basemap scatter plot errormpl_toolkits 底图散点图错误
【发布时间】:2017-07-25 21:29:21
【问题描述】:

我使用 mpl_toolkits.basemap.Basemap() 函数成功绘制了一个多边形。之后,我尝试将一些 (x,y) 点作为散点图添加到底图上。它给出了一条弃用警告消息,并且不绘制散点图(即使仍然绘制了早期的 shapefile)。以下是代码块(请理解已经加载了必要的库):

fname = "../DATA/GIS/IL_State_ln"
m = Basemap(llcrnrlon=-92.,llcrnrlat=36.8,urcrnrlon=-86.5,urcrnrlat=43.,
             resolution='i', projection='tmerc', lat_0 = 36.5, lon_0 = -91.8)
m.readshapefile(fname, 'mygeom')

x = [-90., -91.2, -88.]
y = [38., 37.7, 42.]
m.plot(x,y)

plt.show()

弃用警告消息是:

/home/serenewiz/miniconda3/envs/onering/lib/python3.5/site-packages/mpl_toolkits/basemap/__init__.py:3260: MatplotlibDeprecationWarning: The ishold function was deprecated in version 2.0.
  b = ax.ishold()
/home/serenewiz/miniconda3/envs/onering/lib/python3.5/site-packages/mpl_toolkits/basemap/__init__.py:3269: MatplotlibDeprecationWarning: axes.hold is deprecated.
    See the API Changes document (http://matplotlib.org/api/api_changes.html)
    for more details.
  ax.hold(b)

仅供参考,版本为:Python(3.5)、matplotlib (2.0.0) 和 basemap(1.0.7)。

我在发帖之前参考了以下链接,但我仍然无法解决问题: https://github.com/matplotlib/matplotlib/issues/7808

【问题讨论】:

    标签: python matplotlib gis matplotlib-basemap


    【解决方案1】:

    这里有两个问题:

    1. 存在折旧警告
    2. 积分不会显示。

    这两个问题完全不相关。

    1。折旧警告

    折旧警告不是错误。它只是告诉我们某些命令或函数不应该被使用(不再)。在这种情况下,折旧的命令是 底图在内部使用的 matplotlib 命令。所以它实际上不在我们的控制之下,而是驻留在底图代码中。此命令 (ax.hold) 自 matplotlib 版本 2.x 起已弃用。 所以我们对此无能为力,直到有一个新版本的底图出来,它不再使用它了。从this issue 看到,至少似乎有人在研究它。
    但由于这不是错误,目前唯一的缺点是烦人的警告信息。底图的功能丝毫没有退化。

    2。在图上显示点

    要在底图上绘制点,需要使用 Basemap 实例转换坐标。 IE。在底图图m = Basemap(...) 上绘制点lon = 80lat=34,在使用m.plot(x,y, marker="o") 绘制之前,需要使用x,y = m([lon],[lat]) 对其进行转换。请注意,为了绘制点,您需要将 marker 参数提供给 plot

    这是一个完整的例子。

    from mpl_toolkits.basemap import Basemap
    import matplotlib.pyplot as plt
    
    m = Basemap(llcrnrlon=-92.,llcrnrlat=36.8,urcrnrlon=-86.5,urcrnrlat=43.,
                 resolution='i', projection='tmerc', lat_0 = 36.5, lon_0 = -91.8)
    
    m.drawcoastlines()
    m.drawcounties(zorder=0, color='gray')
    
    x,y = m([-90., -91.2, -88.],[38., 37.7, 42.])
    
    m.plot(x,y, marker="o")
    
    plt.show()
    

    【讨论】:

    • 谢谢。 @ImportanceOfBeingErnest,您的解释很有帮助。您提出的解决方案非常有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    相关资源
    最近更新 更多