在底图中使用pcolormesh的填充区域

时间:2017-01-15 18:41:45

标签: python matplotlib matplotlib-basemap significance hatchstyle

我试图只孵化我有统计学意义的区域。我怎样才能使用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='/')

1 个答案:

答案 0 :(得分:2)

似乎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()

其中使用掩码数组来获取z的值大于0.3,并使用pcolor加阴影。

enter image description here

为了避免在顶部绘制另一种颜色(所以你只得到阴影)我在pcolor中将alpha设置为0.感觉有点像黑客。另一种方法是使用补丁并分配到您想要的区域。请参阅此示例Python: Leave Numpy NaN values from matplotlib heatmap and its legend。对于底图等,这可能比选择pcolor的区域更为棘手。