【问题标题】:How to plot points using m.scatter at certain longitudes and latitudes如何使用 m.scatter 在某些经度和纬度上绘制点
【发布时间】:2018-01-13 12:35:26
【问题描述】:

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

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

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

【问题讨论】:

标签: python matplotlib indexing matplotlib-basemap


【解决方案1】:

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

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

>>> from operator import itemgetter

>>> indices = [[1, 34, 56], [2, 54, 34], [2, 89, 173], [6, 23, 13]]

>>> x = list (map (itemgetter (1), indices))

>>> y = list (map (itemgetter (2), indices))

>>> map.scatter (*map (x, y))

【讨论】:

  • 感谢您的回复。但是,map.scatter (map (x, y)) 行出现错误。它说TypeError: with_transform() takes at least 3 arguments (2 given)
  • 啊抱歉,我将调用 map(x, y) 更改为 *map(x, y),我需要解压缩结果,因为 map.scatter 需要 2 个位置参数
  • 嗯,同一行中似乎弹出了另一个错误。 ValueError: setting an array element with a sequence. 不太清楚这是怎么回事。
【解决方案2】:

使用 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多