爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 13606|回复: 10

[作图] NCL如何批量读取txt数据画轨迹!

[复制链接]

新浪微博达人勋

发表于 2020-9-25 11:53:37 | 显示全部楼层 |阅读模式

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

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

x
学了ncl也有快两年时间了,这是我从来没涉足的问题.单纯的如果读一个文件进行循环照葫芦画瓢我还行.现在是读多个文件,文件行数不一样,列是一样的话,画不同文件的轨迹,我就犯了难了,一下是我个人的困难和思考,希望大家予以指导!
画一个文件的轨迹图

  1. begin

  2.    wks = gsn_open_wks("png","traj1")               ; send graphics to PNG file
  3.    data=asciiread("1.txt", (/38,13/), "float")
  4.    lon  = data(:,2)
  5.    lat  = data(:,3)

  6.   
  7.    res             = True                              ; plot mods desired
  8.    res@gsnFrame    = False                             ; don't advance yet
  9.    res@gsnMaximize = True
  10.    res@gsnDraw          = False   ; so we can add poly stuff
  11.    res@mpDataBaseVersion     =  "MediumRes" ;
  12.    res@mpPerimOn             = False          ;-- don't draw the box around the plot
  13.    res@gsnPolar="SH"
  14.    res@mpCenterLonF          = 0              ;-- center at lon=10
  15.    res@mpMaxLatF          = -30   
  16.    res@mpGridLineColor       = "grey30"         ;-- set grid line color
  17.    res@tiMainString    = ""  ;
  18.    res@gsnCenterString = ""   ; center string
  19.    res@mpFillOn               = False    ; 打开之后线才会显现
  20.    res@mpOutlineOn            = True    ; turn on continental outline打开后图变清晰了


  21.    map = gsn_csm_map(wks,res)                        ; gsn_csm_map_ce
  22.    pres                  = True               ; polyline resources
  23.    pres@gsLineThicknessF = 2.0                ; line thickness
  24.   
  25.    pres@gsLineColor = "red"                        
  26.    gsn_polyline(wks,map,lon,lat,pres)      ; draw the traj
  27.    draw(map)                                          
  28.    frame(wks)                                         
  29.   
  30. end

复制代码
如果读多个文件呢,行数不一样,如何利用循环进行数据的可视化.目前只找到一个代码
  1. fils = systemfunc ("ls *.txt")
  2. ; print(fils)
  3. ; print(dimsizes(fils))

  4. cols=13
  5. do i=0,dimsizes(fils)-1
  6.     print(i+"Now reading..."+fils(i))   ;过程监控
  7. <div class="blockcode"><blockquote>data = asciiread(fils(i),-1,"float")      ;读成一整列
  8.     rows=dimsizes(data)/cols
  9.     nfile=onedtond(data,(/rows,cols/))
复制代码


    delete(data)
    delete(nfile)
    delete(rows)

end do
请问中间核心的三行代码是什么意思呢?不是非常的懂这个循环该如何写,思考时间睡觉都在思考!谢谢!



trj1.png

1.txt

5.55 KB, 下载次数: 10, 下载积分: 金钱 -5

2.txt

5.53 KB, 下载次数: 6, 下载积分: 金钱 -5

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

新浪微博达人勋

发表于 2020-9-25 15:07:28 | 显示全部楼层
fils = systemfunc ("ls *.txt")
; print(fils)
; print(dimsizes(fils))
cols=13
do i=0,dimsizes(fils)-1
    print(i+"Now reading..."+fils(i))   ;过程监控
   data = asciiread(fils(i),-1,"float")      ;读成一整列
    rows=dimsizes(data)/cols
    nfile=onedtond(data,(/rows,cols/))

    delete(data)
    delete(nfile)
    delete(rows)
end do
这个写的很清楚了,先把列定了cols=13,,这是所有文件共同的,然后先顺序读成一维数据,然后再通过onedtond函数转成2维的最终数据,方法很好啊,很适合行数不一样,列一样这种情况
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2020-9-25 12:55:05 | 显示全部楼层

回帖奖励 +5 金钱

列是一样的话,不同文件合并这块建议楼主用Python处理,处理完成后再用NCL绘画呀!或者直接PyNCL就画啦!仅供参考
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-9-25 13:04:41 | 显示全部楼层
oydl1985 发表于 2020-9-25 12:55
列是一样的话,不同文件合并这块建议楼主用Python处理,处理完成后再用NCL绘画呀!或者直接PyNCL就画啦!仅 ...

请问能推荐什么函数呢,我是正有这个意思.
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-9-25 15:31:59 | 显示全部楼层
随缘 发表于 2020-9-25 15:07
fils = systemfunc ("ls *.txt")
; print(fils)
; print(dimsizes(fils))

我在家园找到的,我研究研究,大神,请问按照这样的画图的时候我的数据就存放在了nfile(i)对吧,利用这个数据来写循环对吗?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-9-25 15:59:02 | 显示全部楼层
对方的凤飞飞 发表于 2020-9-25 15:31
我在家园找到的,我研究研究,大神,请问按照这样的画图的时候我的数据就存放在了nfile(i)对吧,利用这个 ...

是的,每个文件的数据就在nfile里,是一个rows,cols的二维数组
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-10-17 09:56:04 | 显示全部楼层
请问楼主,数据列不一样,怎么读成想要的二位数组?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-10-17 10:05:04 | 显示全部楼层
小拉拉 发表于 2020-10-17 09:56
请问楼主,数据列不一样,怎么读成想要的二位数组?

我就是这个不懂呀
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-8-24 10:27:30 | 显示全部楼层
想问一下楼主大大,追踪的是什么呀,我最近在学习做水汽追踪,可以分享一下lz画轨迹的脚本嘛,感谢
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-8-10 15:35:46 | 显示全部楼层
print(i+"Now reading..."+fils(i))   ;过程监控这个思路很有意思
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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