📄 yxview__barlike_draw.ado
字号:
*! version 1.0.1 23jun2004
// ---------------------------------------------------------------------------
// Drawing program for the barlike view such as bars, spikes, and
// droplines
program yxview__barlike_draw
.style.area.setgdifull // set the style
// find our base point
local dropx = "`.bar_drop_to.stylename'" == "x"
if `dropx' {
local min = `.`.plotregion'.yscale.curmin'
local max = `.`.plotregion'.yscale.curmax'
}
else {
local min = `.`.plotregion'.xscale.curmin'
local max = `.`.plotregion'.xscale.curmax'
}
if `.base' < . {
local base `.base'
}
else {
if `min' <= 0 & `max' >= 0 {
local base 0
}
else {
local base = cond(`max' < 0 , `max' , `min')
}
}
.serset.set // just in case
draw_`.type.stylename' `dropx' `base' // draw type
end
program draw_bar
args dropx base
draw_`.bartype.stylename' `dropx' `base' // draw type
end
program draw_fixed
args dropx base
local d = `.bar_size' / 2
if `dropx' {
forvalues j = 1/`:serset N' {
local x = serset(`.xvar', `j')
gdi rectangle `=`x'-`d'' `base' ///
`=`x'+`d'' `=serset(`.yvar', `j')'
}
}
else {
forvalues j = 1/`:serset N' {
local y = serset(`.xvar', `j')
gdi rectangle `base' `=`y'-`d'' ///
`=serset(`.yvar', `j')' `=`y'+`d''
}
}
end
program draw_obs
args dropx base
// local min = `.`.plotregion'.xscale.min' // not curmin
// local max = `.`.plotregion'.xscale.max'
local min = 0`.serset.sers[0`.xvar'].min'
local max = 0`.serset.sers[0`.xvar'].max'
.bar_size = (1 - `.bar_gap'/200) * (`max' - `min') / ///
(`:serset N' - (`:serset N' > 1))
draw_fixed `dropx' `base'
end
program draw_spanning
args dropx base
if `dropx' {
forvalues j = 1/`=`:serset N'-1' {
gdi rectangle `=serset(`.xvar', `j')' `base' ///
`=serset(`.xvar', `=`j'+1')' `=serset(`.yvar', `j')'
}
}
else {
forvalues j = 1/`=`:serset N'-1' {
gdi rectangle `base' `=serset(`.xvar', `j')' ///
`=serset(`.yvar', `j')' `=serset(`.xvar', `=`j'+1')'
}
}
end
program draw_dropline
args dropx base
// drop lines
draw_spike `dropx' `base'
// symbols
if "`.style.marker.symbol'" == "none" {
exit
}
if `dropx' {
._draw_points
}
else {
nobreak {
local holdx `.xvar'
.xvar = .yvar
.yvar = `holdx'
._draw_points
.yvar = .xvar
.xvar = `holdx'
}
}
end
program draw_spike
args dropx base
// drop lines
if `dropx' {
forvalues j = 1/`:serset N' {
local x = serset(`.xvar', `j')
gdi line `x' `base' `x' `=serset(`.yvar', `j')'
}
}
else {
forvalues j = 1/`:serset N' {
local y = serset(`.xvar', `j')
gdi line `base' `y' `=serset(`.yvar', `j')' `y'
}
}
end
program draw_area
args dropx base
local n : serset N
while `n' > 0 & ///
(`=serset(`.xvar', `n')' >= . | `=serset(`.yvar', `n')' >= .) {
local --n
}
local beg 1
while `beg' <= `n' & ///
(`=serset(`.xvar', `beg')' >= . | `=serset(`.yvar', `beg')' >= .) {
local ++beg
}
if `beg' >= `n' {
exit
}
if ! 0`.style.connect_missings' {
draw_separate_areas `dropx' `base' `beg' `n'
exit
}
if `dropx' {
gdi moveto `=serset(`.xvar', `beg')' `=serset(`.yvar', `beg')'
gdi polybegin
forvalues j = `beg'/`n' {
gdi lineto `=serset(`.xvar', `j')' `=serset(`.yvar', `j')'
}
if `.drop_base.istrue' {
gdi lineto `=serset(`.xvar', `n')' `base'
gdi lineto `=serset(`.xvar', `beg')' `base'
}
gdi lineto `=serset(`.xvar', `beg')' `=serset(`.yvar', `beg')'
gdi polyend
}
else {
gdi moveto `=serset(`.yvar', `beg')' `=serset(`.xvar', `beg')'
gdi polybegin
forvalues j = `beg'/`n' {
gdi lineto `=serset(`.yvar', `j')' `=serset(`.xvar', `j')'
}
if `.drop_base.istrue' {
gdi lineto `base' `=serset(`.xvar', `n')'
gdi lineto `base' `=serset(`.xvar', `beg')'
}
gdi lineto `=serset(`.yvar', `beg')' `=serset(`.xvar', `beg')'
gdi polyend
}
end
program draw_separate_areas
args dropx base beg n
local j `beg'
if `dropx' {
while `j' <= `n' {
local beg0 `j'
gdi moveto `=serset(`.xvar', `beg0')' `=serset(`.yvar', `beg0')'
gdi polybegin
while `j' <= `n' {
if (`=serset(`.xvar', `j')' >= . | ///
`=serset(`.yvar', `j')' >= .) {
local ++j
continue, break
}
gdi lineto `=serset(`.xvar', `j')' `=serset(`.yvar', `j')'
local ++j
}
if `.drop_base.istrue' {
gdi lineto `=serset(`.xvar', `n')' `base'
gdi lineto `=serset(`.xvar', `beg0')' `base'
}
gdi lineto `=serset(`.xvar', `beg0')' `=serset(`.yvar', `beg0')'
gdi polyend
}
}
else {
while `j' <= `n' {
local beg0 `j'
gdi moveto `=serset(`.yvar', `beg0')' `=serset(`.xvar', `beg0')'
gdi polybegin
while `j' <= `n' {
if (`=serset(`.xvar', `j')' >= . | ///
`=serset(`.yvar', `j')' >= .) {
local ++j
continue, break
}
gdi lineto `=serset(`.yvar', `j')' `=serset(`.xvar', `j')'
local ++j
}
if `.drop_base.istrue' {
gdi lineto `base' `=serset(`.xvar', `n')'
gdi lineto `base' `=serset(`.xvar', `beg0')'
}
gdi lineto `=serset(`.yvar', `beg0')' `=serset(`.xvar', `beg0')'
gdi polyend
}
}
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -