⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bargraph_g.class

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 CLASS
📖 第 1 页 / 共 5 页
字号:

	c_local `drawnmac' 0`drawn'
end

program _draw_boxset
	args j pos drawnmac has_pat i_g styledex

	local gap = 0`.barsize' * `.graphstyle.gap.prop'

	forvalues i = 1/0`.sersets[1].sers[`.vargroup'].categories' {
		if 0`.shadevar' == 0`.vargroup' {
			local styledex `._style_cat `=`j'+1''
			local has_pat `._set_barstyle `styledex''
		}
		local drawme = serset(1, `=`j'+1') < .		    // median
		.draw_box `=`pos'' `i' `j' 0`has_pat' `i_g' `styledex'
		if (! `drawme')  local drawme = serset(1, `j') < .  // outside
		if `drawme' | `.fill.istrue' {
			scalar `pos' = `pos' + `.barsize' + `gap'
			local drawn 1
		}
	}

	if 0`drawn' | `.fill.istrue' {
		scalar `pos' = `pos' - `gap'
	}

	c_local `drawnmac' 0`drawn'
end

program _sumrange_vargrp
	args j

	local beg = `j' + 1
	local end = `j' + 0`.sersets[1].sers[`.vargroup'].categories'
	local sumrange 0
	forvalues i = `beg'/`end' {
		if serset(1, `i') < . {
			local sumrange = 0`sumrange' + abs(serset(1, `i'))
		}
	}

	class exit = 0`sumrange'
end


program _style_cat
	args j

	local cat = serset(`.shadevar' , `j')
	local i_cat = `.sersets[1].sers[`.shadevar'].vlab_pos_of `cat''
	if (`i_cat' == 0)  local i_cat `cat'

	class exit = `i_cat'
end


program _set_barstyle
	args i

	if "`.barstyles[`i'].isa'" == "" {
		.barstyles[`i'] = .seriesstyle.new, style(scheme p`i')
		.SetIntensity `i'
	}

	if `.dotplot.istrue' {
		.barstyles[`i'].marker.setgdifull
	}
	else {
		.barstyles[`i'].area.setgdifull
	}

	local pat `.barstyles[`i'].area.linestyle.pattern.stylename'
	class exit = ! ("`pat'" == "solid" | "`pat'" == "blank")
end


program _set_linestyle
	args i

	.barstyles[`i'].area.setlinestylefull
end


program _set_line_as_areastyle
	args i

	.barstyles[`i'].area.setlineasareafull
end


program _set_barsize

	._get_grp_cts var grp sup

						/* compute bars and gap sizes */
	local bars = `var' * `grp' * `sup'

	if `.fill.istrue' {
	    .barsize = 100 / (`bars'					  ///
		+ `sup'*`grp'*(`var'-1) * `.graphstyle.gap.prop' 	  ///
		+       `sup'*(`grp'-1) * `.graphstyle.group_gap.prop'    ///
		+             (`sup'-1) * `.graphstyle.supgroup_gap.prop' ///
		+                    2  * `.graphstyle.outer_gap.prop')

	    exit						/* EXIT */
	}

	local bars  0
	local n_grp 0
	local n_sup 0
	local real_grps 0

	capture local c_grp = serset(`.group', 1)
	capture local c_sup = serset(`.supergroup', 1)

	forvalues j = 1/0`:serset N' {

		if (serset(1, `j') >= .)  continue
		if (`.boxplot.istrue' & serset(`.boxsrt', `j') != 1)  continue

		local ++bars

		if `c_grp' != serset(`.group', `j') | 		/*
		*/ `c_sup' != serset(`.supergroup', `j') {
			local ++real_grps
		}

		if `c_grp' != serset(`.group', `j') {
			capture local c_grp = serset(`.group', `j')

			if `bars' != 0`bars_grp' {
				if `c_sup' == serset(`.supergroup', `j') {
					local ++n_grp
				}
			}
			local bars_grp `bars'
		}

		if `c_sup' != serset(`.supergroup', `j') {
			capture local c_sup = serset(`.supergroup', `j')

			if `bars' != 0`bars_sup' {
				local ++n_sup
			}
			local bars_sup `bars'
		}
	}
	local ++real_grps

	
	if `.stack.istrue' {
		.barsize = 100 / (`real_grps'				///
			   +  `n_grp' * `.graphstyle.group_gap.prop'	///
			   +  `n_sup' * `.graphstyle.supgroup_gap.prop'	///
			   +       2  * `.graphstyle.outer_gap.prop')
	}
	else {
		local n_var = `bars' - `n_sup' - `n_grp' - 1
		.barsize = 100 / (`bars'				///
			   +  `n_var' * `.graphstyle.gap.prop'		///
			   +  `n_grp' * `.graphstyle.group_gap.prop'	///
			   +  `n_sup' * `.graphstyle.supgroup_gap.prop'	///
			   +       2  * `.graphstyle.outer_gap.prop')
	}

end


program _sort

	if (! 0`.vargroup' & !0`.boxsrt')  exit

	if 0`.supergroup' {
		local neg = cond(`.sup_asc_sort.istrue', "" ,  "-")
		if (`.supsrt')  local sort `neg'`.supsrt'
		local sort `sort' `neg'`.supergroup'
	}

	if 0`.group' {
		local neg = cond(`.grp_asc_sort.istrue', "" ,  "-")
		if (`.grpsrt')  local sort `sort' `neg'`.grpsrt'
		local sort `sort' `neg'`.group'
	}

	local neg = cond(`.var_asc_sort.istrue', "" ,  "-")
	if (`.varsrt')  local sort `sort' `neg'`.varsrt'
	local sort `sort' `neg'`.vargroup'

	if (0`.boxsrt')  local sort `sort' `.boxsrt' 1

	.sersets[1].sort `sort'
end

program _reset_scaling

	.sersets[1].set

	local d = cond(`.horizontal.istrue', "x", "y")
	.plotregion1.`d'scale.reinit

	if `.stack.isfalse' & `.percentages.isfalse' {
		.plotregion1.`d'scale.addmin `.sersets[1].sers[1].min'
		.plotregion1.`d'scale.addmax `.sersets[1].sers[1].max'
		if `.include0.istrue' {
			.plotregion1.`d'scale.addmin 0
			.plotregion1.`d'scale.addmax 0
		}
		.scaleaxis.set_ticks
		exit						/* EXIT */
	}

	local var = max(1, 0`.sersets[1].sers[`.vargroup'].categories')
	local grp = max(1, 0`.sersets[1].sers[`.group'].categories')
	local sup = max(1, 0`.sersets[1].sers[`.supergroup'].categories')

	local min = cond(`.include0.istrue', 0 , 1e300)
	local max = -1e300
	local j 0

						/* separate loops for speed */
	if `.stack.istrue' {
	    forvalues i_s = 1/`sup' {
		forvalues i_g = 1/`grp' {
		    local sum 0
		    local sng 0
		    local sumrng 0
		    forvalues i_v = 1/`var' {
			if serset(1, `++j') < . {
			    if serset(1, `j') > 0 {
				 local sum = `sum' + serset(1, `j')
			    }
			    else local sng = `sng' + serset(1, `j')

			    if `.percentages.istrue' {
			    	local sumrng = `sumrng' + abs(serset(1, `j'))
			    }
			}
		    }
		    if `.percentages.istrue' {
		    	if `sumrng' > 0 {
			    local sum = cond(`sumrng'!=., 		/*
			    	*/ 100 * `sum' / `sumrng', -1e300)
			    local sng = cond(`sumrng'!=., 		/*
			    	*/ 100 * `sng' / `sumrng', 0)
			}
		    }

		    local max = max(`max', `sum')
		    local min = min(`min', `sng')
		}
	    }
	    .plotregion1.`d'scale.addmin `min'
	    .plotregion1.`d'scale.addmax `max'
	    .scaleaxis.set_ticks
	    exit						/* EXIT */
	}

						/* percentages, no stack */
	local j 0
	forvalues i_s = 1/`sup' {
	    forvalues i_g = 1/`grp' {
		local sumrng 0
		local min_g = cond(`.include0.istrue', 0 , 1e300)
		local max_g -1e300
		forvalues i_v = 1/`var' {
		    if serset(1, `++j') < . {
			local max_g = max(`max_g', serset(1, `j'))
			local min_g = min(`min_g', serset(1, `j'))

			local sumrng = `sumrng' + abs(serset(1, `j'))
		    }
		}
		if `sumrng' > 0 {
		    local max = max(`max', `max_g'/`sumrng')
		    local min = min(`min', `min_g'/`sumrng')
		}
	    }
	}
	local max = 100 * `max'
	local min = 100 * `min'

	.plotregion1.`d'scale.addmin `min'
	.plotregion1.`d'scale.addmax `max'
	.scaleaxis.set_ticks
