Python 表示等高线图上重要点的过度面片

Python 表示等高线图上重要点的过度面片,python,matplotlib,statistics,contour,anova,Python,Matplotlib,Statistics,Contour,Anova,我试图在等高线图上添加阴影(如点、散列等)。这种图案填充只能表示具有统计意义的轮廓,或具有特定标准的轮廓。就像《自然》一文中的下图(第二和第三个情节) 以下代码显示了NOAA数据中的降水图,可在下载 import numpy as np import sys import netCDF4 as nc import matplotlib.pyplot as plt import matplotlib.mlab as m import mpl_toolkits.basemap as bm imp

我试图在等高线图上添加阴影(如点、散列等)。这种图案填充只能表示具有统计意义的轮廓,或具有特定标准的轮廓。就像《自然》一文中的下图(第二和第三个情节)

以下代码显示了NOAA数据中的降水图,可在下载

import numpy as np
import sys 
import netCDF4 as nc
import matplotlib.pyplot as plt
import matplotlib.mlab as m 
import mpl_toolkits.basemap as bm
import os
sys.path.insert(0, '../');import py4met as sm;reload(sm)

#- Reading data for a timeslice, latitude, and longitude:
diri_output="./"
diri="./"
tmp_file = nc.Dataset(diri+"precip.mon.mean.nc","r")
print(tmp_file.variables)
p_pre   = tmp_file.variables['precip']
lat     = tmp_file.variables['lat'][:]
lon     = tmp_file.variables['lon'][:]
time    = tmp_file.variables['time']
tmp_file.close


lat1=np.min(lat)
lat2=np.max(lat)
lon1=np.min(lon)
lon2=np.max(lon)

[lonall, latall] = np.meshgrid(lon[:], lat[:])
plt.figure(num=None, figsize=(8+4, 6+4), dpi=80, facecolor='w', edgecolor='k')    
mapproj = bm.Basemap(projection='cyl',llcrnrlat=lat1, llcrnrlon=lon1,urcrnrlat=lat2, urcrnrlon=lon2,resolution='l')
mapproj.drawcoastlines()
mapproj.drawmapboundary(fill_color='white')
mapproj.drawcountries()
x, y = mapproj(lonall, latall)
plt.contourf(x,y,p_pre[240,:,:],cmap=plt.cm.GnBu)
plt.colorbar(orientation='horizontal',pad=0.05,shrink=0.6)
plt.title("title")
xx,yy=np.where(p_pre[240,:,:] >= 20)
sig=np.copy(p_pre[0,:,:])
sig[:,:]=1
sig[xx,yy]=0
#plt.contourf(x,y,sig,hatches=['.'])
plt.show()  
我想填充20 mm以上的所有轮廓,所以我使用了上面的命令

轮廓曲线图(x,y,sig,hatches=['.]]

但它不起作用(它在地图上随处可见,而不仅仅是具有特定标准的等高线),因此我对它进行了评论。 任何想法。

查看此演示,了解如何将图案填充与
contourf
一起使用。与您的问题特别相关的是:(1)有一个关键字
level
contourf
用于确定哪些值被着色和/或填充的边界;(2)空字符串
“”
可用于缺少填充

因此,不要使用您注释掉的
plt.tourtf
行,而是尝试一下

levels = [p_pre[240,:,:].min(), 20, p_pre[240,:,:].max()]
plt.contourf(x, y, p_pre[240,:,:], levels=levels, hatches=["", "."], alpha=0)
我很难从链接到的数据中重新创建绘图,因此我生成了一些随机数据,以使用上面描述的相同原理制作下图


非常感谢,它对我很有用。现在,我知道使用的图案填充数是使用的线数-1,因此我可以使用不同的图案填充来填充不同的轮廓级别。再次感谢。我很高兴matplotlib有这样的功能,我在MatLab中搜索了how do patching,但没有找到这样的内置功能,而是在MatLab文件交换中找到了以下贡献。