爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 9614|回复: 12

[作图] ncl绘图,lz用了最笨的办法还是画不出来,求各位大神指点!

[复制链接]

新浪微博达人勋

发表于 2017-10-1 13:31:10 | 显示全部楼层 |阅读模式

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

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

x
lz下了1997年—2016年4月的interim逐日资料,想要筛选每年四月的20号至30号,想尝试用聪明的方法,例如循环或函数之类的,折腾了快一个星期,奈何我…………笨QAQ,于是退而求其次求最简单除暴的办法,但是出的结果还是错了,希望各位大神能指点一二

另:国庆节快乐!

脚本:我想的方法真的很怂……有点不好意思贴出来╮(╯﹏╰)╭

load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"

begin
   
    shpfn2 = "D:/ncldate/tibetshape/tibetan.shp"

    f1 = addfile("D:/ncldate/lujing/date4yue/daily_4_2016.nc", "r")
    f2 = addfile("D:/ncldate/lujing/date4yue/daily_4_2015.nc", "r")
    f3 = addfile("D:/ncldate/lujing/date4yue/daily_4_2014.nc", "r")
    f4 = addfile("D:/ncldate/lujing/date4yue/daily_4_2013.nc", "r")
    f5 = addfile("D:/ncldate/lujing/date4yue/daily_4_2012.nc", "r")
    f6 = addfile("D:/ncldate/lujing/date4yue/daily_4_2011.nc", "r")
    f7 = addfile("D:/ncldate/lujing/date4yue/daily_4_2010.nc", "r")
    f8 = addfile("D:/ncldate/lujing/date4yue/daily_4_2009.nc", "r")
    f9 = addfile("D:/ncldate/lujing/date4yue/daily_4_2008.nc", "r")
    f10 = addfile("D:/ncldate/lujing/date4yue/daily_4_2007.nc", "r")
    f11 = addfile("D:/ncldate/lujing/date4yue/daily_4_2006.nc", "r")
    f12 = addfile("D:/ncldate/lujing/date4yue/daily_4_2005.nc", "r")
    f13 = addfile("D:/ncldate/lujing/date4yue/daily_4_2004.nc", "r")
    f14 = addfile("D:/ncldate/lujing/date4yue/daily_4_2003.nc", "r")
    f15 = addfile("D:/ncldate/lujing/date4yue/daily_4_2002.nc", "r")
    f16 = addfile("D:/ncldate/lujing/date4yue/daily_4_2001.nc", "r")
    f17 = addfile("D:/ncldate/lujing/date4yue/daily_4_2000.nc", "r")
    f18 = addfile("D:/ncldate/lujing/date4yue/daily_4_1999.nc", "r")
    f19 = addfile("D:/ncldate/lujing/date4yue/daily_4_1998.nc", "r")
    f20 = addfile("D:/ncldate/lujing/date4yue/daily_4_1997.nc", "r")

    wsgd1=short2flt(f1->z(80:119,25:40,70:105))
    wsgd2=short2flt(f2->z(80:119,25:40,70:105))
    wsgd3=short2flt(f3->z(80:119,25:40,70:105))
    wsgd4=short2flt(f4->z(80:119,25:40,70:105))
    wsgd5=short2flt(f5->z(80:119,25:40,70:105))
    wsgd6=short2flt(f6->z(80:119,25:40,70:105))
    wsgd7=short2flt(f7->z(80:119,25:40,70:105))
    wsgd8=short2flt(f8->z(80:119,25:40,70:105))
    wsgd9=short2flt(f9->z(80:119,25:40,70:105))
    wsgd10=short2flt(f10->z(80:119,25:40,70:105))
    wsgd11=short2flt(f11->z(80:119,25:40,70:105))
    wsgd12=short2flt(f12->z(80:119,25:40,70:105))
    wsgd13=short2flt(f13->z(80:119,25:40,70:105))
    wsgd14=short2flt(f14->z(80:119,25:40,70:105))
    wsgd15=short2flt(f15->z(80:119,25:40,70:105))
    wsgd16=short2flt(f16->z(80:119,25:40,70:105))
    wsgd17=short2flt(f17->z(80:119,25:40,70:105))
    wsgd18=short2flt(f18->z(80:119,25:40,70:105))
    wsgd19=short2flt(f19->z(80:119,25:40,70:105))
    wsgd20=short2flt(f20->z(80:119,25:40,70:105))

    wsgdave1 = dim_avg_n_Wrap(wsgd1,0)
    wsgdave2 = dim_avg_n_Wrap(wsgd2,0)
    wsgdave3 = dim_avg_n_Wrap(wsgd3,0)
    wsgdave4 = dim_avg_n_Wrap(wsgd4,0)
    wsgdave5 = dim_avg_n_Wrap(wsgd5,0)
    wsgdave6 = dim_avg_n_Wrap(wsgd6,0)
    wsgdave7 = dim_avg_n_Wrap(wsgd7,0)
    wsgdave8 = dim_avg_n_Wrap(wsgd8,0)
    wsgdave9 = dim_avg_n_Wrap(wsgd9,0)
    wsgdave10 = dim_avg_n_Wrap(wsgd10,0)
    wsgdave11 = dim_avg_n_Wrap(wsgd11,0)
    wsgdave12 = dim_avg_n_Wrap(wsgd12,0)
    wsgdave13 = dim_avg_n_Wrap(wsgd13,0)
    wsgdave14 = dim_avg_n_Wrap(wsgd14,0)
    wsgdave15 = dim_avg_n_Wrap(wsgd15,0)
    wsgdave16 = dim_avg_n_Wrap(wsgd16,0)
    wsgdave17 = dim_avg_n_Wrap(wsgd17,0)
    wsgdave18 = dim_avg_n_Wrap(wsgd18,0)
    wsgdave19 = dim_avg_n_Wrap(wsgd19,0)
    wsgdave20 = dim_avg_n_Wrap(wsgd20,0)
   

    wsgdaveve = wsgdave1+wsgdave2+wsgdave3+wsgdave4+wsgdave5+wsgdave6+wsgdave7+wsgdave8+wsgdave9+wsgdave10+wsgdave11+wsgdave12+wsgdave13+wsgdave14+wsgdave15+wsgdave16+wsgdave17+wsgdave18+wsgdave19+wsgdave20



    wsgdaveve1 = wsgdaveve/20

    wsgdaveve2 = wsgdaveve1/9.8

   
    wks = gsn_open_wks("png","D:/ncldate/wdwsgd410daily")

    res        = True  
    res@gsnMaximize    = True

    res@gsnDraw = False ; don't draw
    res@gsnFrame = False ; don't advance frame

    res@tiMainString = "Apr"
    res@tiMainFontHeightF = 0.015
    res@lbBoxMinorExtentF = 0.15
    res@gsnLeftString = ""
    res@gsnRightString= ""

    ;res@tiXAxisString = " "
    res@vpWidthF=0.7
    res@vpHeightF=0.4
    res@pmTickMarkDisplayMode = "Always"


    res@tfDoNDCOverlay           = True
    res@gsnAddCyclic             = False

    res@cnInfoLabelOn = False
    res@cnFillOn                = False
    res@cnLinesOn               = True
    res@cnSmoothingOn           = True
    res@cnLineThicknessF = 1.5

    res@cnLevelSpacingF = 3

    plot = gsn_csm_contour(wks,wsgdaveve2,res)
   

    draw(plot)
    frame(wks)