end


// ---------------------------------------------------------------------------
program is_scale
	args ord

	class exit = cond(`.horizontal.istrue' , ("`ord'" == "x") , 	///
		     ("`ord'" == "y"))
end


/* -------------------------------------------------------------------------*/
/* Relable X axes on the graph					
*/

program _relabel_xaxes

	syntax [ , noLEGEND ]

	.sersets[1].set

	if `.stack.istrue' {
		.varaxis.draw_view.set_false
	}
	else {
		if `.graphstyle.label_vargroups.istrue' {
			.varaxis.draw_view.set_true
		}
	}

	.serset.set				/* set the current serset */
	._sort					/* sort serset */

	._set_barsize

	if "`.supaxis.isa'" != "" {			/* clear axes */
		.supaxis.clear_ticks
	}
	if "`.grpaxis.isa'" != "" {
		.grpaxis.clear_ticks
	}
	.varaxis.clear_ticks

	_sort						/* sort serset */

	if ! `.fill.istrue' {				/* unfilled version */
		._relabx_nofill
		if "`legend'" == "" {
			.legend.rebuild , all
			.legend.repositionkeys
		}
		exit					/* EXIT */
	}

	._get_grp_cts base grp sup
	._get_gaps gap_base gap_grp gap_sup gap_out

	local n_b `.sersets[1].sers[`.vargroup'].categories'

	if 0`.group' {			/* xsize of a bar grouping */
		if `.stack.istrue' {
			local grp_sz = `.barsize'
		}
		else {
			local grp_sz = `.barsize'*`n_b' + `gap_base'*(`n_b'-1)
		}
	}
	else	local grp_sz = 0

	if 0`.supergroup' {		/* xsize of a super grouping */
		local supgrp_sz = `grp_sz'*`grp' + `gap_grp'*(`grp'-1)
	}
	else	local supgrp_sz = 0

							/* make labels */
	local grpser sersets[1].sers[`.group']
	local supser sersets[1].sers[`.supergroup']
	local x `gap_out'					
	local j 1
	forvalues i_s = 1/`sup' {
	    if 0`.supergroup' {
		.supaxis.major.add_ticks `=`x'+`supgrp_sz'/2' 	/*
		    */ `"`.`supser'.value_label `=serset(`.supergroup', `j')''"'
	    }
	    forvalues i_g = 1/`grp' {
		._relabel_varset `x' `j'
		if 0`.group' {
		    .grpaxis.major.add_ticks `=`x'+`grp_sz'/2' 	/*
			*/ `"`.`grpser'.value_label `=serset(`.group', `j')''"'
		}
		if `i_g' != `grp' {
			local x = `x'  + `gap_grp'
		}
		local x = `x' + `grp_sz'
		if `.boxplot.istrue' {
			forvalues i_b = 1/`n_b' {
				local j = `j' + 5
				while serset(`.boxsrt', `j') == 9999 {
					local ++j
				}
			}
		}
		else	local j = `j' + `n_b'
	    }
	    local x = `x'  + `gap_sup'
	}

	if "`legend'" == "" {
		.legend.rebuild , all
		.legend.repositionkeys
	}

	if `.showvaraxis.istrue' & "`.grpaxis.isa'" != "" {
		.grpaxis.style.editstyle linestyle(none) editcopy
	}
