如何使用 Stata 创建动态图表

如何使用 Stata 创建动态图表

突然想到的,shell 命令 convert 可以将一系列的图片拼接成 gif 动图,所以可以先用 Stata 绘制出一系列的图再进行转换就可以实现动态图表的绘制了!

我们就以绘制中国货币供应量的走势图为例介绍如何使用 Stata 绘制 GIF 动图,这个示例数据集在我的 cuse 数据库里,所以可以直接通过 cuse 命令读取:

Stata
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cd "~/Desktop/Stata创建动态图表"
* cuselist
* 例如绘制中国M2供应量的动态图表
clear all
cuse moneysupply, c w
gen datenum = date
keep date M2num M2rt1
tw line M2num date, yaxis(1) || ///
line M2rt1 date, yaxis(2) ||, ///
leg(pos(6) row(1)) xlab(17532(400)21124) ///
yti("M2供应量(亿元)", axis(1)) ///
yti("M2供应量同比增速(%)", axis(2)) ///
ylab(0(500000)2000000, axis(1)) ///
ylab(0(5)30, axis(2))
gr export 20181025a1.png, width(600) height(400)

这幅双轴图是这样的:

下面我们让它动起来,首先做个循环,绘制出 119 张时间范围逐渐扩大的图片:

Stata
1
2
3
4
5
6
7
8
9
10
11
12
13
14
forval i = 1/`=_N'{
cap restore
preserve
keep in 1/`i'
tw line M2num date, yaxis(1) || ///
line M2rt1 date, yaxis(2) ||, ///
leg(pos(6) row(1)) xlab(17532(400)21124) ///
yti("M2供应量(亿元)", axis(1)) ///
yti("M2供应量同比增速(%)", axis(2)) ///
ylab(0(500000)2000000, axis(1)) ///
ylab(0(5)30, axis(2))
gr export `i'.png, width(600) height(400) replace
restore
}

上面的程序就可以得到 119 张静态的、时间范围逐渐扩大的图片了,然后使用 convert 命令把它们转换成 GIF 文件。convert 是ImageMagick Studio LLC开发的命令,下载方法可以在这个网站找到:
imagemagick.org

Stata
1
2
3
4
5
6
local pngname ""
forval i = 1/119{
local pngname "`pngname' `i'.png"
}
!/opt/local/bin/convert -delay 0 -loop 0 `pngname' 20181025a2.gif
! rm *.png

再举个例子,我们可以观察 t 分布随着自由度的增加收敛于正态分布的动图:

Stata
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
forval i = 1/100{
clear all
set obs 10000
gen x = (_n - 5000)/(5000/3)
gen y1 = tden(`i', x)
gen y2 = normalden(x)
tw function y2 = normalden(x), range(-3 3) || ///
function y1 = tden(`i', x), range(-3 3) || ///
rarea y1 y2 x, xlab(-3(1)3) ylab(0(0.1)0.4, format(%6.1f)) ///
leg(pos(6) row(1) order(1 "正态分布" 2 "t分布")) ///
caption("t分布的自由度为`i'", pos(1) ring(0) size(*1.2)) ///
title("图:t分布逼近正态分布", size(*1.5)) xti("")
gr export `i'.png, width(600) height(400) replace
}

local pngname ""
forval i = 1/100{
local pngname "`pngname' `i'.png"
}
!/opt/local/bin/convert -delay 0 -loop 0 `pngname' 20181025a3.gif
! rm *.png

# Stata

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×