Skip to main content
 首页 » 编程设计

python之在 basemap 中使用 pcolormesh 填充区域

2024年10月17日33飞鱼

我尝试只对我具有统计显着性结果的区域进行孵化。如何使用 basemap 和 pcolormesh 执行此操作?

plt.figure(figsize=(12,12)) 
 
lons = iris_cube.coord('longitude').points 
lats = iris_cube.coord('latitude').points 
 
m = Basemap(llcrnrlon=lons[0], llcrnrlat=lats[0], urcrnrlon=lons[-1], urcrnrlat=lats[-1], resolution='l') 
 
lon, lat = np.meshgrid(lons, lats) 
 
plt.subplot(111) 
 
cs = m.pcolormesh(lon, lat, significant_data, cmap=cmap, norm=norm, hatch='/') 

请您参考如下方法:

pcolormesh 似乎不支持阴影(参见 https://github.com/matplotlib/matplotlib/issues/3058 )。相反,建议使用 pcolor,它从 this 开始例子看起来像,

import matplotlib.pyplot as plt 
import numpy as np 
 
dx, dy = 0.15, 0.05 
y, x = np.mgrid[slice(-3, 3 + dy, dy), 
                slice(-3, 3 + dx, dx)] 
z = (1 - x / 2. + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2) 
z = z[:-1, :-1] 
zm = np.ma.masked_less(z, 0.3) 
 
cm = plt.pcolormesh(x, y, z) 
plt.pcolor(x, y, zm, hatch='/', alpha=0.) 
plt.colorbar(cm) 
plt.show() 

其中掩码数组用于获取大于 0.3 的 z 值,这些值使用 pcolor 进行阴影化。

为了避免在顶部绘制另一种颜色(这样你只会得到阴影线),我在 pcolor 中将 alpha 设置为 0. 这感觉有点像 hack。另一种方法是使用补丁并分配给你想要的区域。看这个例子Python: Leave Numpy NaN values from matplotlib heatmap and its legend .对于 basemap 等,这可能比仅使用 pcolor 选择区域更棘手。