对于这个问题,我有一个简单的解决方案,只使用pcolormesh
而不使用pcolor
:绘制颜色网格,然后对整个绘图进行填充,然后再次绘制原始网格,这次是通过掩盖统计上显着的单元格,以便唯一可见的阴影是那些在重要的细胞。或者,您可以在每个单元格上放置一个标记(看起来也不错),而不是对整个图形进行孵化。
(我使用cartopy
而不是basemap
,但这无关紧要。)
第 1 步:正常绘制字段 ( z
),使用pcolormesh
.
mesh = plt.pcolormesh(x,y,z)
其中 x/y 可以是 lons/lats。
第 2 步:孵化整个地块。为此,请使用fill_between
:
hatch = plt.fill_between([xmin,xmax],y1,y2,hatch='///////',color="none",edgecolor='black')
检查fill_between
设置xmin
、xmax
和y1
的详细信息y2
。您只需在绘图边界之外定义两条水平线,并在其间的区域上画阴影线。使用更多或更少/
的 s 来设置孵化密度。
要调整影线厚度,请使用以下行:
import matplotlib as mpl
mpl.rcParams['hatch.linewidth'] = 0.3
作为孵化所有内容的替代方法,您可以将所有 xy 点(或 lon-lat 对)绘制为标记。一个简单的解决方案是放一个点(x 看起来也不错)。
hatch = plt.plot(x,y,'.',color='black',markersize=1.5)
以上其中一项将是您“孵化”的基础。这是它在第 2 步之后的样子:

第 3 步:在这两个之上,再次用 绘制您的颜色网格pcolormesh
,这一次屏蔽包含统计显着值的单元格。这样,“无关紧要”细胞上的标记就会再次变得不可见,而重要的标记仍然可见。
假设您有一个大小相同的数组,其中包含每个单元格 ( ) 的t 统计量,您可以使用's模块t_z
屏蔽重要值。numpy
ma
z_masked = numpy.ma.masked_where(t_z >= your_threshold, z)
然后,使用蒙版数组绘制颜色网格。
mesh_masked = plt.pcolormesh(x,y,z_masked)
用于zorder
确保图层的顺序正确。这是它在第 3 步之后的样子:
