爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 203|回复: 0

[作图] NCL经纬度图加°符号

[复制链接]

新浪微博达人勋

发表于 2024-6-27 14:44:44 | 显示全部楼层 |阅读模式

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

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

x
Method 1:
  1. res@pmTickMarkDisplayMode = "Always"
复制代码
直接设置这个命令,但是经纬度的间隔不能更改,只适用于经纬度图;
Method 2:
设置坐标轴对应的值,每一次都设置感觉有点烦;
  1. res@tmXBLabels   = (/"90~S~o~N~","60~S~o~N~","30~S~o~N~","0","30~S~o~N~", "60~S~o~N~","90~S~o~N~"/)  
复制代码
根据兰伯特投影的那个例子,简单的写了个函数;试了下感觉可行
  1. ; lon:-180-180 lon_area=1,
  2. ; lon:0:360 else
  3. ; lon_interval和lat_interval 为经纬度的间隔
  4. function add_du_labels(drawlats,drawlate,drawlons,drawlone,lat_interval,lon_interval,lon_area)
  5. local nlat
  6. begin
  7. ;////////////////////////////////////////////////////
  8.     ;------------纬度

  9.     lat_values = ispan(toint(drawlats),toint(drawlate),lat_interval) * 1.  ;间隔30
  10.     nlat = dimsizes(lat_values)

  11.     lat_label_lft = new(nlat,string) ; attached strings.
  12.     lat_label_rgt = new(nlat,string) ; attached strings.
  13.     do n=0,nlat-1
  14.     ;添加适当的空白
  15.         lat_label_rgt(n) = " " + lat_values(n) + "~S~o~N~"
  16.         ;检查是否在北纬、南纬或赤道上
  17.         if(lat_values(n).lt.0) then
  18.             lat_label_lft(n) = lat_values(n) + "~S~o~N~S "
  19.             lat_label_rgt(n) = lat_label_rgt(n) + "S"
  20.         end if
  21.         if(lat_values(n).gt.0) then
  22.             lat_label_lft(n) = lat_values(n) + "~S~o~N~N "
  23.             lat_label_rgt(n) = lat_label_rgt(n) + "N"
  24.         end if
  25.         if(lat_values(n).eq.0) then
  26.             lat_label_lft(n) = lat_values(n) + "~S~o~N~ "
  27.         end if
  28.     end do


  29.     ;------------经度
  30.     ;----------------------------------------------------------------------
  31.     lon_values = ispan(toint(drawlons),toint(drawlone),lon_interval) * 1.
  32.     nlon = dimsizes(lon_values)
  33.     lon_label_bot = new(nlon,string) ; attached strings.
  34.     do n=0,nlon-1
  35.         ;检查是否在东经、西经或 0 度上
  36.         lon_label_bot(n) = " ~C~ ~C~" + abs(lon_values(n)) + "~S~o~N~"
  37.         
  38.         if (lon_area.eq.1) then
  39.             
  40.             ;经度范围为-180-180
  41.             if(lon_values(n).gt.0) then
  42.                     lon_label_bot(n) = lon_label_bot(n) + "E"
  43.             end if
  44.             if(lon_values(n).lt.0) then
  45.                 lon_label_bot(n) = lon_label_bot(n) + "W"
  46.             end if

  47.         else
  48.         
  49.         ;经度范围为0-360
  50.             if(lon_values(n).gt.0.and.lon_values(n).lt.180) then
  51.                     lon_label_bot(n) = lon_label_bot(n) + "E"
  52.             end if
  53.             if(lon_values(n).gt.180.and.lon_values(n).lt.360) then
  54.                 lon_label_bot(n) = " ~C~ ~C~" + abs(lon_values(n)-180) + "~S~o~N~W"
  55.                 ;lon_label_bot(n) = lon_label_bot(n) + "W"
  56.             end if
  57.             if(lon_values(n).eq.360)
  58.                 lon_label_bot(n) = " ~C~ ~C~" + abs(lon_values(n)-360) + "~S~o~N~"
  59.             end if
  60.         end if
  61.         
  62.     end do

  63.     return [/lat_values,lat_label_lft,lon_values,lon_label_bot/]

  64.     end
复制代码
使用方法:需要设置经纬度的起始坐标和间隔
  1. ;------------------------------------------------------
  2.     drawlons=0
  3.     drawlone=360
  4.    
  5.     drawlats=20
  6.     drawlate=90

  7.     lon_interval=60
  8.     lat_interval=30

  9.     res1@gsnMajorLonSpacing   =lon_interval
  10.     res1@gsnMajorLatSpacing   =lat_interval
  11.     res1@mpMinLatF=drawlats
  12.     res1@mpMaxLatF=drawlate

  13.     res1@mpMinLonF=drawlons
  14.     res1@mpMaxLonF=drawlone
  15.     res1@mpCenterLonF          = 180
  16.     lon_area=2
  17.     lonlat_infor=add_du_labels(drawlats,drawlate,drawlons,drawlone,lat_interval,lon_interval,lon_area)
  18.    
  19.     res1@tmYLMode              = "Explicit"
  20.     res1@tmYLValues=lonlat_infor[0]
  21.     res1@tmYLLabels=lonlat_infor[1]

  22.     res1@tmXBMode              = "Explicit"
  23.     res1@tmXBValues=lonlat_infor[2]
  24.     res1@tmXBLabels=lonlat_infor[3]

  25.     res1@tmXBLabelDeltaF=-2 ;x轴标注与刻度的距离
  26.     res1@tmXBLabelFontHeightF=0.08 ;字体大小
  27.     res1@tmYLLabelFontHeightF=0.08
复制代码


密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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