end

program _relabx_nofill

	.sersets[1].set

	._get_gaps gap_var gap_grp gap_sup gap_out

	if `.stack.istrue' {
		local gap_var 0
		local back_var 0
	}
	else {
		local back_var `gap_var'
	}

	local grpser sersets[1].sers[`.group']
	local supser sersets[1].sers[`.supergroup']
	local varser sersets[1].sers[`.vargroup']

	capture local c_grp = serset(`.group', 1)
	capture local c_sup = serset(`.supergroup', 1)

	local lab_grp `"`.`grpser'.value_label `c_grp''"'
	local lab_sup `"`.`supser'.value_label `c_sup''"'

	local x_grp `gap_out'
	local x_sup `gap_out'
	local x     `gap_out'

	local N1 = 0`:serset N' + 1
	forvalues j = 1/`N1' {

		if (`.boxplot.istrue' & `j' != `N1' &			///
		    serset(`.boxsrt', `j') != 1)  continue

		if `c_grp' != serset(`.group', `j') |			///
		   `c_sup' != serset(`.supergroup', `j') {

		    if 0`new_grp' {
			.grpaxis.major.add_ticks			///
				`=(`x'+`x_grp'-`back_var')/2' `"`lab_grp'"'
			local x = `x' + `gap_grp' - `gap_var'
			local x_grp `x'
			local new_grp 0
		    }

		    capture local c_grp = serset(`.group', `j')
		    local lab_grp `"`.`grpser'.value_label `c_grp''"'
		}

		if `c_sup' != serset(`.supergroup', `j') {

		    if 0`new_sup' {
		       local x = `x' - `gap_grp'
		       .supaxis.major.add_ticks `=(`x'+`x_sup')/2' `"`lab_sup'"'
		       local x = `x' + `gap_sup'
		       local x_grp `x'
		       local x_sup `x'
		       local new_sup 0
		    }
		    capture local c_sup = serset(`.supergroup', `j')
		    local lab_sup `"`.`supser'.value_label `c_sup''"'
		}

		if `.stack.istrue' {
			if `c_grp' != 0`cur_grp' {
				local shifted 0
				local cur_grp `c_grp'
			}
			if serset(1, `j') < . & !0`shifted' {
				local x = `x' + `.barsize'
				local shifted 1
				local new_grp 1
				local new_sup 1
			}
		}
		else {
		    if serset(1, `j') < . {
			if `.graphstyle.label_vargroups.istrue' & 	///
			   ! `.stack.istrue' {
			   local lab					///
			      `.`varser'.value_label `=serset(`.vargroup',`j')''
			   .varaxis.major.add_ticks			///
			    	`=`x'+`.barsize'/2' `"`lab'"'
			}
			local x = `x' + `.barsize' + `gap_var'
			local new_grp 1
			local new_sup 1
		    }
		}
	}
end

program _relabel_varset
	args x j0

	.sersets[1].set

	if ! `.graphstyle.label_vargroups.istrue' | `.stack.istrue' {
		exit						/* EXIT */
	}

	local bars =  max(1, 0`.sersets[1].sers[`.vargroup'].categories')
	local gap  = `.barsize' * `.graphstyle.gap.prop'

	local series sersets[1].sers[`.vargroup']

	local x   = `x' + `.ba

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -