Stata绘图:制作教学演示动态图-GIF

发布时间:2020-10-08 阅读 3774
Amazing! 这是用 Stata 制作的!
Amazing! 这是用 Stata 制作的!

本文受如下文章启发,特此致谢!
Stata Blogs >> How to create animated graphics using Stata
(作者:Chuck Huber, Senior Statistician[1]

Stata 连享会   主页 || 视频 || 推文

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

课程详情 https://gitee.com/arlionn/Course   |   lianxh.cn

课程主页 https://gitee.com/arlionn/Course

作者:连玉君 (中山大学)
E-Mail: arlionn@163.com


目录


你一定看过很多 GIF 动态图了,今天,来感受一下教学中的 GIF 动态图的视觉冲击效果!

学生:原来这么简单! 我老师……我被老师……

老师:还可以这样教?!

正态分布的参数变化
正态分布的参数变化
The basic idea of lowess smoothing
The basic idea of lowess smoothing

制作思路: 利用人眼的记忆延迟特征形成视觉上的动态效果。

  1. 用循环语句一次性绘制多张参数渐变的图形,如 20 张;
  2. 利用 GIF 在线制作网站(如 www.gif5.net)完成 GIF 图片制作:「上传图片」→「调整图片顺序」→「设定播放速度参数」→「开始制作」→「保存图片」。

1. Stata 范例 1:文首 GIF 图片的制作方法

1.1 核心语句

上面那张清新的图片,核心语句只有一个简单的循环:

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

1.2 核心思路

为了能在图片中显示上述数字,我们可以使用 Stata 的绘图命令 twoway function,假装绘制一幅函数图 y = x,然后将图形的颜色设定为白色,同时把图片的背景、外框等都设定为白色或隐藏模式。这样以来,最终输出的图片在视觉上就好像在白纸上写了几个字而已。通过下面的例子,大家可以学到很多有关 Stata 图形外观设定的选项。

1.3 具体步骤

  • 第一步,运行如下 Stata 命令,生成一组变参数图片,这些图片就是制作 GIF 的原料:
*-----------------------------------------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 图片。

  • S1: 打开 GIF 在线制作网站(如 www.gif5.net),选择「添加图片」,导入上述图片(可以自行设定图片的度和度,以及延迟时间);
  • S2: 点击「开始生成gif」;
  • S3: 等待片刻,**下载(保存)**生成的图片即可:
GIF在线制作方法 www.gif5.net
GIF在线制作方法 www.gif5.net

2. Stata 范例 2:正态分布之教学演示

具体做法同范例 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------------
The power increases as the sample size increases
The power increases as the sample size increases

3. Stata 范例 3:滚动窗口回归系数的图形可视化

具体做法同范例 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
The basic idea of lowess smoothing

相关课程

连享会-直播课 上线了!
http://lianxh.duanshu.com

免费公开课:


课程一览

支持回看,所有课程可以随时购买观看。

专题 嘉宾 直播/回看视频
最新专题 DSGE, 因果推断, 空间计量等
Stata数据清洗 游万海 直播, 2 小时,已上线
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,300+ 推文,实证分析不再抓狂。
  • 公众号推文分类: 计量专题 | 分类推文 | 资源工具。推文分成 内生性 | 空间计量 | 时序面板 | 结果输出 | 交乘调节 五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会主页  lianxh.cn
连享会主页 lianxh.cn

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD

参考资料

[1]

Posts by Chuck Huber, Senior Statistician: https://blog.stata.com/author/chuber/