本文受如下文章启发,特此致谢!
Stata Blogs >> How to create animated graphics using Stata
(作者:Chuck Huber, Senior Statistician[1])
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
作者:连玉君 (中山大学)
E-Mail: arlionn@163.com
目录
你一定看过很多 GIF 动态图了,今天,来感受一下教学中的 GIF 动态图的视觉冲击效果!
学生:原来这么简单! 我老师……我被老师……
老师:还可以这样教?!
制作思路: 利用人眼的记忆延迟特征形成视觉上的动态效果。
用循环语句一次性绘制多张参数渐变的图形,如 20 张; 利用 GIF 在线制作网站(如 www.gif5.net)完成 GIF 图片制作:「上传图片」→「调整图片顺序」→「设定播放速度参数」→「开始制作」→「保存图片」。
上面那张清新的图片,核心语句只有一个简单的循环:
forvalues i = 10(-1)0 {
disp " `i'"
}
运行后,屏幕呈现效果如下:
. forvalues i = 10(-1)0 {
2. disp " `i'"
3. }
10
9
8
7
6
5
4
3
2
1
0
为了能在图片中显示上述数字,我们可以使用 Stata 的绘图命令 twoway function
,假装绘制一幅函数图 y = x
,然后将图形的颜色设定为白色,同时把图片的背景、外框等都设定为白色或隐藏模式。这样以来,最终输出的图片在视觉上就好像在白纸上写了几个字而已。通过下面的例子,大家可以学到很多有关 Stata 图形外观设定的选项。
*-----------------------------------------Begin----
local j=301
forvalues i = 10(-1)0 {
#d ;
twoway function y = x,
lcolor(white)
text(0.85 0.5 "Stata连享会",
size(*3.0) color(red*1.5) placement(n))
text(0.7 0.53 "推文来了……",
size(*2.2) color(red*1.2) placement(n))
text(0.3 0.5 "{stSans:`i'}",
size(*7.0) color(blue) placement(n))
xlabel(none) ylabel(none)
ysize(5) xsize(4)
xtitle("") ytitle("")
yscale(off) xscale(off)
graphregion(color(white) style(none))
plotregion(style(none))
scheme(s1mono);
graph export LianXH_`j++'.png,
as(png) width(380) height(720) replace;
#d cr
}
*-----------------------------------------Over----
*-Notes: 相关帮助文档
* help added_text_options //图片中的文字设定
* help graph text //字体,希腊字母等
* 设定图形默认字体,依次点击:
* [主界面 Edit --> Pref --> Graph Pref -> Font]
最后一张图片有所不同,需要单独生成,命令如下:
* 生成最后一张图片
#d ;
local i=8;
twoway function y = x,
text(0.7 0.53 "I Love",
size(*4.0) color(red*1.2) placement(n))
text(0.5 0.5 "Stata",
size(*5.0) color(blue) placement(n))
lcolor(white)
xlabel(none) ylabel(none)
ysize(5) xsize(4)
xtitle("") ytitle("")
yscale(off) xscale(off)
graphregion(color(white) style(none))
plotregion(style(none))
scheme(s1mono);
graph export LianXH_312.png,
as(png) width(380) height(720) replace;
#d cr
完成上述两步后,文件夹中自动输出了如下图片(共 12 张):
第二步,在线制作 GIF 图片。
具体做法同范例 1,不再赘述,仅列出制作单张图片所需的 Stata 命令。
*-----------------------------------------Begin-----------
local GraphCounter = 301
local mu_label = 0.45
local power_label = 2.10
local mu_null = 0
local mu_alt = 2
forvalues sd = 1(-0.01)0.5 {
local z_crit = round(-1*invnormal(0.05)*`sd', 0.01)
local z_crit_label = `z_crit' + 0.75
#delimit ;
twoway
function y=normalden(x,`mu_null',`sd'),
range(-3 `z_crit') color(red) dropline(0) ||
function y=normalden(x,`mu_alt',`sd'),
range(-3 5) color(green) dropline(`mu_alt') ||
function y=normalden(x,`mu_alt',`sd'),
range(`z_crit' 6) recast(area) color(green) ||
function y=normalden(x,`mu_null',`sd'),
range(`z_crit' 6) recast(area) color(red)
title("Power for {&mu}={&mu}{subscript:0} versus {&mu}={&mu}{subscript:A}")
xtitle("{it: z}") xlabel(-3 -2 -1 0 1 2 3 4 5 6)
legend(off)
ytitle("Density") yscale(range(0 0.6))
ylabel(0(0.1)0.6, angle(horizontal) nogrid)
text(`mu_label' 0 "{&mu}{subscript:0}", color(red))
text(`mu_label' `mu_alt' "{&mu}{subscript:A}", color(green)) ;
graph export mu_alt_`GraphCounter'.png, ///
as(png) width(1280) height(720) replace
;
#delimit cr
local ++GraphCounter
local mu_label = `mu_label' + 0.005
local power_label = `power_label' + 0.03
}
*-----------------------------------------Over------------
具体做法同范例 1,不再赘述,仅列出制作单张图片所需的 Stata 命令。
*-----------------------------------------Begin-----------
sysuse auto, clear
local WindowWidth = 500
forvalues WindowUpper = 2200(25)5000 {
local WindowLower = `WindowUpper' - `WindowWidth'
twoway (scatter mpg weight) ///
(lowess mpg weight if weight < (`WindowUpper'-250), lcolor(green)) ///
(lfit mpg weight if weight>`WindowLower' & weight<`WindowUpper', ///
lwidth(medium) lcolor(red)) ///
, xline(`WindowLower' `WindowUpper', lwidth(medium) lcolor(black)) ///
legend(on order(1 2 3) cols(3))
graph export lowess_`WindowUpper'.png, as(png) ///
width(1280) height(720) replace
}
*-----------------------------------------Over------------
The basic idea of lowess smoothing
连享会-直播课 上线了!
http://lianxh.duanshu.com
免费公开课:
直击面板数据模型 - 连玉君,时长:1小时40分钟 Stata 33 讲 - 连玉君, 每讲 15 分钟. 部分直播课 课程资料下载 (PPT,dofiles等)
支持回看,所有课程可以随时购买观看。
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 ⭐ | DSGE, 因果推断, 空间计量等 | |
⭕ Stata数据清洗 | 游万海 | 直播, 2 小时,已上线 |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会学习群-常见问题解答汇总:
✨ https://gitee.com/arlionn/WD
Posts by Chuck Huber, Senior Statistician: https://blog.stata.com/author/chuber/