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> <p>本模块的函数族旨在针对单点的预报提供不同时间起报的预报同实况的快速对比,这样可以快速定位最近一段时间内预报的表现,也可用于分析为了一段时间内预报的稳定性情况,不同模式的差异。</p> <p><strong><font face="黑体" color=blue size = 5> 测试数据集</font>:</strong><br />  <strong>数据范围</strong> : 54511站<br />  <strong>观测数据</strong> : 2m温度、2m露点温度、总云量、能见度、10米风,2020年4月6日08时至12日20时<br />  <strong>预报数据</strong> : ecmwf和grapes的的逐12小时更新的预报。前72小时为逐3小时更新,之后为逐6小时更新</p> <pre><code class="language-python">ob_t2m = pd.read_hdf(r"H:\test_data\input\mpd\time_compair\ob_t2m.h5","df") #读取观测温度 ec_t2m = pd.read_hdf(r"H:\test_data\input\mpd\time_compair\ec_t2m.h5","df") #读取ec预报的温度 grapes_t2m = pd.read_hdf(r"H:\test_data\input\mpd\time_compair\grapes_t2m.h5","df") #读取grapes的温度预报 t2m_all = meb.combine_on_obTime_id(ob_t2m,[ec_t2m,grapes_t2m]) #合并观测和预报 print(t2m_all) #合并预报观测数据的参数need_match_ob为缺省值False,因此ob列中的有999999的行未删除</code></pre> <pre><code> level time dtime id lon lat ob \ 0 0.0 2020-04-06 08:00:00 3 54511 116.47 39.8 17.6 1 0.0 2020-04-06 20:00:00 3 54511 116.47 39.8 14.3 2 0.0 2020-04-07 08:00:00 3 54511 116.47 39.8 15.3 3 0.0 2020-04-07 20:00:00 3 54511 116.47 39.8 10.1 4 0.0 2020-04-08 08:00:00 3 54511 116.47 39.8 12.9 .. ... ... ... ... ... ... ... 499 0.0 2020-04-12 20:00:00 120 54511 116.47 39.8 999999.0 500 0.0 2020-04-12 20:00:00 126 54511 116.47 39.8 999999.0 501 0.0 2020-04-12 20:00:00 132 54511 116.47 39.8 999999.0 502 0.0 2020-04-12 20:00:00 138 54511 116.47 39.8 999999.0 503 0.0 2020-04-12 20:00:00 144 54511 116.47 39.8 999999.0 ecmwf grapes 0 18.221457 16.606279 1 14.048767 8.633360 2 15.223828 15.212000 3 7.849127 3.241836 4 14.544885 13.691760 .. ... ... 499 15.234428 10.128280 500 10.313973 6.945240 501 13.560747 11.449520 502 22.793781 20.494160 503 17.820063 14.692560 [504 rows x 9 columns]</code></pre> <h1>多模式多时效对比图(线条)</h1> <p><strong>time_list_line(sta_ob_and_fos0,s = None,save_dir = None,save_path = None,show = False,dpi = 300,title = &quot;观测和不同起报时间预报对比图&quot;,sup_fontsize = 10,width = None,height = None):</strong><br /> 将不同时刻起报的预报和实况在同一张图中进行显示对比,便于及时发现问题,以曲线的方式叠加显示。</p> <h1>多模式多时效误差图(线条)</h1> <p><strong>time_list_line_error(sta_ob_and_fos0,s = None,save_dir = None,show = False,dpi = 300,title = &quot;不同起报时间预报误差图&quot;,sup_fontsize = 10,width = None,height = 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>sta_ob_and_fos</strong></td> <td style="text-align: left;">实况和预报合并对齐后的数据,形式为站点数据格式如上述例子中的t2m_all</td> </tr> <tr> <td style="text-align: left;"><strong>s</strong></td> <td style="text-align: left;">用于选择数据样本的字典参数,具体的参数说明可参见meb.sele_by_dict中的<a href="https://www.showdoc.cc/meteva?page_id=3975604785954540"><font face="黑体" color=red size=5>s</font></a>参数</td> </tr> <tr> <td style="text-align: left;"><strong>save_dir</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;">指定图片输出的文件路径,当批量生成多张图片时save_path为包含所有图片的输出路径的列表</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>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;">图片标题的确定分为1、全自动,2、半自动,3手动三种方式。<br>1、全自动:不设置title参数,系统自动采用title的缺省值+自动补齐的其它信息来确定每一幅图的标题;<br> 2、半自动:title 为字符串类型,系统会采用title + 自动补齐的其它信息来确定每一幅图的标题;<br>3、手动:title为一个包含多个字符串的列表,且列表的长度必须和要绘制的图的数量一致,每一幅图会依次采用列表中的字符串作为标题</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;"><font face="黑体" color=blue size=3>return</font></td> <td style="text-align: left;">无返回值</td> </tr> </tbody> </table> <p><strong>调用示例:</strong></p> <pre><code class="language-python">#通过最近,可以通过参数s来提取指定站点,绘制单点的检验图,如果不提取指定站点时,默认对数据中每个站点单独画一张图。 mpd.time_list_line(t2m_all,save_path = "H:/a.png",show = True)</code></pre> <pre><code>图片已保存至H:/a.png</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/a998d779fad9eb7b9262e9f3a7e9cdb1?showdoc=.jpg" alt="" /></p> <p><strong>图形样式说明:</strong><br /> 1、图中横坐标为观测的时间<br /> 2、纵向包含多个子图,每个子图代表一个起报时刻的结果,起报时间位于坐标轴左侧,子图纵坐标为要素值的大小<br /> 3、在观测数据还不存在的区域,观测的曲线为空,有观测和无观测图像之间以一条竖线分割。 在无观测的部分可以对比不同预报的差异<br /> 4、图片标题中会自动标记站号,如果数据中存在多个站点,则每个站分别输出一张图 </p> <p><strong>示例结果解读:</strong>通过上述图片,我们可以非常轻易的发现对于11日的夜间,ecmwf和grapes模式都明显比实况低,而且不同时刻起报的预报都呈现这样的特征,这就提示我们此处可能存在一个和特定时间有关联(背后可能是因为和特定天气系统有关联)的系统误差。提示我们此处的误差需要进一步的分析。</p> <pre><code class="language-python">mpd.time_list_line_error(t2m_all) #通过直接绘制不同模式不同时效的预报的误差,可以更加直接展示误差情况</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/cc752504d6ea52484720ecdb18fbfbc4?showdoc=.jpg" alt="" /></p> <p><strong>图形样式说明:</strong><br /> 1、误差图中横坐标为观测的时间<br /> 2、纵向包含多个子图,每个子图代表一个起报时刻的结果,起报时间位于坐标轴左侧,子图纵坐标为要素值的大小<br /> 3、误差仅显示有观测数据的部分。<br /> 4、图片标题中会自动标记站号,如果数据中存在多个站点,则每个站分别输出一张图 </p> <h1>多时效预报误差和稳定性对比图(填色)</h1> <p>def time_list_mesh(sta_ob_and_fos0,s = None,save_dir = None,save_path = None, clev = None,cmap = None,plot_error = True,max_error = None,cmap_error= None,show = False,xtimetype = &quot;mid&quot;,dpi = 300,annot =True,title = &quot;预报准确性和稳定性对比图&quot;,sup_fontsize = 10,width = None,height = None)</p> <h1>多时效预报误差对比图(填色)</h1> <p>def time_list_mesh_error(sta_ob_and_fos0,s = None,save_dir = None,save_path = None, max_error = None,cmap_error = None,show = False,xtimetype = &quot;mid&quot;,dpi = 300,annot =True,title = &quot;预报误差对比图&quot;,sup_fontsize = 10,width = None,height = None)</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>sta_ob_and_fos</strong></td> <td style="text-align: left;">实况和预报合并对齐后的数据,形式为站点数据格式如上述例子中的t2m_all</td> </tr> <tr> <td style="text-align: left;"><strong>s</strong></td> <td style="text-align: left;">用于选择数据样本的字典参数,具体的参数说明可参见meb.sele_by_dict中的<a href="https://www.showdoc.cc/meteva?page_id=3975604785954540"><font face="黑体" color=red size=5>s</font></a>参数</td> </tr> <tr> <td style="text-align: left;"><strong>save_dir</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;">指定图片输出的文件路径,当批量生成多张图片时save_path为包含所有图片的输出路径的列表</td> </tr> <tr> <td style="text-align: left;"><strong>clev</strong></td> <td style="text-align: left;">预报和观测对比图部分的填色等级</td> </tr> <tr> <td style="text-align: left;"><strong>cmap</strong></td> <td style="text-align: left;">预报和观测对比图部分的要素值填色方案</td> </tr> <tr> <td style="text-align: left;"><strong>plot_error</strong></td> <td style="text-align: left;">要否显示预报和观测误差图部分</td> </tr> <tr> <td style="text-align: left;"><strong>max_error</strong></td> <td style="text-align: left;">预报误差部分的colorbar的颜色取值范围为[-max_error, max_error],如果max_error设置为None,则会根据sta_ob_and_fos0中的预报和观测数据自动计算出最大误差绝对值作为颜色取值范围的设置依据,因此默认情况下基于同一个数据集sta_ob_and_fos0画出的图中的所有误差图的colorbar是一致的</td> </tr> <tr> <td style="text-align: left;"><strong>cmap_error</strong></td> <td style="text-align: left;">预报和观测误差图部分的要素值填色方案</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>xtimetype</strong></td> <td style="text-align: left;">可选项包括&quot;right&quot;,&quot;mid&quot;,&quot;left&quot;,默认是&quot;mid&quot;,用来表示观测实况时间的含义,当要素是累积量(如降水量)时,应该选择right参数,此时坐标刻度位于每个填色方格的右侧位置,当要素是瞬时量或平均量时(如温度),应该选择默认的mid参数,此时坐标刻度位于填色方格的中间位置,选择left时,坐标刻度会在填色方块的左边</td> </tr> <tr> <td style="text-align: left;"><strong>annot</strong></td> <td style="text-align: left;">绘图时是否在方格中填数字, 如果x轴刻度数超过120,自动不会制数字,此外字体大小会自动根据x轴密度调整</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;">图片标题的确定分为1、全自动,2、半自动,3手动三种方式。 <br> 1、全自动:不设置title参数,系统自动采用title的缺省值+自动补齐的其它信息来确定每一幅图的标题; <br> 2、半自动:title 为字符串类型,系统会采用title + 自动补齐的其它信息来确定每一幅图的标题; <br> 3、手动:title为一个包含多个字符串的列表,且列表的长度必须和要绘制的图的数量一致,每一幅图会依次采用列表中的字符串作为标题,通常title列表的长度 = 模式数 × 站点数 × 每幅图的子图数, <br>如果每幅图中只有一个子图,则title的排列顺序是[tilte_model1_id1,title_model1_id2,...,title_mode1_idN,title_model2_id1,...,title_modelN_idN],<br>如果每幅图中有上下两幅子图,则title列表的排列顺序是tilte_model1_id1_subplot1,title_model1_id1_subplot2,title_model1_id2_subplot1,title_model1_id2_suplot2, ..., title_model2_id1_suplot1,title_model2_id1_suplot2,...,title_modelN_idN_subplot2]</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;"><font face="黑体" color=blue size=3>return</font></td> <td style="text-align: left;">无返回值</td> </tr> </tbody> </table> <p><strong>调用示例:</strong></p> <pre><code class="language-python">mpd.time_list_mesh(t2m_all) #不带其它可选参数时,会将t2m_all中的数据都绘制出来。 #填色图的形式相对于线条图的优点: #1、可以便于同时展示要素对比图和误差图 #2、误差图的误差分布更显眼,更便于发现问题 #缺点是:不能在一张图中展示多模式结果,例如下面的效果中,两个模式的结果被制作成两张图分别输出</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/0d3bcfab17ce653b1ff7e8b7f2184bd3?showdoc=.jpg" alt="" /></p> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/3ca717273bca5235c27512d5e8bc5a3d?showdoc=.jpg" alt="" /></p> <p><strong>图形样式说明:</strong><br /> 1、横坐标为观测的时间<br /> 2、纵轴为起报时间<br /> 3、图形左侧为有观测的时段,右侧为无观测的时段 4、图形下半部分为要素原始值,上半部分为误差值(plot_error参数设为False的时候不显示)<br /> 5、在图形左上侧黑框中的值是观测数据,其它为预报数据,其中黑色方框右侧第一数值是预报的零场值,如果数据中没有包含就以空白方式显示。<br /> 6、在误差图中,所显示的误差并非都是同观测相比,而是与同一列的最顶端的值相比,因此在有观测的部分,是预报-观测,是将前期的预报-最新的预报。</p> <p><strong>示例结果解读:</strong><br /> 在上图中,相同横坐标的一列,代表观测时间相同的多个时效的预报,如果一列中都是偏高或偏低,就提示我们可能存在与天气形势有关的误差,也可能是bug导致的错误。在无观测的时段如果一段时间都是偏低,如上图中EC的偏差在15日凌晨时段所示,则提示我们模式在最新时刻有大的调整。而上图中grapes的对15日凌晨的预报则是在早期有调整,但最新时效调整不大。</p> <pre><code class="language-python">mpd.time_list_mesh_error(t2m_all) # 仅绘制有实况的时段的预报误差部分</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/90977b31f6212bc88a31504fdc8db8a9?showdoc=.jpg" alt="" /></p> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/8edb7703a84d951339ca2e57d61931e4?showdoc=.jpg" alt="" /></p> <pre><code class="language-python">#裁剪部分观测时段、部分时效、部分模式结果进行检验分析 mpd.time_list_mesh_error(t2m_all, s = {"ob_time_range":["2020040908","2020041308"],"dtime_range":[0,72],"member":["ob","ecmwf"]})</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/9753945c13c99b7e254b16800dd47685?showdoc=.jpg" alt="" /></p> <pre><code class="language-python">mpd.time_list_mesh(t2m_all,save_dir = r"H:\test_data\output\mpd\program") </code></pre> <pre><code>图片已保存至H:\test_data\output\mpd\program/ecmwf_54511.png 图片已保存至H:\test_data\output\mpd\program/grapes_54511.png</code></pre> <h1>1小时降水预报偏差和稳定性对比图</h1> <p><strong>time_list_mesh_rain01h(sta_ob_and_fos0,s = None,save_dir = None,save_path = None,plot_error = True,show = False,dpi = 300,annot =True,sup_fontsize = 10,width = None,height = None)</strong> </p> <h1>3小时降水预报偏差和稳定性对比图</h1> <p><strong>time_list_mesh_rain03h(sta_ob_and_fos0,s = None,save_dir = None,save_path = None,plot_error = True,show = False,dpi = 300,annot =True,sup_fontsize = 10,width = None,height = None)</strong> </p> <h1>相对湿度预报偏差和稳定性对比图</h1> <p><strong>time_list_mesh_rh(sta_ob_and_fos0,s = None,save_dir = None,save_path = None,plot_error = True,show = False,dpi = 300,annot =True,sup_fontsize = 10,width = None,height = None)</strong> </p> <h1>能见度预报偏差和稳定性对比图</h1> <p><strong>time_list_mesh_vis(sta_ob_and_fos0,s = None,save_dir = None,save_path = None,plot_error = True,show = False,dpi = 300,annot =True,sup_fontsize = 10,width = None,height = None)</strong> </p> <h1>云量预报偏差和稳定性对比图</h1> <p><strong>time_list_mesh_tcdc(sta_ob_and_fos0,s = None,save_dir = None,save_path = None,plot_error = True,show = False,dpi = 300,annot =True,sup_fontsize = 10,width = None,height = None)</strong> </p> <p>以上函数是对time_list_mesh函数的特例化封装,这些函数中针对不同要素将要素和误差的配色方案以及xtimetype参数进行了具体化,因此它们都少了三个参数,用起来更加方便。其中的配色方案只是初步选定,后期可能更新为更为美观的配色方案。 </p> <p><strong>调用示例:</strong></p> <pre><code class="language-python">ob_tcdc = pd.read_hdf(r"H:\test_data\input\mpd\time_compair\ob_tcdc.h5","df") #读取云量观测 ec_tcdc = pd.read_hdf(r"H:\test_data\input\mpd\time_compair\ec_tcdc.h5","df") #读取云量预报 tcdc_all = meb.combine_on_obTime_id(ob_tcdc,[ec_tcdc]) #合并预报观测数据,need_match_ob为缺省参数False mpd.time_list_mesh_tcdc(tcdc_all) #绘制云量单站检验图,采用蓝色代表少云,灰色代表多云</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/0cd89071c616b5c1b323abf6a36d2774?showdoc=.jpg" alt="" /></p> <pre><code class="language-python">ob_vis = pd.read_hdf(r"H:\test_data\input\mpd\time_compair\ob_vis.h5","df") #读取能见度观测 ec_vis = pd.read_hdf(r"H:\test_data\input\mpd\time_compair\ec_vis.h5","df") #读能见度预报 vis_all = meb.combine_on_obTime_id(ob_vis,[ec_vis]) #合并预报观测数据,need_match_ob为缺省参数False mpd.time_list_mesh_vis(vis_all,s ={"time_range":["2020040608","2020041008"],"dtime_range":[0,72]}) #绘制能见度单站检验图,采用蓝色代表能见度高,棕色代表能见度低</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/0d2700551e545de10790f9a4433c67cd?showdoc=.jpg" alt="" /></p> <pre><code class="language-python">ob_rain01 = pd.read_hdf(r"H:\test_data\input\mpd\time_compair\ob_rain01.h5","df") #读取读1小时降水观测 gmosrr_rain03 = pd.read_hdf(r"H:\test_data\input\mpd\time_compair\ec_rian03.h5","df") #读取3小时降水预报 ob_rain03 = meb.accumulate_time(ob_rain01,3) #将降水观测有逐小时累加成逐3小时 rain03_all =meb.combine_on_obTime_id(ob_rain03,[gmosrr_rain03]) #合并预报观测数据,need_match_ob为缺省参数False mpd.time_list_mesh_rain03h(rain03_all,s ={"time_range":["2020040820","2020041120"]}) #选取部分时段绘制对比图</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/3d28837421babeba0ab92bf077aa3cab?showdoc=.jpg" alt="" /></p> <pre><code class="language-python">ob_t2m = pd.read_hdf(r"H:\test_data\input\mpd\time_compair\ob_t2m.h5","df") #读取读取温度观测 ec_t2m = pd.read_hdf(r"H:\test_data\input\mpd\time_compair\ec_t2m.h5","df") #读取读取温度观测 ob_dtp2m = pd.read_hdf(r"H:\test_data\input\mpd\time_compair\ob_dtp2m.h5","df") #读取读取露点观测 ec_dtp2m = pd.read_hdf(r"H:\test_data\input\mpd\time_compair\ec_dtp2m.h5","df") #读露点预报 rh_ob = meb.t_dtp_to_rh(ob_t2m,ob_dtp2m) #计算观测的相对湿度 rh_ec = meb.t_dtp_to_rh(ec_t2m,ec_dtp2m) #计算预报的相对湿度 rh_all =meb.combine_on_obTime_id(rh_ob,[rh_ec]) #合并预报观测数据,need_match_ob为缺省参数False #绘制相对湿度单站检验图,采用绿色代表相对湿度高,棕色代表相对湿度低 mpd.time_list_mesh_rh(rh_all,s = {"time_range":["2020040608","2020041008"],"dtime_range":[0,72]})</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/de8626ed54f3c0d37fa9fa1d6cd51699?showdoc=.jpg" alt="" /></p> <h1>单站风的多时效对比图</h1> <p>time_list_mesh_wind(sta_ob_and_fos0,s = None,save_dir = None,save_path = None,plot_error = True,max_error,show = False,dpi = 200,title = &quot;预报准确性和稳定性对比图&quot;,sup_fontsize = 10,width = None,height = None)</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>sta_ob_and_fos</strong></td> <td style="text-align: left;">实况和预报合并对齐后的数据,形式为站点数据格式下述例子中的wind_all</td> </tr> <tr> <td style="text-align: left;"><strong>s</strong></td> <td style="text-align: left;">用于选择数据样本的字典参数,具体的参数说明可参见meb.sele_by_dict中的<a href="https://www.showdoc.cc/meteva?page_id=3975604785954540"><font face="黑体" color=red size=5>s</font></a>参数</td> </tr> <tr> <td style="text-align: left;"><strong>save_dir</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;">指定图片输出的文件路径,当批量生成多张图片时save_path为包含所有图片的输出路径的列表</td> </tr> <tr> <td style="text-align: left;"><strong>plot_error</strong></td> <td style="text-align: left;">要否显示预报和观测误差图部分</td> </tr> <tr> <td style="text-align: left;"><strong>max_error</strong></td> <td style="text-align: left;">风速误差部分的colorbar的颜色取值范围为[-max_error, max_error],如果max_error设置为None,则会根据sta_ob_and_fos0中的预报和观测风速误差自动计算出最大误差绝对值作为颜色取值范围的设置依据,因此默认情况下基于同一个数据集sta_ob_and_fos0画出的图出的所有风速误差图的colorbar是一致的</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>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;">图片标题的确定分为1、全自动,2、半自动,3手动三种方式。 <br> 1、全自动:不设置title参数,系统自动采用title的缺省值+自动补齐的其它信息来确定每一幅图的标题; <br> 2、半自动:title 为字符串类型,系统会采用title + 自动补齐的其它信息来确定每一幅图的标题; <br> 3、手动:title为一个包含多个字符串的列表,且列表的长度必须和要绘制的图的数量一致,每一幅图会依次采用列表中的字符串作为标题,通常title列表的长度 = 模式数 × 站点数 × 每幅图的子图数, <br>如果每幅图中只有一个子图,则title的排列顺序是[tilte_model1_id1,title_model1_id2,...,title_mode1_idN,title_model2_id1,...,title_modelN_idN],<br>如果每幅图中有上下两幅子图,则title列表的排列顺序是tilte_model1_id1_subplot1,title_model1_id1_subplot2,title_model1_id2_subplot1,title_model1_id2_suplot2, ..., title_model2_id1_suplot1,title_model2_id1_suplot2,...,title_modelN_idN_subplot2]</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;"><font face="黑体" color=blue size=3>return</font></td> <td style="text-align: left;">无返回值</td> </tr> </tbody> </table> <p><strong>调用示例:</strong></p> <pre><code class="language-python">ob_wind10m = pd.read_hdf(r"H:\test_data\input\mpd\time_compair\ob_wind10m.h5","df") #读取读取露点观测 ob_uv = meb.speed_angle_to_wind(ob_wind10m) #观测数据中原始数据为风速风向,则可以通过该函数转换为u,v ec_uv = pd.read_hdf(r"H:\test_data\input\mpd\time_compair\ec_wind10m.h5","df") #读露点预报 wind_all =meb.combine_on_obTime_id(ob_uv,[ec_uv]) #合并预报观测数据,need_match_ob为缺省参数False print(wind_all) #绘制风场检验的数据以u、v、...、u、v的形式排列,前两列默认为是观测,之后是预报 </code></pre> <pre><code> level time dtime id lon lat u \ 0 0.0 2020-04-06 08:00:00 3 54511 116.47 39.8 1.394383 1 0.0 2020-04-06 20:00:00 3 54511 116.47 39.8 -0.154433 2 0.0 2020-04-07 08:00:00 3 54511 116.47 39.8 -0.172479 3 0.0 2020-04-07 20:00:00 3 54511 116.47 39.8 -1.628287 4 0.0 2020-04-08 08:00:00 3 54511 116.47 39.8 -1.191180 .. ... ... ... ... ... ... ... 499 0.0 2020-04-12 20:00:00 120 54511 116.47 39.8 999999.000000 500 0.0 2020-04-12 20:00:00 126 54511 116.47 39.8 999999.000000 501 0.0 2020-04-12 20:00:00 132 54511 116.47 39.8 999999.000000 502 0.0 2020-04-12 20:00:00 138 54511 116.47 39.8 999999.000000 503 0.0 2020-04-12 20:00:00 144 54511 116.47 39.8 999999.000000 v u_ecmwf v_ecmwf 0 0.125288 0.239926 -0.012376 1 -0.475553 -1.186846 -0.657165 2 3.195349 -1.340084 0.247622 3 1.624402 -1.006525 1.442748 4 0.145221 -2.370218 0.372719 .. ... ... ... 499 999999.000000 -2.255970 2.150497 500 999999.000000 1.779419 1.521370 501 999999.000000 1.617793 0.602405 502 999999.000000 0.380045 4.784089 503 999999.000000 -0.515984 2.366336 [504 rows x 10 columns]</code></pre> <pre><code class="language-python">#绘制风单站检验图,采用蓝色代表能见度高,棕色代表能见度低 mpd.time_list_mesh_wind(wind_all,s ={"time_range":["2020040820","2020041120"],"dtime_range":[0,72]}) </code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/9bdbd14c23f8072085b27ae7589152d4?showdoc=.jpg" alt="" /></p> <p><strong>图形样式说明:</strong><br /> 1、横坐标为观测的时间<br /> 2、纵轴为起报时间<br /> 3、图形左侧为有观测的时段,右侧为无观测的时段<br /> 4、图形下半部分为要素原始值,风向杆代表风向风速,此外填色也代表风速。<br /> 5、上半部分为误差值(plot_error参数设为False的时候不显示), 风向杆代表两个风矢量之间的矢量差。<br /> 6、在误差图中,所显示的误差并非都是同观测相比,而是与同一列的最顶端的值相比,因此在有观测的部分,是预报-观测,是将前期的预报-最新的预报。 7、所有方格中,如果数据缺失了就以空白显示,如果风速约等于0或者误差矢量的大小约等于0,则以圆圈形式显示<br /> 8、在图形左上侧黑框中的值是观测数据,其它为预报数据,其中黑色方框右侧第一数值是预报的零场值,如果数据中没有包含就以空白方式显示。 </p>

页面列表

ITEM_HTML