我有以下变量,我想在地图上绘制:
Lons
,经度列表Lats
,纬度列表和Vals
,每个位置的值列表。
为了绘制位置,我做了一个简单的
x,y=Mymap(Lons,Lats)
Mymap.scatter(x,y,marker='o',color='red')
问:如何最好地将Vals
转换为要传递到scatter
的颜色列表(热图),以便每个x,y
对得到与颜色匹配的值?
底图文档相当缺乏,并且没有一个示例符合我的目的。
我可能会遍历整个Lats
,Lons
和Vals
,但考虑到底图的速度有多慢,我宁愿避免这种情况。我已经需要绘制大约800张地图,并且将其增加到大约100万张可能需要数年时间。
答案 0 :(得分:3)
basemap scatter documentation只是引用pyplot.scatter documentation,您可以在其中找到参数 c (强调我的):
c :颜色或颜色序列,可选,默认
c 可以是单色格式字符串,也可以是长度为N的颜色规范序列,或使用cmap映射到颜色的N个数字序列和通过kwargs指定的规范(见下文)。请注意,c不应该是单个数字RGB或RGBA序列,因为它与要进行颜色映射的值数组无法区分。 c可以是2-D阵列,其中行是RGB或RGBA。
因此,如果您只是将vals
传递给c,则matplotlib应将值转换为标准色图或chosen colormap上的颜色。要显示哪个颜色映射到哪个值,您可以使用colorbar。
示例代码:
import matplotlib.pyplot as plt
lons = range(50)
lats = range(25, 75)
vals = range(50,100)
plt.scatter(lons, lats, c=vals, cmap='afmhot')
plt.colorbar()
plt.show()