【发布时间】:2016-02-19 10:41:19
【问题描述】:
我正在使用 Matplotlib 和底图在地图上绘制网格数据。我正在使用此代码将 pcolormesh 方法与散点图进行比较:
fig = plt.figure()
ax = fig.add_axes([0.1,0.1,0.8,0.8])
# setup of basemap ('lcc' = lambert conformal conic).
# use major and minor sphere radii from WGS84 ellipsoid.
m = Basemap(width=12000000,height=9000000,
rsphere=(6378137.00,6356752.3142),\
resolution='l',area_thresh=1000.,projection='lcc',\
lat_1=projection['standard_parallel'][0],\
lat_2=projection['standard_parallel'][1],\
lat_0=projection['latitude_of_projection_origin'],\
lon_0=projection['longitude_of_central_meridian'])
x, y = m(lons, lats) # compute map proj coordinates.
# draw coastlines and political boundaries.
m.drawcoastlines()
m.drawcountries()
m.drawstates()
# draw parallels and meridians.
# label on left and bottom of map.
parallels = np.arange(0.,80,20.)
m.drawparallels(parallels,labels=[1,0,0,1])
meridians = np.arange(10.,360.,30.)
m.drawmeridians(meridians,labels=[1,0,0,1])
#cs = m.pcolormesh(x,y,data)
cs = m.pcolormesh(x,y,data,shading='flat',cmap=plt.cm.rainbow)
cb = m.colorbar(cs,"right", size="5%", pad='2%', ticks=V[0::5])
m.scatter(x*data,y*data, marker='.', s=100, c='g')
ax.set_title(title)
plt.show(block=False)
我得到的情节是这样的:
请注意,经纬度坐标对应于每个网格框的左下角。这是设计使然还是错误?我会按设计思考,但我看到的所有示例 (http://matplotlib.org/basemap/users/examples.html) 都没有提及它。我想要以 lon lat 坐标点为中心的网格单元,它们本身位于不规则网格上(lons、lats 变量是二维数组)。我如何做到这一点?
注意。这里的 data 变量只是一个掩码,对应于 one 或 nans。
谢谢。
已编辑:根据 Tom 的建议,如果我尝试使用 contourf,我会得到以下图像(放大到与第一张图像大致相同)。
它仍然不能很好地处理边缘,因为它无法在有限值和 nan 之间绘制曲面,因此有很多缺失点。我希望渲染每个网格单元。似乎 imshow 可以做我想做的事,但这似乎只适用于常规(线性)网格。
【问题讨论】:
标签: dictionary matplotlib matplotlib-basemap