爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 1004|回复: 6

【已解决】ncl画斜刨图

[复制链接]
回帖奖励 20 金钱 回复本帖可获得 10 金钱奖励! 每人限 1 次

新浪微博达人勋

发表于 2023-11-14 14:07:08 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 是冉冉升起的冉 于 2023-11-15 15:45 编辑

Q:画斜刨图大圆路径用ncl中这个函数gc_latlon,但是这里面有个常数npts,两个点之间选取的点数,不知道这个变量的设置是怎么选取的,以及最后画图的时候,经纬度不是均匀的,这种情况怎么办!!
画图最后出现这个警告
warning:ScalarFieldSetValues: irregular coordinate array sfXArray non-monotonic: defaulting sfXArray------------------------------------------------------------------------------------------------------------------------------------------------------------------------
参照ncl官网刨面图中,NCL Graphics: Pressure/Height vs. Latitude (ucar.edu),第五个例子的第三张图,画刨面主要使用的两个函数:
官网中的例子是曲面网格,因此先使用ESMF_regrid_with_weights进行网格化。
大圆路径:gc_latlon 其中设置的npts为x轴的点数目,根据需要设置,一般设置越大数据越密。
插值:linint2_points_Wrap使用双线性插值从直线网格插值到非结构化网格。
家园中的有一个例子感觉有一点问题,最后画图设置的经纬度,因为地球是球面,所以经纬度不是均匀的,设置时需要画gc_latlon 函数对应的经纬度。

实际中遇到的问题:
在选择的经度范围跨越半球时,两点之间的方向不可控制,这是因为gc_latlon这个函数的问题,试了多次也没解决,只能选择不跨越半球了。
[size=13.3333px]If the two specified points are exactly opposite one another on the globe, the code does not fail, but the direction of the great circle route will be somewhat unpredictable. Setting npts[size=13.3333px] <= 2 has the effect of just calculating the great circle distance between the two input points. No lat/lon points will be interpolated in between.
[size=13.3333px]最后出现的警告,猜测是由于网格的不均匀分布造成的,但画图的结果好像没有影响。
;=================================================================
;----------------斜刨面
; calculate great circle along transect

    npts=600 ;The actual number of interpolated points is npts-2.
    N1=npts-1

    nLabels      = 5   ;x轴坐标想要的标签数目
    fiCyclicX    =True ;注意数据是否循环

;选取的两个点

    leftlat  =  45
    rightlat =  80

    leftlon  =  300
    rightlon =  357.5

;attention:数据是从0-360 or -180-180
;lonFlip 可以使用该函数转换
    dist = gc_latlon(leftlat,leftlon, rightlat,rightlon, npts,2) ;大圆路径

;插值 变量为Fx_pos_10_area
    xlon=Fx_pos_10_area&lon
    xlat=Fx_pos_10_area&lat
    Fx_pos_10_cross = linint2_points_Wrap(xlon,xlat,Fx_pos_10_area,fiCyclicX,dist@gclon,dist@gclat,2)
    ;插值后赋予变量属性
    Fx_pos_10_cross!0      = "time"
    Fx_pos_10_cross!1      = "level"
    Fx_pos_10_cross&level= Fx_pos_10_area&level

;-----对应的经纬度
    latXsecUser  = dist@gclat      ; convenience
    lonXsecUser  = dist@gclon
    print (dist@gclat+"  "+dist@gclon )  ; print the lats/lons

;---------画图时x轴坐标设置
;数据从0-360
    XBValues_pos    = toint( fspan(0,N1,nLabels) )
    XBLabels_pos    = new(nLabels,"string")

    do i=0,nLabels-1
       x = lonXsecUser(XBValues_pos(i))
       y = latXsecUser(XBValues_pos(i))
       if(x.lt.180)then
            XBLabels_pos(i) = sprintf("%3.1f", y)+"N"+"~C~"+sprintf("%3.1f", x)+"E"
        else if(x.gt.180.and.x.le.360)then
            x1=360-x
            XBLabels_pos(i) = sprintf("%3.1f", y)+"N"+"~C~"+sprintf("%3.1f",x1)+"W"
        else if(x.eq.180.or.x.eq.360)then
            XBLabels_pos(i) = sprintf("%5.1f", y)+"N"+"~C~"+sprintf("%5.1f", x)
       end if
       end if
       end if
    end do