end

wdwsgd410daily.png
上面这张是出的图,是错的,理论上,正确的图应该是类似下面这张,这是我用单独1年的数据画的: wdwsgd4daily2.png

如果可以,希望能有大神教教我聪明的办法去处理数据画图,因为刚接触ncl,而且底子又差,很多东西不能很快的接受,希望能得到详细一点的指导
鞠躬感谢各位!

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

新浪微博达人勋

发表于 2017-10-2 05:10:16 | 显示全部楼层
新手帮顶。。。感觉没有给出经纬度信息
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-10-2 05:51:09 来自手机 | 显示全部楼层
谢谢帮顶~经纬度范围我在读取的时候就选定了,但感觉这样求平均是有问题的,可能平均后维数出问题了,但还是很感谢你帮顶哦~节日快乐!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-10-2 06:29:29 | 显示全部楼层
wsgdaveve = wsgdave1+....之前加一句
wsgdaveve = wsgdave1把属性赋给wsgdaveve,画图的时候用gsn_csm_contour_map 试试
至于读取指定时间,这个办法确实效率不高,参看cd_calendar函数
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-10-2 18:46:43 | 显示全部楼层
talkd 发表于 2017-10-2 06:29
wsgdaveve = wsgdave1+....之前加一句
wsgdaveve = wsgdave1把属性赋给wsgdaveve,画图的时候用gsn_csm_co ...

非常感谢您的帮助,我照着您说的修改了,但是出的图还是有问题,修改部分如下:

wsgdaveve = wsgdave1

    wsgdaveve = wsgdave1+wsgdave2+wsgdave3+wsgdave4+wsgdave5+wsgdave6+wsgdave7+wsgdave8+wsgdave9+wsgdave10+wsgdave11+wsgdave12+wsgdave13+wsgdave14+wsgdave15+wsgdave16+wsgdave17+wsgdave18+wsgdave19+wsgdave20

……

    res@mpDataSetName               = "Earth..4"
    res@mpOutlineOn                 = True
    res@pmTickMarkDisplayMode = "Always"
    res@mpFillOn              =  True          ; turn off map fill
    res@mpOutlineDrawOrder    = "PostDraw"


    res@mpMaxLatF = 55
    res@mpMinLatF = 15
    res@mpMaxLonF = 140
    res@mpMinLonF = 70


    res@cnLevelSpacingF = 3

    plot = gsn_csm_contour_map(wks,wsgdaveve2,res)

警告显示:warning:ContourPlotSetValues: cnLevelSpacingF value causes level count to exceed maximum: defaulting

出的图是这样的: wdwsgd410daily.png
感觉即便用wsgdaveve = wsgdave1,感觉数组还是有问题,经纬度无法确定,难道是我的计算方式错误了么QUQ,大神求指教  cd_calendar函数我有尝试去用,但是没琢磨通怎么用,如果可以希望您能提点提点我,新手上路真的好难(╯﹏╰)
另,祝中秋节快乐!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-10-4 08:36:06 | 显示全部楼层
talkd 发表于 2017-10-2 06:29
wsgdaveve = wsgdave1+....之前加一句
wsgdaveve = wsgdave1把属性赋给wsgdaveve,画图的时候用gsn_csm_co ...

您好,我今天又按照您的方法试了一下,已经可以出图了,发现时我在之前定义维度的时候犯了傻,wsgd1=short2flt(f1->z(80:119,25:40,70:105)),这些应该改成 wsgd1=short2flt(f1->z(80:119,{25:40},{70:105})),忘记加了大括号,把维度定义成格点了囧
非常感谢您的帮助,下面会尝试用cd_calender出图,希望还能有机会得到您的指导哈~
非常感谢!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-10-4 08:39:59 | 显示全部楼层
talkd 发表于 2017-10-2 06:29
wsgdaveve = wsgdave1+....之前加一句
wsgdaveve = wsgdave1把属性赋给wsgdaveve,画图的时候用gsn_csm_co ...

额,抱歉,之前我看错图了……其实我还没画出来,再继续折腾折腾,泪崩!!!!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-10-6 12:38:55 | 显示全部楼层
感觉平均求错了哦。。。 wsgdave1 = dim_avg_n_Wrap(wsgd1,0) 这些算出来应该是一个二维数组,但是你最后用wsgdaveve1 = wsgdaveve/20算出来应该是一维数组,经纬度上的平均值就这样没了。。。
定义一个二维数组,再用平均算呢~~~?
我也是初学者~~不对请谅解
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-10-7 17:01:48 | 显示全部楼层
lb369 发表于 2017-10-6 12:38
感觉平均求错了哦。。。 wsgdave1 = dim_avg_n_Wrap(wsgd1,0) 这些算出来应该是一个二维数组,但是你最后用 ...

非常感谢您的帮助~已经画出来啦~
请问您知道该如何比较有效的提取出数据么?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-10-7 17:48:18 | 显示全部楼层
diri="D:/ncldate/lujing/date4yue/daily_4*"
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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