底图上的 Pcolormesh

Pcolormesh on basemap

我有一长串纬度和经度,最终目标是绘制北美地图上每个 latitude/longitude 对的出现次数。例如,我有一个名为 sort_df 的 DataFrame,它看起来像:

longitude  -95  -94  -93  -92
latitude
43           0    4    8    3
44           7    3    0    0 

使用 sort_df.values 和 pmeshcolor,我可以绘制数据。代码如下:

m.Basemap(llcrnrlon = -170, llcrnrlat = 10, urcrnrlon = -50, urcrnrlat = 80)
m.drawcoastlines()
m.drawstates()
ny = sort_df.shape[0]
nx = sort_df.shape[1]
lons, lats = m.makegrid(nx,ny)
x,y = m(lons,lats)
my_cmap = plt.get_cmap('rainbow')
my_cmap.set_under('white')
data = np.array(sort_df.values)
cs = m.pcolormesh(x,y,data,cmap = my_cmap, vmin = 1)
m.colorbar(cs,extend = 'min')
plt.show()

以上代码生成的图如下所示:

问题:lat/lon 网格上应该只有 sort_df 定义的颜色。

问:如何使网格显示在地图上的正确位置?

您在转换经纬度时打印错误。您的数组 latslons 为空。

你的代码的另一个问题是 data 必须具有 [nx-1, ny-1] 的形状才能用 pcolormesh 绘制(它在点之间绘制):

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

m = Basemap(llcrnrlon = -170, llcrnrlat = 10, urcrnrlon = -50, urcrnrlat = 80)
m.drawcoastlines()
m.drawstates()

lon = np.array([-95,  -94,  -93,  -92, -91])
lat = np.array([43, 42, 41])
data = np.array([[0,4,8,3],[7,3,0,0]])
# you have to write just like here to convert coordinates
x,y = m(lon,lat)

my_cmap = plt.get_cmap('rainbow')
my_cmap.set_under('white')
cs = m.pcolormesh(x,y,data,cmap = my_cmap)
m.colorbar(cs, extend = 'min')
plt.show()