底图上的 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 定义的颜色。
问:如何使网格显示在地图上的正确位置?
您在转换经纬度时打印错误。您的数组 lats
和 lons
为空。
你的代码的另一个问题是 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()
我有一长串纬度和经度,最终目标是绘制北美地图上每个 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 定义的颜色。
问:如何使网格显示在地图上的正确位置?
您在转换经纬度时打印错误。您的数组 lats
和 lons
为空。
你的代码的另一个问题是 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()