mpl_toolkits底图散点图错误

时间:2017-03-06 05:46:28

标签: python matplotlib gis matplotlib-basemap

我使用mpl_toolkits.basemap.Basemap()函数成功绘制了一个多边形。之后,我尝试将一些(x,y)点作为散点图添加到底图上。它给出了一个Deprecationwarning消息,并没有绘制散点图(即使仍然绘制了早期的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)和底图(1.0.7)。

在发布此处之前,我提到了以下链接,但仍然无法解决问题: https://github.com/matplotlib/matplotlib/issues/7808

1 个答案:

答案 0 :(得分:4)

这里有两个问题:

  1. 有折旧警告
  2. 积分不会出现。
  3. 这两个问题完全无关。

    1。折旧警告

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

    2。在情节

    上显示点

    要在底图上绘制点,需要使用Basemap实例转换坐标。即在底图图lon = 80上绘制点lat=34m = Basemap(...)时,需要使用x,y = m([lon],[lat])对其进行转换,然后才能使用m.plot(x,y, marker="o")进行绘制。请注意,为了绘制点,您需要向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()
    

    enter image description here