下垫面类型对于WRF的地表过程十分重要,而在我们研究WRF的地表过程之前,需要对输入的土地利用类型进行一些绘制,以便后续的修改。
土地利用分类图的特点主要在于色标的设置,而在Github中,已有人根据WRF的不同土地利用数据设置了色标与标签,详见:landuse_colormao
在这里,我将以北极地区为例,绘制北极地区的WRF下垫面数据,我使用的MODIS21这类。
首先加载包,并进行函数定义:

## Custom Terrain ColorMaps by Brian
import os
import matplotlib.ticker as mticker
import netCDF4 as nc
import matplotlib.path as mpath
import cmaps
import matplotlib.pyplot as plt###引入库包
import numpy as np
import numpy.ma as ma
import matplotlib as mpl
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from netCDF4 import Dataset
try:import pykdtree.kdtree_IS_PYKDTREE = True
except ImportError:import scipy.spatial_IS_PYKDTREE = False
from wrf import getvar, interplevel, vertcross,vinterp, ALL_TIMES, CoordPair, xy_to_ll, ll_to_xy, to_np, get_cartopy, latlon_coords, cartopy_xlim, cartopy_ylim
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
import pandas as pd
import datetime as dt
import time
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
import numpy as np
# Four Different Land Use Categories:
#   LU_MODIS20
#   LU_MODIS21     includes lake category
#   LU_USGS
#   LU_NLCD## Land Use Colormap
## ! represents categories not in my Utah domain
def LU_MODIS21(): #C = np.array([[0,.4,0],      #  1 Evergreen Needleleaf Forest[0,.4,.2],      #! 2 Evergreen Broadleaf Forest    [.2,.8,.2],     #  3 Deciduous Needleleaf Forest[.2,.8,.4],     #  4 Deciduous Broadleaf Forest[.2,.6,.2],     #  5 Mixed Forests[.3,.7,0],      #  6 Closed Shrublands[.82,.41,.12],     #  7 Open Shurblands[.74,.71,.41],       #  8 Woody Savannas[1,.84,.0],     #  9 Savannas[0,1,0],        #  10 Grasslands[0,1,1],        #! 11 Permanant Wetlands[1,1,0],      #  12 Croplands[1,0,0],     #  13 Urban and Built-up[.7,.9,.3],      #! 14 Cropland/Natual Vegation Mosaic[1,1,1],        #! 15 Snow and Ice[.914,.914,.7], #  16 Barren or Sparsely Vegetated[.5,.7,1],        #  17 Water (like oceans)[.86,.08,.23],        #  18 Wooded Tundra[.97,.5,.31],        #! 19 Mixed Tundra[.91,.59,.48],     #! 20 Barren Tundra[0,0,.88]])      #! 21 Lakecm = ListedColormap(C)labels = ['Evergreen Needleleaf Forest','Evergreen Broadleaf Forest','Deciduous Needleleaf Forest','Deciduous Broadleaf Forest','Mixed Forests','Closed Shrublands','Open Shrublands','Woody Savannas','Savannas','Grasslands','Permanent Wetlands','Croplands','Urban and Built-Up','Cropland/Natural Vegetation Mosaic','Snow and Ice','Barren or Sparsely Vegetated','Water','Wooded Tundra','Mixed Tundra','Barren Tundra','Lake']    return cm, labels

LU_MODIS21函数定义了绘制的土地类型、标签与对应色标,我们使用时,直接引用LU_MODIS21()即可返回。
那么有一个小问题,就是当绘制范围内的数据并不包含所有土地利用类型,我们应该怎么做?
其实很简单,只要将你拥有的土地类型数据提取出来,将原本函数中的labels和C切片,重新定义色标再绘制即可。
以下是实例:
首先读取数据:

geo=Dataset('F:\wrfout\geo_em.d01.nc')
landuse=getvar(geo,'LU_INDEX')

获取当前模拟域内的所有土地类型值,并简单构造对应索引:

landclass=np.unique(to_np(landuse))
landidx=np.unique(to_np(landuse))-1
landidx=landidx.tolist()

重新构造色标标签:

 cm,labels = LU_MODIS21()  C = np.array([[0,.4,0],      #  1 Evergreen Needleleaf Forest[0,.4,.2],      #! 2 Evergreen Broadleaf Forest    [.2,.8,.2],     #  3 Deciduous Needleleaf Forest[.2,.8,.4],     #  4 Deciduous Broadleaf Forest[.2,.6,.2],     #  5 Mixed Forests[.3,.7,0],      #  6 Closed Shrublands[.82,.41,.12],     #  7 Open Shurblands[.74,.71,.41],       #  8 Woody Savannas[1,.84,.0],     #  9 Savannas[0,1,0],        #  10 Grasslands[0,1,1],        #! 11 Permanant Wetlands[1,1,0],      #  12 Croplands[1,0,0],     #  13 Urban and Built-up[.7,.9,.3],      #! 14 Cropland/Natual Vegation Mosaic[1,1,1],        #! 15 Snow and Ice[.914,.914,.7], #  16 Barren or Sparsely Vegetated[.5,.7,1],        #  17 Water (like oceans)[.86,.08,.23],        #  18 Wooded Tundra[.97,.5,.31],        #! 19 Mixed Tundra[.91,.59,.48],     #! 20 Barren Tundra[0,0,.88]])      #! 21 Lakec=C.take(landidx,0)labels=[labels[int(landidx[i])] for i in range(len(landidx))]cm=ListedColormap(c)

开始绘图,这里使用了本人自行封装的arcticplot函数,具体可参见本人之前的博客:cartopy绘制北极

fig,f1_ax1,x,y,masked_v=arcticplot(z_masked_overlap,lat2d,lon2d,to_np(landuse))font = {'family' : 'serif','color'  : 'darkred','weight' : 'normal','size'   : 16,}c7=f1_ax1.pcolormesh(x, y, to_np(landuse), cmap=cm)
cbar=fig.colorbar(c7,shrink=1)#设置图标
cbar.set_ticks(landclass)
cbar.ax.set_yticklabels(labels)#cbar.ax.set_xticklabels(labels) #If using a horizontal colorbar orientation
cbar.ax.invert_yaxis()
cbar.ax.tick_params(labelsize=15)
plt.show()

绘图如下:

WRF后处理:python cartopy绘制土地利用/土地分类图//python绘制WRF下垫面类型(以北极为例)相关推荐

  1. python画聚类图_python绘制的聚类图Python的局部变量和全局变量使用解惑

    局部变量:在函数中定义的变量,作用域是当前函数,只对当前函数起作用. 全局变量:在代码开头定义的变量,作用域是整段代码,对整段代码起作用. 先看下面的实例, 最后给结论.name = 'PythonT ...

  2. python画50个图-python 实现在一张图中绘制一个小的子图方法

    有时候为了直观展现图的信息,可以在大图中添加小子图的方式进行数据分析,如下图所示: 具体的代码如下:该图连接了数据库,当然重要的不是数据展示,而是添加子图的方法. import matplotlib. ...

  3. python画简便的图-python 实现在一张图中绘制一个小的子图方法

    有时候为了直观展现图的信息,可以在大图中添加小子图的方式进行数据分析,如下图所示: 具体的代码如下:该图连接了数据库,当然重要的不是数据展示,而是添加子图的方法. import matplotlib. ...

  4. python一张图-python 实现在一张图中绘制一个小的子图方法

    有时候为了直观展现图的信息,可以在大图中添加小子图的方式进行数据分析,如下图所示: 具体的代码如下:该图连接了数据库,当然重要的不是数据展示,而是添加子图的方法. import matplotlib. ...

  5. python绘制3维图-Python 画出来六维图

    来自维基百科 我们的大脑通常最多能感知三维空间,超过三维就很难想象了.尽管是三维,理解起来也很费劲,所以大多数情况下都使用二维平面. 不过,我们仍然可以绘制出多维空间,今天就来用 Python 的 p ...

  6. python绘制3维图-Python 绘制 3 维以上的高维图

    实用技巧. 我们的大脑通常最多能感知三维空间,超过三维就很难想象了.尽管是三维,理解起来也很费劲,所以大多数情况下都使用二维平面.不过,我们仍然可以绘制出多维空间,今天就来用 Python 的 plo ...

  7. python绘制三维曲面图-python中Matplotlib实现绘制3D图的示例代码

    Matplotlib 也可以绘制 3D 图像,与二维图像不同的是,绘制三维图像主要通过 mplot3d 模块实现.但是,使用 Matplotlib 绘制三维图像实际上是在二维画布上展示,所以一般绘制三 ...

  8. python slice函数画高维图_Python 绘制 3 维以上的高维图

    实用技巧. 我们的大脑通常最多能感知三维空间,超过三维就很难想象了.尽管是三维,理解起来也很费劲,所以大多数情况下都使用二维平面.不过,我们仍然可以绘制出多维空间,今天就来用 Python 的 plo ...

  9. python画折线图代码实现_python如何绘制分布折线图 python绘制分布折线图代码示例...

    python如何绘制分布折线图?本篇文章小编给大家分享一下python绘制分布折线图代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 用Pyth ...

最新文章

  1. 基于SSM实现的奶茶店会员管理系统
  2. 阿里巴巴java规范检查_阿里巴巴Java开发规范
  3. gcc编译器与g++编译器的区别
  4. 阿里P8架构师谈:数据库、JVM、缓存、SQL等性能调优方法和原则
  5. 吃鱼可以不挑刺了?华中农业大学发现鳊鱼肌间刺表达基因,可培育“无刺鱼”...
  6. jQuery LigerUI 使用教程入门篇
  7. JavaScript中的对象学习笔记(属性操作)
  8. java mysql结果集_Java JDBC结果集的处理
  9. 一学就会之ado.net(一)
  10. 企业无线网演进 2.4GHz或被5GHz频段取代
  11. QT信号(signal)和槽(slot)问题
  12. 百面机器学习——svm基尼系数寻找最优划分
  13. Ubuntu 16.04 使用 Libcoap
  14. java编程思想笔记(一)——面向对象导论
  15. 三菱伺服驱动器示例_MR-J4W3-B连接示例图/三菱伺服电机的组合
  16. java upnp 端口映射_端口映射与UPnP
  17. 计算机网络-自顶向下方法笔记-滑动窗口协议
  18. 移动开发技术(Android)——实验1 Android开发环境搭建及简单程序实现
  19. 西伯利亚曾经叫鲜卑利亚
  20. python——and和or逻辑运算符用法详解

热门文章

  1. 2020年来了,关于人工智能你必须了解的这些事……
  2. 接口测试--转自测试百晓生微信公众号
  3. 三大队列cxq,entrylist,waitset 个人理解分析
  4. 门禁.dat文件用什么打开_什么是DAT文件(以及如何打开一个文件)?
  5. html字体怎么是什么属性,你不知道的CSS字体属性
  6. 【论文】时空预测模型Spatio-Temporal Graph Convolutional Networks
  7. 火影忍者疾风传游戏计算机丢失,火影忍者疾风传游戏pc版
  8. 你知道吗?没有硅胶消泡剂,避孕套可能都不安全了
  9. 类脑神经界面研究有新进展-深圳先进院李骁健与华中科技大学罗志强合作研究将适合脑机接口应用的ECoG型传感器...
  10. 80老翁谈人生(324):关于网络安全的迷思