如何在某些经度和纬度使用m.scatter绘制点

时间:2017-08-05 20:10:23

标签: python matplotlib indexing matplotlib-basemap

假设我有一个名为indices的索引数组,如下所示:

[[1, 34, 56]
 [2, 54, 34]
 [2, 89, 173]
 ...
 [6, 23, 13]]

第一个元素是任意元素。第二和第三个元素分别代表经度和纬度。我怎样才能基本忽略每个索引中的第一个元素,并在索引中获取经度和纬度值,并使用m.scatter将其绘制在地图上?

2 个答案:

答案 0 :(得分:0)

假设您已经从Basemap类中实例化了地图对象。

提取lat值(x列表),长值(y列表),然后你可以调用map.scatter

#pragma omp parallel

答案 1 :(得分:0)

使用numpy数组,您可以将初始数组的第二列和第三列提供给地图,并使用m.scatter绘制结果坐标(如果m是Basemap实例)。

让我提一下,您可能在问题中混合了纬度和经度,我怀疑第二列是纬度,第三列是经度。

import numpy as np

indices =  np.array([[1, 34, 56],
                     [2, 54, 34],
                     [2, 89, 173],
                     [6, 23, 13] ])

m = Basemap(...)
x,y = m(indices[:,2], indices[:,1])
m.scatter(x,y)

完整示例:

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np

m = Basemap(projection='cyl',llcrnrlat=0,urcrnrlat=90,\
            llcrnrlon=0,urcrnrlon=180,resolution='c')

m.drawcoastlines()
m.drawcountries()

parallels = np.arange(0.,81,20.)

m.drawparallels(parallels,labels=[False,True,True,False])
meridians = np.arange(0,360.,45.)
m.drawmeridians(meridians,labels=[True,False,False,True])


indices =  np.array([[1, 34, 56],
                     [2, 54, 34],
                     [2, 89, 173],
                     [6, 23, 13] ])

x,y = m(indices[:,2], indices[:,1])
m.scatter(x,y, zorder=5)

plt.show()

enter image description here