VGM(变差图)
<p>[TOC]</p>
<pre><code class="language-python">%matplotlib inline
%load_ext autoreload
%autoreload 2
import meteva.base as meb
import meteva.product as mpd
import meteva.method as mem</code></pre>
<h1>Variogram(变差图)概述</h1>
<hr />
<p><font face="黑体" color=Black size=4>
<br>在一个平面场中,不同位置的两点取值不同,两者的差异通常随着距离的增大而增大。Variogram的目的是用来检测预报场中上述增大趋势是否和在观测场中具有一致性<br> </font></p>
<pre><code class="language-python">#测试数据
grid0 = meb.grid([73,135,0.25],[18,55,0.25])
grd_fo = meb.read_griddata_from_nc(r'H:\test_data\input\mpd\grapes_t2m_BT20020108.048.nc',
grid = grid0,time = "2020020108",dtime = 48,data_name = "fo",level = 0)
grd_ob = meb.read_griddata_from_nc(r'H:\test_data\input\mpd\grapes_t2m_BT20020308.000.nc',
grid = grid0,time = "2020020308",dtime = 0,data_name = "ob",level = 0)
station = meb.read_station(meb.station_国家站)
sta_ob = meb.interp_gs_linear(grd_ob,station)
sta_fo = meb.interp_gs_linear(grd_fo,station)
sta = meb.combine_on_obTime_id(sta_ob,sta_fo)
print(sta)</code></pre>
<pre><code> level time dtime id lon lat ob \
0 0 2020-02-01 08:00:00 48 50136 122.52 52.97 -29.24625
1 0 2020-02-01 08:00:00 48 50137 122.37 53.47 -29.08055
2 0 2020-02-01 08:00:00 48 50246 124.72 52.35 -27.24100
3 0 2020-02-01 08:00:00 48 50247 123.57 52.03 -29.21935
4 0 2020-02-01 08:00:00 48 50349 124.40 51.67 -27.92800
... ... ... ... ... ... ... ...
2405 0 2020-02-01 08:00:00 48 59941 109.52 18.77 17.36025
2406 0 2020-02-01 08:00:00 48 59945 109.70 18.65 18.07875
2407 0 2020-02-01 08:00:00 48 59948 109.58 18.22 21.15080
2408 0 2020-02-01 08:00:00 48 59951 110.33 18.80 21.43425
2409 0 2020-02-01 08:00:00 48 59954 110.03 18.55 20.87725
fo
0 -29.02595
1 -28.40490
2 -27.27925
3 -29.34580
4 -28.12475
... ...
2405 17.62715
2406 18.25625
2407 21.63590
2408 21.87975
2409 21.19850
[2410 rows x 8 columns]</code></pre>
<h1>变差图(站点数据)</h1>
<p><font face="黑体" color=Blue size=4><strong>vgm_sta(sta,dmax,grade_count = 10,q = 1,xlabel = "距离(km)",ylabel = "变化幅度",title = "Variogram(变差图)",dpi = 300,show =False,save_path = None,sup_fontsize = 10,width = None,height = None)</strong></font> </p>
<p>输入站点数据和统计参数,统计并绘制要素值变化幅度随距离的函数 </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><font face="黑体" color=blue size=5>sta</font></strong></td>
<td style="text-align: left;">站点形式的数据,可以包含多列数据</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=blue size=5>dmax</font></strong></td>
<td style="text-align: left;">统计的最大距离,距离超出dmax的将不被统计</td>
</tr>
<tr>
<td style="text-align: left;"><strong>grade_count</strong></td>
<td style="text-align: left;">将0-dmax距离分成grade_count段距离范围进行统计,每一段是前开后闭的区间</td>
</tr>
<tr>
<td style="text-align: left;"><strong>q</strong></td>
<td style="text-align: left;">q=1时变差记为变化量绝对值,q=2时变差记为变化量的平方</td>
</tr>
<tr>
<td style="text-align: left;"><strong>xlabel</strong></td>
<td style="text-align: left;">横坐标名称</td>
</tr>
<tr>
<td style="text-align: left;"><strong>ylabel</strong></td>
<td style="text-align: left;">纵坐标名称</td>
</tr>
<tr>
<td style="text-align: left;"><strong>title</strong></td>
<td style="text-align: left;">纵坐标名称</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>show</strong></td>
<td style="text-align: left;">是否在屏幕显示图片,如果save_path 和save_dir 为都None时,程序内部会自动将show设置True</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>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><font face="黑体" color=blue size=5>return</font></strong></td>
<td style="text-align: left;">返回shape=(3,grade_count,数据列数)的矩阵,其中第一维包含的内容分别是数据样本数、变差平均值,变差的方差</td>
</tr>
</tbody>
</table>
<pre><code class="language-python">cmv = mem.vgm.vgm_sta(sta,5000,grade_count = 10)</code></pre>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/50748f34c71f67cf54ce3b3d3f7fb953" alt="" /></p>
<p>在上图当中,图形分为上下两部分,下半部分为样本数统计,此处样本数不是观测或预报数据的样本数。而是求变差所用到的数据对的样本数。例如当观测场当中有100个站点,它们两两之间的距离,构成了100×99/2 个样本。上面的例子当中采用的是全国2400个国家站,因此构成的距离样本数越300万个,将距离小于5000km的样本等距的分成10组,统计其中每种距离区间内的样本数。<br />
上半部分,是距离属于某一个区间内,要素变差值的平均值(粗实线),进一步统计了同一个距离区间内变差值的标准差,将平均值加(减)标准差,绘制成图中上(下)两条虚线,用于表征变差值的大致范围。</p>
<h1>变差图_箱须图(站点数据)</h1>
<p><font face="黑体" color=Blue size=4><strong>vgm_sta_box(sta,dmax,grade_count = 10,q = 1,xlabel = "距离(km)",ylabel1="变化幅度(统计值)",ylabel2="变化幅度(箱须图)",title = "Variogram(变差图)",dpi = 300,show =False,save_path = None,sup_fontsize = 10,width = None,height = None)</strong></font> </p>
<p>输入站点数据和统计参数,统计并绘制要素值变化幅度随距离的函数 </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><font face="黑体" color=blue size=5>sta</font></strong></td>
<td style="text-align: left;">站点形式的数据,可以包含多列数据</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=blue size=5>dmax</font></strong></td>
<td style="text-align: left;">统计的最大距离,距离超出dmax的将不被统计</td>
</tr>
<tr>
<td style="text-align: left;"><strong>grade_count</strong></td>
<td style="text-align: left;">将0-dmax距离分成grade_count段距离范围进行统计,每一段是前开后闭的区间</td>
</tr>
<tr>
<td style="text-align: left;"><strong>q</strong></td>
<td style="text-align: left;">q=1时变差记为变化量绝对值,q=2时变差记为变化量的平方</td>
</tr>
<tr>
<td style="text-align: left;"><strong>xlabel</strong></td>
<td style="text-align: left;">横坐标名称</td>
</tr>
<tr>
<td style="text-align: left;"><strong>ylabel1</strong></td>
<td style="text-align: left;">曲线图部分纵坐标名称</td>
</tr>
<tr>
<td style="text-align: left;"><strong>ylabel1</strong></td>
<td style="text-align: left;">箱须图部分纵坐标名称</td>
</tr>
<tr>
<td style="text-align: left;"><strong>title</strong></td>
<td style="text-align: left;">纵坐标名称</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>show</strong></td>
<td style="text-align: left;">是否在屏幕显示图片,如果save_path 和save_dir 为都None时,程序内部会自动将show设置True</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>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><font face="黑体" color=blue size=5>return</font></strong></td>
<td style="text-align: left;">返回shape=(变差样本数,数据列数+1)的矩阵,第2维的内容包括一对样本之间的距离和各场的变差值</td>
</tr>
</tbody>
</table>
<pre><code class="language-python">dv = mem.vgm.vgm_sta_box(sta,dmax =5000)
print(dv.shape) # (变差样本数,1+数据列数)</code></pre>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/2f85060bc5fabfe291a76bf3bc2d3cb1" alt="" /></p>
<pre><code>(2902845, 3)</code></pre>
<p>相比于前一张图变差图,上图增加了中间箱须图的部分,其中,在每一个距离区间,将观测和预报的箱须图并列排放,用于对比观测和预报的变差样本的差异性。<br />
从上面示例图展示结果来看,在距离小于2000km的区间内,预报场的变差高于观测场。这种偏差提示研发者,预报场中包含的小尺度系统波动幅度偏大。</p>
<h1>变差图Mesh(格点数据)</h1>
<p><font face="黑体" color=Blue size=4><strong>vgm_grd_mesh(grd_list, delta = 10,step = 1, q = 1,dpi = 300,show =False,save_path = None,sup_fontsize = 10,ncol = 2,,width = None,height = None)</strong></font> </p>
<p>输入网格数据,将网格横竖平移,计算和平移前的网格的差值的平均 </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><font face="黑体" color=blue size=5>grd_list</font></strong></td>
<td style="text-align: left;">网格数据列表</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=blue size=5>delta</font></strong></td>
<td style="text-align: left;">横竖平移的最大格点数最大距离,最大不能超过东西(及南北)向网格数据的一半</td>
</tr>
<tr>
<td style="text-align: left;"><strong>step</strong></td>
<td style="text-align: left;">平移的步长</td>
</tr>
<tr>
<td style="text-align: left;"><strong>q</strong></td>
<td style="text-align: left;">q=1时变差记为变化量绝对值的平均,q=2时变差记为变化量的平方的平均</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>show</strong></td>
<td style="text-align: left;">是否在屏幕显示图片,如果save_path 和save_dir 为都None时,程序内部会自动将show设置True</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>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>ncol</strong></td>
<td style="text-align: left;">子图的列数</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><font face="黑体" color=blue size=5>return</font></strong></td>
<td style="text-align: left;">包含通统计量的字典变量</td>
</tr>
</tbody>
</table>
<p><font face="黑体" color=Green size=4><strong>vgm_grd_mesh函数返回结果内容说明</strong></font> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">一级关键词</th>
<th style="text-align: center;">说明</th>
<th style="text-align: left;">备注</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Green size=3>dis</font></strong></td>
<td style="text-align: center;">不同平移情况下的移动的距离(以网格数为单位)</td>
<td style="text-align: left;">shape=(数据列,东西向位移的种数,东西向位移的种数)的数组</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Green size=3>vg</font></strong></td>
<td style="text-align: center;">不同平移情况下的变差</td>
<td style="text-align: left;">shape=(数据列,东西向位移的种数,东西向位移的种数)的数组</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Green size=3>sampe</font></strong></td>
<td style="text-align: center;">不同平移情况下计算变差所用到的样本数,通常平移越大,平移前后网格场重合的点越少</td>
<td style="text-align: left;">shape=(数据列,东西向位移的种数,东西向位移的种数)的数组</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Green size=3>member</font></strong></td>
<td style="text-align: center;">观测及各预报变量的名称,也是各子图的标题</td>
<td style="text-align: left;">字符串列表</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Green size=3>delta_x</font></strong></td>
<td style="text-align: center;">东西向平移格点数列表,也是子图的横坐标</td>
<td style="text-align: left;">列表</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Green size=3>delta_y</font></strong></td>
<td style="text-align: center;">南北向平移格点数列表,也是子图的纵坐标</td>
<td style="text-align: left;">列表</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong></p>
<pre><code class="language-python">vg = mem.vgm.vgm_grd_mesh([grd_ob,grd_fo],delta = 10)</code></pre>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/cec637dae5e0f75bd6e3d85ebe2f53ba" alt="" /></p>
<p>从上面的变差图可以看出,无论是观测还是预报,东西向的变差小于南北向的变差,这一点吻合温度场南北向梯度大于东西向梯度的特点。此外当观测和预报较为接近时,上述左右子图中观测和预报有细微的偏差并不利于辨认。为此仍需要下面的检验产品给出更具体的结果。</p>
<h1>变差图(格点数据)</h1>
<p><font face="黑体" color=Blue size=4><strong>vgm_grd(grd_list, delta,step = 1, q = 1,
dpi = 300,show =False,save_path = None,sup_fontsize = 10,width = None,height = None)</strong></font> </p>
<p>输入网格数据,将网格横竖平移,计算和平移前的网格的差值的平均,进一步统计,变差随距离的变化 </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><font face="黑体" color=blue size=5>grd_list</font></strong></td>
<td style="text-align: left;">网格数据列表</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=blue size=5>delta</font></strong></td>
<td style="text-align: left;">横竖平移的最大格点数最大距离</td>
</tr>
<tr>
<td style="text-align: left;"><strong>step</strong></td>
<td style="text-align: left;">平移的步长</td>
</tr>
<tr>
<td style="text-align: left;"><strong>q</strong></td>
<td style="text-align: left;">q=1时变差记为变化量绝对值的平均,q=2时变差记为变化量的平方的平均</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>show</strong></td>
<td style="text-align: left;">是否在屏幕显示图片,如果save_path 和save_dir 为都None时,程序内部会自动将show设置True</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>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><font face="黑体" color=blue size=5>return</font></strong></td>
<td style="text-align: left;">返回shape=(3,grade_count,数据列数)的矩阵,其中第一维包含的内容分别是数据样本数、变差平均值,变差的方差</td>
</tr>
</tbody>
</table>
<pre><code class="language-python">cmv = mem.vgm.vgm_grd([grd_ob,grd_fo],delta =100,step =5)</code></pre>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/9c697c21ed704854e1c1c0b525637830" alt="" /></p>
<p>相比基于站点数据的变差图,样本数的统计口径有所差异,其中一种移动方式对应的结果记为1个样本。在上述例子中,横向移动的方式种类是(2 ×100/5+1),纵向也一样,因此总共的移动方式=41×41</p>