NCL添加误差棒

关于NCL中给柱状图或者折线图添加误差棒或误差条的方法

前言

正好需要给一个时间序列的柱状图添加误差棒,但官网上看到的图都是加了误差阴影,于是求助了好几位同学和师姐才明白怎么画误差棒,原来图形都要一个一个添加而不是直接会有个函数来加好。

现在总结如下:

一、误差棒

在这里插入图片描述
以上误差棒示例图片来源:百度图片

代码如下(示例):

;首先需要画好一个柱状图或折线图plot
  ;************************************************
  ; add error bars
  ;************************************************  
  polyres                   = True       ; marker resources
   polyres@gsMarkerIndex     = 1.0        ; index for circle
   polyres@gsMarkerSizeF     = 0.03       ; size 
   polyres@gsMarkerThicknessF= 2.0 ;3.0
   polyres@gsMarkerColor     = "blue"
   polyres@gsLineDashPattern = 0
   polyres@gsLineColor       = "blue"
   polyres@gsLineThicknessF  = 2.0 ;3.0
   polyres@PreDraw = True

  error_bar = new(dimsizes(gmst_esmean),graphic)
  centers   = new(dimsizes(gmst_esmean),graphic)

  ;--------- Manually create and attach legend---------
   res_lines                   = True                  ; polyline mods desired
    res_lines@gsLineDashPattern = 0.                    ; solid line
    res_lines@gsLineThicknessF  = 2.                    ; line thicker
    res_lines@gsLineColor       = "blue"                 ; line color

; loop through the points  
  dum = new(78, graphic) ;这里设定横轴共有39个点,因为每个点的误差棒上面需要一个小横线下面也需要一个,所以共创建横轴点数2倍的dum
  do t = 0, 38  ;按照横轴点数来循环
  ; add a polymarker as the center of the error bar located at each data point
  ; 先画中心的圆点和竖着的线
    centers(t)   = gsn_add_polymarker(wks,plot,t+1982,gmst_esmean(t),polyres)
    error_bar(t) = gsn_add_polyline(wks,plot,(/t+1982,t+1982/),(/gmst_esmean(t)+error(t),gmst_esmean(t)-error(t)/),polyres)

    xx = (/1981.85+t,1982.15+t/)
    ;再画上面的小横线
    yy   = (/gmst_esmean(t)+error(t), gmst_esmean(t)+error(t)/)
    dum(t) = gsn_add_polyline(wks,plot,xx,yy,res_lines) ; add polyline 

    delete(yy)
     ;最后画下面的小横线
     yy   = (/gmst_esmean(t)-error(t), gmst_esmean(t)-error(t)/)
    dum(t+39) = gsn_add_polyline(wks,plot,xx,yy,res_lines) ; add polyline

    delete(xx)
    delete(yy)

  end do

二、误差阴影

在这里插入图片描述
其实这里就是官网给出的,思路是找到多边形的横坐标和竖坐标,然后填个色就行

代码如下(示例):

error = dim_stddev_n_Wrap(timeseries, 0);/sqrt(39)
  timeseries := dim_avg_n_Wrap(timeseries, 0)
  trend = trend_manken(timeseries, True, 0)
  error_up = timeseries + error
  error_down = timeseries - error
  ;*******************************************
  ; define a polygon centered with +/- error
  ;*******************************************
   polygon_x = new((/78/), float)
     polygon_x(0:38) = year
     polygon_x(39:77) = year(::-1)
    polygon_y = new((/78/), float)
     polygon_y(0:38) = error_down(:)
     polygon_y(39:77) = error_up(::-1)
    
  ;************************************************
  ; add error bars
  ;************************************************  
   
    gsres                   = True                        ; poly res
    gsres@tfPolyDrawOrder   = "Predraw"                   ; draw this first
    gsres@gsFillColor       = "gray"                 ; color chosen

  dummy = gsn_add_polygon (wks1, plot, polygon_x, polygon_y, gsres)

希望可以帮助到大家~
我也是个代码小白,起步阶段都是靠搜索和在出错中不断实践进行学习的,希望遇到困难的你不要灰心,总会有解决办法哒!

NCL(NCAR Command Language)是一种用于数据分析和可视化的编程语言。要在NCL添加IPCC中的色带,可以使用以下代码: ```ncl load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" ; 加载gsn_code.ncl脚本 load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" ; 加载gsn_csm.ncl脚本 load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/conpack_1.ncl" ; 加载conpack_1.ncl脚本 begin ; 定义数据和绘图参数 data = random_normal( (/20, 20/) ) res = True res@cnFillOn = True res@cnFillPalette = "BlueWhiteOrangeRed" res@cnLinesOn = False res@cnLineLabelsOn = False res@cnInfoLabelOn = False res@sfXArray = ispan(1,20,1) res@sfYArray = ispan(1,20,1) ; 创建绘图窗口并绘图 wks = gsn_open_wks("x11", "plot") plot = gsn_csm_contour(wks, data, res) ; 添加IPCC色带 gsn_add_cyclic_color_map(plot, -30,(/-30,-20,0,20,30,40,50,60,80,100,120,140,160,180/), \ (/(/0,0,143/),(/0,0,255/),(/144,238,144/),(/255,255,0/),(/255,165,0/), \ (/255,0,0/),(/128,0,0/),(/102,51,0/),(/160,82,45/),(/210,105,30/), \ (/255,140,0/),(/255,215,0/),(/255,250,205/),(/255,255,255/)/) ) end ``` 在这个例子中,我们首先定义了数据和绘图参数,然后使用`gsn_csm_contour`函数创建一个等值线图。最后,我们使用`gsn_add_cyclic_color_map`函数添加IPCC色带。这个函数接受两个参数:绘图对象和色带的颜色和值。在这个例子中,我们指定了13个颜色和14个值,其中最小值为-30,最大值为180。注意,这里的值必须与绘图中的数据范围相匹配。 运行上述代码后,应该会在新窗口中显示一个带有IPCC色带的等值线图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值