*--------------------------------- Stata 花蝴蝶-------------------------------
*-蝴蝶身体部分
clear
local b0 = -400
local b1 = 4
local d = 0.01
local N = int((`b1'-`b0')/`d')
set obs `N'
gen t = -400 + _n*`d'
gen a = cos(t)
gen b = cos(4*t)
gen x = sin(t)*(exp(a)-2*b-(sin(t/12)*sin(t/12)*sin(t/12)*sin(t/12)*sin(t/12)))
gen y = cos(t)*(exp(a)-2*b-(sin(t/12)*sin(t/12)*sin(t/12)*sin(t/12)*sin(t/12)))
*-胡须
dropvars x2 y2 x3
gen y2 =.
gen x2 =.
local j = 1
local end = (_pi/4+0.20)
forvalues i = 0.20(0.01)`end'{
qui replace x2 = `i' in `j++'
}
replace y2 = 3*sin(2*(x2-0.20))+2.5
gen x3 = -x2 //左半只
*-绘图
twoway (line y x if y>0, lc(pink*0.55) lw(*2.5)) ///
(line y x if y<0, lc(pink*0.70) lw(*2.5)) ///
(line y2 x2 , lc(yellow*1.2) lw(*3.5)) ///
(line y2 x3 , lc(yellow*1.2) lw(*3.5)), ///
yscale(off) xscale(off) legend(off)
*-----------------------------------------------------------------------------
那段Stata程序更简洁且运行无误的写法应该是:
clear
// 蝴蝶的身体
local b0 = -400
local b1 = 4
local d = 0.01
local N = int((`b1'-`b0')/`d')
set obs `N'
gen t = -400 + _n*`d'
gen a = cos(t)
gen b = cos(4*t)
gen x = sin(t)*(exp(a)-2*b-sin(t/12)^5)
gen y = cos(t)*(exp(a)-2*b-sin(t/12)^5)
// 蝴蝶的胡须
local end = ceil(_pi/0.04)
gen x2 = 0.20 + 0.01*(_n-1) in 1/`end'
gen y2 = 3*sin(2*(x2-0.20))+2.5
gen x3 = -x2
// 作图
twoway (line y x if y>0, lc(pink*0.55) lw(*2.5)) ///
(line y x if y<0, lc(pink*0.70) lw(*2.5)) ///
(line y2 x2 , lc(yellow*1.2) lw(*3.5)) ///
(line y2 x3 , lc(yellow*1.2) lw(*3.5)), ///
yscale(off) xscale(off) legend(off)