目标图形
问题汇总:
1. 怎样把上下错开?
- y主轴要设置成两倍
- Y次轴要多算14/15个刻度,label从1015开始,但是Y次轴实际是从1000开始,下面就空了15
2. 不知道这句是什么意思,我以为是最小值。应该是最小的刻度,官网的解释:an array of data location,应该写成数组的,我直接写的0(瞎写)
3. 图例怎样对齐
明明设置了一样,还是对齐不了
参考同学的代码后修改如下
当我把图例高度修改成一样的时候,也就是0.15,画出来的图是
修改图例水平位置一致的时候,又变成这样了。只能说参数得自己多调试,明天上课去问问调试思路
最后结果:
Code
begin
; 读取文件
slp = asciiread("slp.22.5N_112.5E_201101.txt",-1,"float")
air = asciiread("t2m.22.5N_112.5E_201101.txt",-1,"float")
; 打开工作空间
wksName = "2"
wks = gsn_open_wks("png", wksName)
; =====================================================
; 定义绘图属性 (标题轴、X轴及Y主轴[YL])
res = True
res@gsnDraw = False
res@gsnFrame = False
; 标题
res@tiMainString = "2-m Temp and MSLP in Jan2011"
; 不显示 X 次轴的刻度
res@tmXTOn = False
; X轴的范围值
res@trXMinF = 0
res@trXMaxF = 32
; Y主轴的范围值
res@trYMinF = 0
res@trYMaxF = 28
; X轴及Y主轴的标题
res@tiXAxisString = "Date"
res@tiYAxisString = "temperature (~S~o~N~C)"
res@tiYAxisOffsetYF = -0.15 ;偏移,默认值为0;temperature这个标题的偏移
; X轴的刻度 下X轴
res@tmXBMode = "Explicit" ;下X轴刻度模式
res@tmXBValues = ispan(1,32,5) ;指定模式下刻度值
res@tmXBLabels = ispan(1,32,5) ;指定模式下刻度值对应的标签
res@tmXBMinorValues = ispan(0,32,1)
; Y主轴的刻度
res@tmYLMode = "Explicit"
res@tmYLValues = ispan(0,14,2)
res@tmYLLabels = ispan(0,14,2)
res@tmYLMinorValues = ispan(0,14,1)
; Y主轴标题及刻度的颜色
res@tiYAxisFontColor = "Blue"
res@tmYLLabelFontColor = "Blue"
res@tmYLMajorLineColor = "Blue"
res@tmYLMinorLineColor = "Blue"
; 折线
res@xyMarkLineMode = "MarkLines" ;分别设定XY曲线只画线,标记,或者都画
res@xyLineColor = "blue";设定曲线的颜色
res@xyMarkerColor = "blue"
res@xyMarker = 1 ;设定标记的样式
res@xyMarkerSizeF = 0.01 ; 标记的大小
; 参考线 gsn高级接口,辅助线
res@gsnXRefLine = (/7,11,16,30/) ;XY图中的垂直于X轴的参考线
res@gsnXRefLineColor = (/"black","black","black","black"/) ;XY图中的垂直于x轴的参考线颜色
res@gsnXRefLineDashPatterns = (/3,3,3,3/) ;XY图中参考线的样式
; 图例
res@pmLegendDisplayMode = "Always" ;刻度显示模式
res@pmLegendWidthF = 0.15 ;图例宽度
res@pmLegendHeightF = 0.08 ;图例高度
res@pmLegendParallelPosF = 0.985 ;图例水平位置(向右移动图例)
res@pmLegendOrthogonalPosF = -0.06 ;图例垂直位置(向上移动图例)
res@lgPerimOn = False ;设置图例边框
res@xyExplicitLabels = "temperature" ;设置图例中标签
res@lgLabelFontHeightF = 0.02
res@lgLabelFontColor = "blue"
; =====================================================
; 定义绘图属性 (Y次轴[YR])
res2 = True
res2@gsnDraw = False
res2@gsnFrame = False
; Y次轴的范围值
res2@trYMinF = 1000;之前一直不知道怎样错开,之前写的是1015
res2@trYMaxF = 1030
; Y次轴的刻度
res2@tmYRMode = "Explicit"
res2@tmYRValues = ispan(1015,1030,3)
res2@tmYRLabels = ispan(1015,1030,3)
res2@tmYRMinorValues = ispan(1015,1030,1)
; Y次轴的标题·
res2@tiYAxisString = "SLP (hPa)"
res2@tiYAxisOffsetYF = 0.15
; 折线
res2@xyMarkLineMode = "MarkLines" ;分别设定XY曲线只画线,标记,或者都画
res2@xyLineColor = "red";设定曲线的颜色
res2@xyMarkerColor = "red"
res2@xyMarker = 1 ;设定标记的样式
res2@xyMarkerSizeF = 0.01 ; 标记的大小
; Y次轴标题及刻度的颜色
res2@tiYAxisFontColor = "red"
res2@tmYRMajorLineColor = "red"
res2@tmYRMinorLineColor = "red"
res2@tmYRLabelFontColor = "red"
; 图例
res2@pmLegendDisplayMode = "Always" ;刻度显示模式
res2@pmLegendWidthF = 0.15 ;图例宽度
res2@pmLegendHeightF = 0.15 ;图例高度
res2@pmLegendParallelPosF = 0.9 ;图例水平位置(向右移动图例)
res2@pmLegendOrthogonalPosF = -0.06 ;图例垂直位置(向上移动图例)
res2@lgPerimOn = False ;设置图例边框
res2@xyExplicitLabels = "SLP" ;设置图例中标签
res2@lgLabelFontHeightF = 0.02
res2@lgLabelFontColor = "red"
; =====================================================
; 绘图属性 (添加标记)
resMark = True
resMark@gsMarkerColor = "Black"
resMark@gsMarkerThicknessF = 3.
resMark@gsMarkerIndex = 12
resMark@gsMarkerSizeF = 0.02
; =====================================================
; 画折线图
plot = gsn_csm_xy2(wks,ispan(1,31,1),air,slp,res,res2)
; 添加标记
plot2 = gsn_add_polymarker(wks, plot, (/7, 11, 16, 31/), (/6.500031, 4.500031, 6.750031, 8.750031/), resMark)
; 输出图像
draw(plot)
frame(wks)
end
参考:
NCL实例三(折线图) - 知乎 (zhihu.com)
https://zhuanlan.zhihu.com/p/545825414NCL基础讲解(十)——输出篇之绘图:常用属性 (qq.com)
https://mp.weixin.qq.com/s?__biz=MzA4MTAzMjQzMQ==&mid=402668605&idx=1&sn=5b9b4b7e1f1b497bd67fa151dd8ed72e&scene=23&srcid=0110WhpPifM7fkfF6lWTYGoN#rd