爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 8832|回复: 8

[作图] ncl 在图上添加箭头的问题

[复制链接]

新浪微博达人勋

发表于 2013-8-14 10:53:53 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 温暖的弦 于 2013-8-14 13:48 编辑

用ncl 做一个波浪的图  ,曲线代表了波高的大小,然后再曲线上添加箭头来代表波向:
但是箭头没有添加到曲线上

;plot ncl
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"   
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"   
   
load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRFUserARW.ncl"   
;****************************************************
begin
;***************************
; read in data
;***************************
f = addfile("hs.20130730.nc" , "r")
f1= addfile("dir.20130730.nc","r")
hs=short2flt(f->Hs)
time=f->time
dir=short2flt(f1->dir)


lon=f->lon
lat=f->lat
nlon=dimsizes(lon)
nlat=dimsizes(lat)
ntime=dimsizes(time)

;print(sprinti("%0.2i",nlon))
;print(sprinti("%0.2i",nlat));***************************************** 提取各个站点所需的数据
xw=new((/nlat,nlon/),float)
yw=new((/nlat,nlon/),float)
lines=asciiread("station.dat",-1,"string")
lon1=stringtofloat(str_get_field(lines(0::),1," "))
lat1=stringtofloat(str_get_field(lines(0::),2," "))
station=str_get_field(lines(0::),3," ")
p=new(16,"integer")
q=new(16,"integer")
do i=0,15
        p(i)=closest_val(lon1(i),lon)
        q(i) =closest_val(lat1(i),lat)
end do
;print(p)
wave_hs=new((/ntime,16/),float)
wave_dir=new((/ntime,16/),float)
do i=0,15
        wave_hs(:,i)=hs(:,q(i),p(i))
        wave_dir(:,i)=dir(:,q(i),p(i))
end do
;*************************************************************转换时间变量
minute=new((/ntime/),integer)
hour=new((/ntime/),integer)
utc_date = cd_calendar(time, 0)
  year   = tointeger(utc_date(:,0))    ; Convert to integer for
  month  = tointeger(utc_date(:,1))    ; use sprinti
  day    = tointeger(utc_date(:,2))
do i=0,ntime-1
  hour(i)  = tointeger(utc_date(i,3))
  minute(i) = tointeger(utc_date(i,4))
end do
  second = utc_date(:,5)

do i=0,ntime-1
        if (minute(i).gt.58) then
                hour(i)=hour(i)+1
        end if
end do

date_str= sprinti("%0.4i", year)+sprinti("%0.2i", month)+\
                sprinti("%0.2i", day)+sprinti("%0.2i ", hour)
date_str2=sprinti("%0.2i", day)+sprinti("%0.2i ", hour)

x=ispan(0,ntime-1,1)
;***********************************************************设置画图参数
res                    =True
res@gsnMaximize        =True
res@tmXBMode           = "Explicit"              
res@tmXBValues         = x(0::8)                     
res@tmXBLabels         = date_str2(0::8)
res@tiXAxisString      = "Time"
res@tiYAxisString      = "Hs (m)"
res@vpWidthF           = 1.5
res@vpHeightF          =0.8
;res@vcLineArrowHeadMinSizeF = 0.01
;res@vcLineArrowHeadMaxSizeF = 0.01

do n=0,15
        fname=station(n)                 ;站点名
;        res@tiMainString=station(n)+\
;"  Significant Wave Height(m)~C~Four Day  Forcast Time Curve"
        wks = gsn_open_wks("png",fname)
        do i=0,ntime-1
        fangxiang=90.-wave_dir(i,n)
        wmsetp("ARD - arrow direction",fangxiang)    ;设置箭头的方向
        ;print(fangxiang)
        wmlabs(wks,i,wave_hs(i,n),"Arrow")              ;添加箭头
        end do
        plot=gsn_csm_xy(wks,x,wave_hs(0:ntime-1,n),res)    ;画xy图


end do

end



                        

想要的图

想要的图

自己画的图

自己画的图
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-8-14 10:55:21 | 显示全部楼层
求高手进  菜鸟求教  
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-8-14 11:10:13 | 显示全部楼层
有没有人啊  求给力啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-8-14 11:12:14 | 显示全部楼层
  高手在哪呢  进来帮帮我呗  已经困扰了好久了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2013-8-14 11:40:05 | 显示全部楼层
不会 帮顶  另外 楼主贴出这么一大段代码也没啥说明  估计很多人看了就直接点关闭页面了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-8-14 12:54:58 | 显示全部楼层
我大概看了下,wmlabs
Plots special symbols and icons for daily weather.

Prototype

        procedure wmlabs (
                wks [1] : graphic,  
                x   [*] : float,   
                y   [*] : float,   
                sym [1] : string   
        )
这个函数中的X,Y是添加的位置,你看你添加的位置是不是和波形完全结合起来了,因为从出图来看,是位置偏移了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-8-14 13:42:51 | 显示全部楼层

  wmlabs(wks,i,wave_hs(i,n),"Arrow");已经写了呀 (i横坐标的位置,wave_hs(i,n))纵坐标的位置;
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-8-14 13:49:08 | 显示全部楼层
mofangbao 发表于 2013-8-14 11:40
不会 帮顶  另外 楼主贴出这么一大段代码也没啥说明  估计很多人看了就直接点关闭页面了

谢谢你提的建议   已经加了说明了  
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-8-14 17:16:37 | 显示全部楼层
温暖的弦 发表于 2013-8-14 13:42
wmlabs(wks,i,wave_hs(i,n),"Arrow");已经写了呀 (i横坐标的位置,wave_hs(i,n))纵坐标的位置;

写了不代表对好吧。。。。。箭头和你波形的位置要对应起来
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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