:name: ensemble :description: plots for ensemble members :ndims: 2 :nvars: 1 :vizshot_method: ensemble :setting_html: |
:attributes: - :name: style :default: lines :type: string :parser: ggraph :script: | newfrm = opt.delete(:newfrm) GGraph::ensemble(gphys, newfrm, opt) :ggraph: | gropn_1_if_not_yet unless defined?(@@ensemble_options) @@ensemble_options = Misc::KeywordOptAutoHelp.new( ['title', nil, 'Title of the figure'], ['annotate', true, 'if false, do not put texts on the right margin even when newframe==true'], ['index', 1, 'mark index'], ['type', 2, 'mark type'], ['style', 'lines', 'plot style'], ['transpose', false, 'transpose'] ) end opts = @@ensemble_options.interpret(options) gphys = gphys.first2D.copy axnames = gphys.axnames td = axnames.index("validtime") md = axnames.index("member") if td && md.nil? md = td==0 ? 1 : 0 elsif md && td.nil? td = md==0 ? 1 : 0 elsif td.nil? && md.nil? if transpose td = 0 md = 1 else td = 1 md = 0 end end t = gphys.coord(td) nm = gphys.coord(md).length data = gphys.data if newframe fig(t,data) axes(t,nil) title( opts['title'] ) annotate(gphys.lost_axes) if opts['annotate'] end ind = Array.new(2) ind[td] = true data = data.val t = t.val case opts['style'] when "lines" nm.times{|n| ind[md] = n DCL::sgplzu(t, data[*ind], 1, 1) } when "bar" mean = data.mean(md) std = data.stddev(md) DCL::sgplzu(t, mean, 1, 2) DCL::uverbz(t, mean-std, mean+std, 1, 1, 0.01) when "box" mean = data.mean(md) std = data.stddev(md) max = data.max(md) min = data.min(md) DCL::uvbrfz(t, mean-std, mean+std, 1, 1, 0.01) DCL::uverbz(t, mean-std, min, 1, 1, 0.01) DCL::uverbz(t, mean+std, max, 1, 1, 0.01) when "percentile" data = data.transpose(1,0).sort(0) nl = 5 cols = [98999, 95999, 91999, 88999, 84999] dn = nm.to_f/(nl*2-1) nh = (nm-1).to_f/2 nl.times{|n| i = (nh+dn*(nl-n-0.5)).round j = (nh-dn*(nl-n-0.5)).round i = -1 if i >= nm j = 0 if j < 0 d1 = data[i,true] d2 = data[j,true] DCL::uvdifz(t, d1, d2, cols[n], cols[n]) DCL::sgplzu(t, d1, 1, 1) DCL::sgplzu(t, d2, 1, 1) } else raise "style (#{opts['style']}) is invalid" end