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

📄 yxview.class

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 CLASS
📖 第 1 页 / 共 2 页
字号:
	}
	else {
		local shift  = `.style.marker.size.gmval' / 2 + 	///
			       `.style.label.textgap.gmval'
	}
	local xshift = `shift' * cos(`angle')
	local yshift = `shift' * sin(`angle')

						
	if (`drawn') {					// draw point
		gdi point  `x' `y'				
	}
	else {
		gdi moveto `x' `y'				
	}

	if `"`label'"' == `""' {
		exit
	}

	gdi gm_rmoveto `xshift' `yshift'		// offset for labels

	local label `label'
	gdi ctext  `label'
end


program _draw_styled_points			
	.style.marker.setgdifull				// in case
	local drawn0 0`.style.marker.drawn'

	forvalues j = 1/`:serset N' {
		capture .obs_styles[`j'].marker.setgdifull
		if _rc {
			local drawn `drawn'
		}
		else {
			local drawn 0`.obs_styles[`j'].marker.drawn'
		}

		if `drawn' {
		      gdi point `=serset(`.xvar', `j')' `=serset(`.yvar', `j')'
		}
	}
end


program _draw_weighted_points
	if (! 0`.style.marker.drawn')  exit

	if 0`.serset[`.wvar'].min' < 0 {
		di as error "negative weights not allowed, plot ignored"
		exit
	}

	local wtseries serset.sers[`.wvar']

	local max = 0`.`.`.plotregion'.graphs[1]'.style.max_wted_symsize.gmval'
	local max = cond(`max' , `max', 10)

	local scale = 1.5 / sqrt(`.`wtseries'.min')
							// 1.5 std symsize

	if `scale' * sqrt(`.`wtseries'.max') > `max' {
		local scale = `max' / sqrt(`.`wtseries'.max')
	}

	.style.marker.setgdifull
	gdi jitterseed = `.jitterseed'
	gdi gm_jitter  = `.jitter'
	gdi scatterweight `.serset.id' `.xvar' `.yvar' `.wvar' `scale'
	gdi gm_jitter = 0

end

// ---------------------------------------------------------------------------
//  Currently unique to bar views (and to a lesser extent spike, dropline, and
//  dot).  Returns the minimum/maximum point (in the metric of ord) that the 
//  view will attempt to draw to.

program min_range
	args ord

	class exit "`.minmax_range `ord' min'"
end

program max_range
	args ord

	class exit "`.minmax_range `ord' max'"
end

program minmax_range
	args ord minmax

	if "`ord'" != "`.bar_drop_to.stylename'" {
		class exit "`.base'"
	}

	if "`.type.stylename'" == "rbar" |			///
	  ("`.type.stylename'" == "bar" & "`.bartype.stylename'" == "fixed") {

	    local series serset.sers[`.xvar']

	    local op = cond("`minmax'" == "min" , "-" , "+")
	    class exit "`=`.serset.sers[`.xvar'].`minmax'' `op' `.bar_size'/2'"
	}

	class exit "."


end

program register_with_scale

	if "`.plotregion.isa'" == "" {
		exit
	}

	if `.base' < . {
		local ord = cond("`.bar_drop_to.stylename'" == "x", "y", "x")
		.`.plotregion'.`ord'scale.add_view `.objkey'
	}

/* delete
	if "`.type.stylename'" != "bar" {
		class exit (.)
	}
	if "`.bartype.stylename'" != "fixed" {
		class exit (.)
	}
*/

	local ord `.bar_drop_to.stylename'
	.`.plotregion'.`ord'scale.add_view `.objkey'
end


// ---------------------------------------------------------------------------
program next_default_series
	class exit = `.`.`.plotregion'.graphs[1]'.n_views' + 1
end


// ---------------------------------------------------------------------------
//  Set the type of the view, recreate the object if necessary.

program _set_type
	args type

	if "`type'" == "`.type.setting'" {
		exit
	}

	.type.setstyle, style(`type')

	tempname pnm				// direct tie into twoway
	capture cutil which twoway_`1'_parse 
	if _rc {				// default parser
		.`pnm' = .twoway_yxview_parse.new 
	}
	else {					// custom parser
		.`pnm' = .twoway_`type'_parse.new 
	}
	if "`.`pnm'.isa'" == "" {
		di as error "`1' not supported"
		exit 198
	}

	if "`.classname'" == "`.`pnm'.viewclass'" {	// same class
		exit					// we're done
	}

	if "`.classname'" == "y2xview_g" & "`.`pnm'.viewclass'" == "yxview" {
		exit					// lesser class
	}

	if "`.`.plotregion'.isa'" == "" { 		// impossible
		di as error "cannot retype/reclass, plotregion not stored"
		exit 198
	}

	tempname self serset			// find and "delete" ourself 
	.`self' = .ref				// dangerous, keep ref to self
	.`serset' = .serset.ref			// so names still resolve
	local preg `.`self'.plotregion'
	// could hold a tempstyle and loop if "`.stylename'" == ""
	forvalues i = 1/0`.`preg'.dynamicmv.arrnels' {
		if "`.`preg'.dynamicmv[`i'].uname'" == "`.uname'" {
			_cls nameof `.`preg'.objkey' dynamicmv[`i']
			local name `r(name)'
			.`preg'.`name'.ref = NULLKEY
			continue, break
		}
	}

	if "`name'" == "" {				// impossible
		di as error "cannot retype, view not found"
		exit 198
	}

							// create new view
	tempname log
	.`log' = {}
	.`pnm'.viewtype = "`type'"
	.`pnm'.log_create_view , log(`log') name(`name')		  ///
		plotregion(`.`preg'.objkey') serset(`serset')		  ///
		yvar(`.`self'.yvar') xvar(`.`self'.xvar') 		  ///
		wvar(`.`self'.wvar') style(`.style.stylename')
	_fr_runlog `log' , nologging

/*
	.`pobj`i''.log_create_view , log(`log') view(`j')	 ///
		name(plot`++plotid') plotregion(`plreg`i'')	 ///
		serset(sersets[`serset`i'']) seriesid(`++serid')
*/
/*
	.`preg'.Declare `name' = .`pnm'.log_create_view,	 	///
		yvar(`.`self'.yvar') xvar(`.`self'.xvar') 		///
		wvar(`.`self'.wvar') style(`.style.stylename')		///
		serset(`serset') plotregion(`.`preg'.objkey')
*/

/*
	.`preg'.`name'._set_to_active_context		// dangerous
*/

end


/* -------------------------------------------------------------------------*/
/* add a xyview based on the current setting of .addview.
   May use T_Name containing the full name of the xyview if view does not
   hold plotregion and plotregion graph.
*/

program _set_addview
	gettoken xytype options : 0 , parse(" ,")

	if "`xytype'" == "none" {
		exit
	}

	.addview.setstyle , style(none)			/* always none */

	if "`.`.plotregion'.graphs[1]'" == "" {
		._last_xyandplotreg graph plotregion : $T_Name 	/* get names */
		if "`plotregion'" != "" & "`graph'" != "" {
			.set , plotregion(`plotregion') 
			.`plotregion'.set , graph(`graph')
		}
		else {
			di in white "graph or plotregion not defined for view"
			exit 198
		}
	}

	if "`.Local.serset.isa'" == "" {
	     di in white "cannot add view, view does not reference its serset"
	     exit
	}

	if "`xytype'" == "median_bands" | "`xytype'" == "splined_medians" {
		._run_derived `xytype' `options'
		exit						/* EXIT */
	}

	preserve					/* use the serset */
	.Local.serset.set
	drop _all
	serset use
							/* add view */
	._run_`xytype' `.serset.sers[`.xvar'].name' 			/*
		*/     `.serset.sers[`.yvar'].name' `options'
end


/* -------------------------------------------------------------------------*/
program _last_xyandplotreg
	args xymac plregmac colon rest

	if "`0'" != "nogscope" {
		local name gscope
	}

	gettoken tok rest : rest , parse(" .") 
	while "`rest'" != "" {
		if 0`.`name'.isofclass graph_g' {
			local graph `name'
		}
		if 0`.`name'.isofclass plotregion' {
			local plotregion `name'
		}
		if "`tok'" != "." {
			local name `name'.`tok'
		}
		gettoken tok rest : rest , parse(" .") 
	}
	local last `tok'			/* assumes no trailing .'s */

	c_local `xymac' `graph'
	c_local `plregmac' `plotregion'

end

/* -------------------------------------------------------------------------*/
program _run_derived
	gettoken xytype options : 0 , parse(" ,")

	if "`xytype'" == "median_bands" {
		local type median_bands
	}
	else	local type spline

	tempname derived
	.`derived' = .derived_serset.new , base(`.serset.objkey')	///
		      type(`type')  x(`.xvar') y(`.yvar') `options'
	.`derived'.set
	.`derived'.sort 2

	.`.`.plotregion'.graphs[1]'.addplots line 			///
		`.serset.nameof `.yvar'' `.serset.nameof `.xvar'' , 	///
		useplotregion(`.`.plotregion'.objkey')			///
		serset(`.`derived'.objkey'.ref) nologging notitling
end

/* -------------------------------------------------------------------------*/
/* member programs to create new views
   most could just become simple addplots of the appropriate type.
*/

program _run_regression_line
	gettoken x 0 : 0 , parse(" ,")
	gettoken y 0 : 0 , parse(" ,")

	syntax [ , ATobs POINTs(integer 300) ]

	qui regress `y' `x'

	if "`atobs'" == "" {
		summarize `x' , meanonly
		drop _all
		qui set obs `points'
		qui gen `x' = r(min) + (_n-1)*(r(max) - r(min)) / (`points' -1)
	}
	else {
		drop `y'
	}

	._add_regression `x' `y'

end

program _run_quadratic_regression
	gettoken x 0 : 0 , parse(" ,")
	gettoken y 0 : 0 , parse(" ,")

	syntax [ , ATobs POINTs(integer 300) ]

	tempname x2
	gen double `x2' = `x'*`x'
	qui regress `y' `x' `x2'

	if "`atobs'" == "" {
		summarize `x' , meanonly
		drop _all
		qui set obs `points'
		qui gen `x' = r(min) + (_n-1)*(r(max) - r(min)) / (`points' - 1)
		qui gen double `x2' = `x'*`x'
	}
	else {
		drop `y'
	}

	._add_regression `x' `y'
end

program _run_fractional_polynomial
	gettoken x options : 0       , parse(" ,")
	gettoken y options : options , parse(" ,")

	qui fracpoly regress `y' `x' `options'

	_add_regression `x' `y' fracpred
end

program _add_regression
	args x y predict


	if "`predict'" == "" {
		local predict predict
	}

	tempname yhat
	qui `predict' `yhat'

	if `.conf_interval.isfalse' {
		.`.`.plotregion'.graphs[1]'.addplots line `yhat' `x' ,	  ///
			sort(`x') useplotregion(`.`.plotregion'.objkey')  ///
			nologging notitling
		exit
	}

	if `.ci_of_expected.istrue' | "`predict'" == "fracpred" {
		local se_method stdp
	}
	else	local se_method stdf

	tempname se min max
	qui `predict' `se' , `se_method'
	qui gen `min' = `yhat' - invttail(e(df_r), ((100-c(level))/200)) * `se'
	qui gen `max' = `yhat' + invttail(e(df_r), ((100-c(level))/200)) * `se'
	label variable `min' "`c(level)'% CI"
	label variable `max' "`c(level)'% CI"

//	local lstyle  p`.`.`.plotregion'.plot1.next_default_series'
	local cistyle ci

	.`.`.plotregion'.graphs[1]'.addplots 				///
		rarea `min' `max' `x' , sort(`x') pstyle(`cistyle') ||	///
		line `yhat' `x', sort(`x') 				///
		useplotregion(`.`.plotregion'.objkey')			///
		nologging notitling
//	.`.`.plotregion'.graphs[1]'.addplots line `yhat' `min' `max' `x' , ///
//		sort(`x')  useplotregion(`.`.plotregion'.objkey') 	   ///
//		pstyle(. `cistyle' `cistyle') nologging notitling
end


program _run_ksm_mean
	gettoken x options : 0       , parse(" ,")
	gettoken y options : options , parse(" ,")

	tempname yhat
	ksm `y' `x' , gen(`yhat') nograph , `options'
	label variable `yhat' "ksm, mean `options'"

	.`.`.plotregion'.graphs[1]'.addplots line `yhat' `x' , sort(`x')  ///
		useplotregion(`.`.plotregion'.objkey') nologging notitling
end

program _run_ksm_line
	gettoken x options : 0       , parse(" ,")
	gettoken y options : options , parse(" ,")

	tempname yhat
	ksm `y' `x' , gen(`yhat') line nograph , `options'
	label variable `yhat' "ksm, line `options'"

	.`.`.plotregion'.graphs[1]'.addplots line `yhat' `x' , sort(`x')  ///
		useplotregion(`.`.plotregion'.objkey') nologging notitling
end

program _run_ksm_lowess
	gettoken x options : 0       , parse(" ,")
	gettoken y options : options , parse(" ,")

	tempname yhat
	ksm `y' `x' , gen(`yhat') lowess nograph , `options'
	label variable `yhat' "ksm, lowess `options'"

	.`.`.plotregion'.graphs[1]'.addplots line `yhat' `x' , sort(`x')  ///
		useplotregion(`.`.plotregion'.objkey') nologging notitling
end

/*  now uses _run_derived
program _run_median_bands
	args x y

	.`.`.plotregion'.graphs[1]'.addview `y' `x' , c(m) s(i) sort(`x') ///
		name(median_bands) plotregion(`.`.plotregion'.objkey') nolog
end

program _run_splined_medians
	args x y

	.`.`.plotregion'.graphs[1]'.addview `y' `x' , c(s) s(i) sort(`x')  ///
		name(splined_medians) plotregion(`.`.plotregion'.objkey') nolog
end
*/

//  ---------------------------------------------------------------------------
//  Handle grouping and ungrouping (shattering) the styles for the
//  observations.  Note that many views may ignore that ungrouping has
//  occured, only those using _draw_points are assured to use the information

program _set_grouped
	args grouped

	if "`grouped'" == "`.grouped.setting'" {
		exit
	}

	.grouped.setstyle, style(`grouped')

	if "`grouped'" == "yes" {			// signal to ungroup
		while 0`.obs_styles.arrnels' {
			.obs_styles.Arrpop
		}

		exit						// Exit
	}

	if 0`.obs_styles.arrnels' {
		exit					// Nothing to do, exit
	}

	if "`.obs_styles.isa'" == "" {
		.Declare array obs_styles
	}

	forvalues j = 1/`:serset N' {
		.obs_styles[`j'] = .`.style.classname'.new , style(`.style.snm')
	}

end

// ---------------------------------------------------------------------------
// command logged by parse to allow connect() option to over-ride type.

program _maybe_override_type
	if "`.type.stylename'" == "scatter" {
		.type.setstyle , style(connected)
	}
end

⌨️ 快捷键说明

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