meteva

提供气象产品检验相关python程序


时空均值检验

<p>[TOC]</p> <pre><code class="language-python">%matplotlib inline %load_ext autoreload %autoreload 2 import meteva.base as meb import meteva.method as mem import meteva.product as mpd import numpy as np import datetime import copy import matplotlib.pyplot as plt import time import pandas as pd import math import matplotlib as mpl</code></pre> <pre><code class="language-python">grid0 =meb.grid([110,121,0.05],[33,41,0.05]) china = meb.read_griddata_from_micaps4(r&amp;quot;H:\task\develop\java\metshop\resource\中国陆地.txt&amp;quot;,grid0) masker = china.values.squeeze() time_ob = datetime.datetime(2022,6,27,8,0) path_ob = meb.get_path(r&amp;quot;H:\test_data\input\mpd\time_space_compare\CLDAS\2022062708.000.nc&amp;quot;,time_ob) grd_ob = meb.read_griddata_from_nc(path_ob,grid=grid0) </code></pre> <pre><code class="language-python">grd_list = [] #dir1 = r&amp;quot;O:\data\grid\ECMWF_HR\APCP\YYYYMMDD\YYMMDDHH.TTT.nc&amp;quot; dir1 = r&amp;quot;H:\test_data\input\mpd\time_space_compare\ECMWF\YYMMDDHH.TTT.nc&amp;quot; for dh in range(24,241,12): time_fo = time_ob - datetime.timedelta(hours=dh) path1 = meb.get_path(dir1,time_fo,dh-24) grd1 = meb.read_griddata_from_nc(path1,grid = grid0,time = time_fo,dtime = dh-24,data_name=&amp;quot;ECMWF&amp;quot;) grd_list.append(grd1) path2 = meb.get_path(dir1,time_fo,dh) grd2 = meb.read_griddata_from_nc(path2,grid = grid0,time = time_fo,dtime= dh,data_name=&amp;quot;ECMWF&amp;quot;) grd_list.append(grd2) grd_ecmwf = meb.combine_griddata(grd_list,how=&amp;quot;outer&amp;quot;) grd_ecmwf_24 = meb.change(grd_ecmwf,used_coords=[&amp;quot;dtime&amp;quot;],delta = 24)</code></pre> <pre><code class="language-python">grd_list = [] #dir1 = r&amp;quot;O:\data\grid\GRAPES_GFS\APCP\YYYYMMDD\YYMMDDHH.TTT.nc&amp;quot; dir1 = r&amp;quot;H:\test_data\input\mpd\time_space_compare\CMA_GFS\YYMMDDHH.TTT.nc&amp;quot; for dh in range(24,241,12): time_fo = time_ob - datetime.timedelta(hours=dh) path1 = meb.get_path(dir1,time_fo,dh-24) grd1 = meb.read_griddata_from_nc(path1,grid = grid0,time = time_fo,dtime = dh-24,data_name=&amp;quot;CMA_GFS&amp;quot;) grd_list.append(grd1) path2 = meb.get_path(dir1,time_fo,dh) grd2 = meb.read_griddata_from_nc(path2,grid = grid0,time = time_fo,dtime= dh,data_name=&amp;quot;CMA_GFS&amp;quot;) grd_list.append(grd2) grd_cma = meb.combine_griddata(grd_list,how=&amp;quot;outer&amp;quot;) grd_cma_24 = meb.change(grd_cma,used_coords=[&amp;quot;dtime&amp;quot;],delta = 24)</code></pre> <pre><code class="language-python">grd_24 = meb.combine_griddata([grd_cma_24,grd_ecmwf_24],how=&amp;quot;outer&amp;quot;)</code></pre> <h1>经度-时间统计对比</h1> <p><strong>mesh_lon_time(grd_ob,grd_fo,method = np.mean,grid = None,interval = None,cmap = &quot;rainbow&quot;,clevs = None,ncol = None,annot =None,dpi = 300,spasify_xticks = None,sup_fontsize = 10,title =&quot;&quot;,width = None,height = None,save_path = None,show = None):</strong><br /> 将网格要素场沿着经线做平均(或其它统计)处理后,在观测同不同起报时间的预报绘制在同一张热力图上进行对比。</p> <h1>时间-纬度统计对比</h1> <p><strong>mesh_time_lat(grd_ob,grd_fo,method = np.mean,grid = None,interval = None,cmap = &quot;rainbow&quot;,clevs = None,ncol = None,annot =None,dpi = 300,spasify_xticks = None,sup_fontsize = 10,title =&quot;&quot;,width = None,height = None,save_path = None,show = None)</strong> 将网格要素场沿着纬线做平均(或其它统计)处理后,在观测同不同起报时间的预报绘制在同一张热力图上进行对比。</p> <table> <thead> <tr> <th style="text-align: left;">参数</th> <th style="text-align: left;">说明(上述两个函数参数意义和用法完全相同)</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;grd_ob&lt;/font&gt;</strong></td> <td style="text-align: left;">实况数据,grid_data形式,暂时只支持包含单个时刻的平面场</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;grd_fo&lt;/font&gt;</strong></td> <td style="text-align: left;">预报数据,grid_data形式,可包含多个模式、多个起报时间和多个预报时效的预报</td> </tr> <tr> <td style="text-align: left;"><strong>method</strong></td> <td style="text-align: left;">统计算法,默认np.mean,即取平均,也可以是np.sum,np.max等</td> </tr> <tr> <td style="text-align: left;"><strong>grid</strong></td> <td style="text-align: left;">需要统计的范围,当检验的范围和输入的数据网格范围不一致时,可以通过grid参数设置经纬度范围</td> </tr> <tr> <td style="text-align: left;"><strong>show</strong></td> <td style="text-align: left;">是否在屏幕显示图片,如果save_path 和save_dir 为都None时,程序内部会自动将show设置True</td> </tr> <tr> <td style="text-align: left;"><strong>interval</strong></td> <td style="text-align: left;">当interval不为None时,对网格计算各经线(纬线)统计之后,会再沿着纬线(经线)方向做间距为interval的平均处理</td> </tr> <tr> <td style="text-align: left;"><strong>cmap</strong></td> <td style="text-align: left;">各子图填色方案,取为缺省值是由程序自动设置。如果需要指定, 当只有1个子图或者每个子图采用相同的填色方案,则该参数matplotlibde 的cm对象,或者代表cm对象的字符串,或者代表meteva集成的配色方案的字符串,具体可参考<a href="https://www.showdoc.com.cn/meteva?page_id=3975606661430140">meb.def_cmap_clevs函数功能</a></td> </tr> <tr> <td style="text-align: left;"><strong>clevs</strong></td> <td style="text-align: left;">各子图填色等级,取为默认值None时由程序自动设置。如果需要指定,当有多个子图,且每个子图需要设置不同等级时,该参数为2层嵌套的列表,否则该参数为1层的列表</td> </tr> <tr> <td style="text-align: left;"><strong>ncol</strong></td> <td style="text-align: left;">如果存在多个子图,子图的列数将为ncol,缺省情况下回自动布局</td> </tr> <tr> <td style="text-align: left;"><strong>annot</strong></td> <td style="text-align: left;">当annot为正整数时会给每个格点添加数字标注,annot为数字标注的小数点后有效位数</td> </tr> <tr> <td style="text-align: left;"><strong>dpi</strong></td> <td style="text-align: left;">绘图的dpi参数,用法同matplotlib中dpi参数</td> </tr> <tr> <td style="text-align: left;"><strong>title</strong></td> <td style="text-align: left;">各子图的标题,如果只有一个子图,title可以设为字符串, 缺省时无标题,当有多个子图时,title应该设置为字符串的列表,分别对应每个子图的标题,缺省时则自动根据name_list_dict中的维度和坐标信息来生成标题</td> </tr> <tr> <td style="text-align: left;"><strong>spasify_xticks</strong></td> <td style="text-align: left;">x轴坐标刻度的稀疏倍数,缺省时会自动进行稀疏化,当spasify_xticks = 1 时, 所有的刻度值都要显示, spasify_xticks = 2时,则间隔1个刻度进行显示,依次类推</td> </tr> <tr> <td style="text-align: left;"><strong>sup_fontsize</strong></td> <td style="text-align: left;">图片标题的字体大小,其它字体将根据标题字体大小自动设置,其中坐标轴字体大小 = sup_fontsize <em> 0.9, 坐标刻度的字体大小 = sup_fontsize </em> 0.8</td> </tr> <tr> <td style="text-align: left;"><strong>width</strong></td> <td style="text-align: left;">图片的宽度,缺省时程序自动设置</td> </tr> <tr> <td style="text-align: left;"><strong>height</strong></td> <td style="text-align: left;">图片的高度,缺省时程序自动设置</td> </tr> <tr> <td style="text-align: left;"><strong>save_path</strong></td> <td style="text-align: left;">指定图片输出的文件路径</td> </tr> <tr> <td style="text-align: left;"><strong>show</strong></td> <td style="text-align: left;">是否已plt.show()形式在屏幕显示图片</td> </tr> <tr> <td style="text-align: left;">&lt;font face=&quot;黑体&quot; color=blue size=5&gt;return&lt;/font&gt;</td> <td style="text-align: left;">无返回值</td> </tr> </tbody> </table> <p><strong>调用示例:</strong></p> <pre><code class="language-python">mpd.mesh_lon_time(grd_ob,grd_24,interval=0.5,smooth = 2,cmap = &amp;quot;rain_3h&amp;quot;,ncol = 2,clevs = np.arange(0,91,3))</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=1d53d94ef17a236d77639524046edca5&amp;amp;file=file.png" alt="" /></p> <p>在统计的图形结果中,用红色方框把属于观测的部分加以强度显示,下面的示例类似。</p> <pre><code class="language-python">mpd.mesh_time_lat(grd_ob,grd_24,interval=0.5,smooth = 2,cmap = &amp;quot;rain_3h&amp;quot;,ncol = 2,clevs = np.arange(0,91,3))</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=6b00683ed71c085a77fd561e6575622e&amp;amp;file=file.png" alt="" /></p> <pre><code class="language-python"></code></pre>

页面列表

ITEM_HTML