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)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值