mpl_toolkits底图散点图错误
mpl_toolkits basemap scatter plot error
我使用 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) 和 basemap(1.0.7)。
我参考了下面的link,发帖前还是没能解决问题:
https://github.com/matplotlib/matplotlib/issues/7808
这里有两个问题:
- 有贬值警告
- 点数不会显示。
两个问题完全不相关。
1。贬值预警
折旧警告不是错误。它只是告诉我们一些命令或函数不应该被使用(不再)。在这种情况下,折旧的命令是
底图在内部使用的来自 matplotlib 的命令。所以它实际上不在我们的控制之下,而是驻留在底图代码中。从 matplotlib 版本 2.x 开始,此命令 (ax.hold
) 已被弃用。
所以我们对此无能为力,直到有一个新版本的底图出来,它不会再使用它了。从 this issue 可以看出,至少有人在做这件事。
但这不是错误,目前唯一的缺点是烦人的警告消息。底图的功能丝毫没有变差。
2。在图上显示点
要在底图上绘制点,需要使用底图实例转换坐标。 IE。在底图 m = Basemap(...)
上绘制点 lon = 80
、lat=34
,在使用 m.plot(x,y, marker="o")
绘制之前,需要使用 x,y = m([lon],[lat])
对其进行转换。请注意,为了绘制点,您需要向 plot
.
提供 marker
参数
这是一个完整的例子。
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()
我使用 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) 和 basemap(1.0.7)。
我参考了下面的link,发帖前还是没能解决问题: https://github.com/matplotlib/matplotlib/issues/7808
这里有两个问题:
- 有贬值警告
- 点数不会显示。
两个问题完全不相关。
1。贬值预警
折旧警告不是错误。它只是告诉我们一些命令或函数不应该被使用(不再)。在这种情况下,折旧的命令是
底图在内部使用的来自 matplotlib 的命令。所以它实际上不在我们的控制之下,而是驻留在底图代码中。从 matplotlib 版本 2.x 开始,此命令 (ax.hold
) 已被弃用。
所以我们对此无能为力,直到有一个新版本的底图出来,它不会再使用它了。从 this issue 可以看出,至少有人在做这件事。
但这不是错误,目前唯一的缺点是烦人的警告消息。底图的功能丝毫没有变差。
2。在图上显示点
要在底图上绘制点,需要使用底图实例转换坐标。 IE。在底图 m = Basemap(...)
上绘制点 lon = 80
、lat=34
,在使用 m.plot(x,y, marker="o")
绘制之前,需要使用 x,y = m([lon],[lat])
对其进行转换。请注意,为了绘制点,您需要向 plot
.
marker
参数
这是一个完整的例子。
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()