res@tmXBMode   = "Explicit"
res@tmXBValues = XBValues_pos
res@tmXBLabels = XBLabels_pos






密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2023-11-14 18:59:10 | 显示全部楼层
家园的人越来越少了,流泪
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2023-11-15 09:21:26 | 显示全部楼层

回帖奖励 +10 金钱

这个常数就是要你自己设定X轴有多少个点,后面插值要用
想密一些就设置大一些,没有强制的要求
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2023-11-15 09:32:00 | 显示全部楼层
圈圈圆圆圈圈 发表于 2023-11-15 09:21
这个常数就是要你自己设定X轴有多少个点,后面插值要用
想密一些就设置大一些,没有强制的要求

但是最后画出来图的经纬度dist@gclat dist@gclon这两个值不是均匀的,这种情况要怎么设置呢。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2023-11-15 09:33:45 | 显示全部楼层
圈圈圆圆圈圈 发表于 2023-11-15 09:21
这个常数就是要你自己设定X轴有多少个点,后面插值要用
想密一些就设置大一些,没有强制的要求

不知道我有没有说明白
就是最后画图的时候,变量是二维的,(level,npts)
这个npts就是你在这里设置的参数

1.png
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2023-11-15 09:36:05 | 显示全部楼层
是冉冉升起的冉 发表于 2023-11-15 09:32
但是最后画出来图的经纬度dist@gclat dist@gclon这两个值不是均匀的,这种情况要怎么设置呢。

那你要看你的gc-latlon和后面插值函数设置的经纬度以及格点数是否对应
你这连问题都没找到在哪,去哪找答案啊?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2023-11-15 10:11:19 | 显示全部楼层
格点设置是均匀的,比如你给的例子是20个,但是他对应的经纬度gc-latlon不是均匀的呀,输出的结果他就是不均匀的,linint2_points_Wrap这个函数插值的不就是非结构化网格么。 微信截图_20231115100939.png 我最后画的是gc-latlon的经纬度,格点会对应经纬度,但是这个经纬度就不是均匀的,有的地方会密集。
(0)     75  -60
(1)     75.0001  -59.8302
(2)     75  -59.6604
(3)     74.9998  -59.4905
(4)     74.9994  -59.3207
(5)     74.999  -59.1509
(6)     74.9984  -58.9811
(7)     74.9977  -58.8114
(8)     74.9969  -58.6416
(9)     74.9959  -58.4719
(10)    74.9948  -58.3021
(11)    74.9936  -58.1324
(12)    74.9923  -57.9628
(13)    74.9908  -57.7931
(14)    74.9893  -57.6235
(15)    74.9875  -57.454
(16)    74.9857  -57.2844
(17)    74.9837  -57.115
(18)    74.9817  -56.9455
(19)    74.9794  -56.7761
(20)    74.9771  -56.6068
(21)    74.9746  -56.4375
(22)    74.9721  -56.2683
(23)    74.9693  -56.0991
(24)    74.9665  -55.93
(25)    74.9635  -55.7609
(26)    74.9604  -55.5919
(27)    74.9572  -55.423
(28)    74.9539  -55.2542
(29)    74.9504  -55.0854
(30)    74.9468  -54.9167
(31)    74.9431  -54.7481
(32)    74.9393  -54.5796
(33)    74.9353  -54.4112
(34)    74.9313  -54.2428
(35)    74.927  -54.0745
(36)    74.9227  -53.9064

微信截图_20231115095826.png
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表