我试图在等高线图上添加阴影线(如点,散列,......)。这种影线可能只代表统计上显着的轮廓,或具有某些标准的轮廓。如下图自然文章(第二和第三图)http://www.nature.com/articles/srep16853/figures/3。
以下代码显示NOAA数据available的降水量图,供下载。
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毫米以上的所有轮廓,所以我使用了上面的命令
plt.contourf(X,Y,SIG,舱口= [ ''])
但它不起作用(它在地图上的任何地方都有点,而不仅仅是具有特定标准的轮廓),因此我对它进行了评论。 任何想法。
答案 0 :(得分:1)
有关如何在contourf
中使用填充的演示,请参阅此matplotlib example page。与您的问题特别相关的是(1)有一个关键字level
,contourf
为了确定哪些值变为彩色和/或阴影的界限而采取的是{2}空字符串""
{1}}可以用于没有舱口。
因此,请注释掉plt.contourf
行,而不是levels = [p_pre[240,:,:].min(), 20, p_pre[240,:,:].max()]
plt.contourf(x, y, p_pre[240,:,:], levels=levels, hatches=["", "."], alpha=0)
。
QAbstractButton
我无法根据您链接的数据重新创建绘图,因此我生成了一些随机数据,使用上面描述的相同原理制作下面的图像。