Stata绘图:addplot-fabplot-多图层美化图片

发布时间:2022-03-02 阅读 2452

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

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

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

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

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

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者: 李青塬 (广东工业大学)
邮箱: qingyuanli95@gmail.com


目录


1. addplot 命令

如果您想在已经创建好的 twoway 类型图中添加标题或者追加其他数据点内容,addplot命令将非常有用。其 可以在已经绘制好的 twoway 类型图片上追加内容。更重要的是,如果您没有原始制图数据,只有图形文件时,也可用该命令在图形文件上进行修改。参见连享会推文:

1.1 命令简介

addplot [graphname] [numlist] : twoway_plots

addplot 命令有一些选项。其中,graphname 为需要进行追加内容的原始图片,可省略。如果省略,则使用当前的图片。numlist 用于设定要修改的子图编号。默认修改的是所有图片。如果进行分组绘图,仅需修改分组绘图后的子图编号。 norescaling 选项代表是否改变图形的尺度,以便保留轴标签和范围,通常情况下需要加入该选项,不改变图形的尺度。 legend 选项可选择是否显示图例,可根据情况自定义。具体内容可参见 Stata 的 help 文件:help addplot 。

1.2 实例:用 addplot 图示上市公司市场表现

改革开放以来,我国基础设施建设突飞猛进,有力地支持了我国经济社会持续健康发。站在历史发展的节点上,新一代基础设施建设同样被寄予厚望。互联网数据中心( IDC )是新一代基础设施的重要组成部分。本节选取互联网数据中心行业中一家上市公司用 addplot 命令来图示其市场表现(股票价格)及投资者情绪(换手率)。

1.2 .1 路径设定及命令安装

命令如下:

clear                                   //可以直接运行本部分命令即可设定好路径及文件夹创建
global root= "D:\addplot&fabplot"       //在 D 盘自动创建 addplot&fabplot 文件夹
global raw_data= "$root\Raw_data"
global figures= "$root\Figures"
cap !mkdir "$raw_data"                 // cap 命令可让错误的代码继续运行
cap mkdir "$figures"                 //如果已经创建了这些文件夹,也可以运行
cap mkdir "$raw_data"
cap mkdir "$figures"                     //以上命令在每次打开 do 文件都可运行
cd "$raw_data"  
set scheme s1color                      //统一设定绘图风格
ssc install cnar,replace               //获取 A 股上市公司财务年报数据
ssc install cnstock,replace                //获取 A 股上市公司名称
ssc install cnstrade,replace                //获取 A 股上市公司历史行情数据
ssc install addplot,replace                //安装本文介绍的命令
ssc install fabplot,replace                //安装本文介绍的命令

1.2 .2 数据下载及初步处理

命令如下:

clear
global id="600845" 
cntrade $id
cap replace stknme="宝信软件"  if stknme=="钢管股份"
global nn = stknme[1]                       //股票名称
use "$id.dta", clear
tsset date                                  //设定为时间序列变量
gsort date
gen x1=_n
gen x2=_N
gen x3=x2-x1
keep if x3<120                           //只保留最近 120 交易日数据
egen x4=max(clsprc)
gen x5=0                                  // 最近 120 交易日价格最大值
replace x5=1 if clsprc < x4           
egen x6=min(clsprc)
gen x7=0                                  // 最近 120 交易日价格最小值
replace x7=1 if clsprc > x6              
replace rit=rit*100                      //转换为百分比的分子
replace rit=round(rit,.01)              //保留两位小数
destring turnover,replace
twoway qfitci clsprc turnover,stdf  title("最近120个交易日股票价格与换手率($nn)") || scatter clsprc turnover  //二次拟合线和散点图
graph save price.gph,replace 

结果如下:


图 1 二次拟合线和散点图

图 1 是宝信软件最近 120 日交易日的股价及换手率的二次拟合线与散点图。总体上,二者具有一定的正相关性。

命令如下:

tsline clsprc , xlabel(,angle(60))  name(g1,replace)
tsline clsprc , xlabel(,angle(60))  name(g2,replace)
tsline clsprc , xlabel(,angle(60)) subtitle("$nn $id")   //普通绘图

结果如下:


图 2 普通绘图
图 2 是最近 120 个交易日的宝信软件股票价格时间序列图,没有使用本文介绍的命令。

1.2 .3 追加不同类型涨跌幅

命令如下:

addplot: scatter  clsprc date if x3<1,  ms(o)   mlabel(rit) legend(off)      //追加最近一个交易日涨跌幅
addplot: scatter  clsprc date if x5<1,  ms(d)   mlabel( rit)  legend(off)    //追加最近 120 日交易日最高价时的涨跌幅
addplot: scatter  clsprc date if x7<1,  ms(d)   mlabel( rit)  legend(off)    //追加最近 120 日交易日最低价时的涨跌幅
graph export "$figures\\price_$id.emf", replace

结果如下:


图 3 基本示例
图 3 是使用本文介绍的命令后对宝信软件股价时序图进行追加绘图的结果。分别追加三个数据点:最近 120 日最高价时的涨跌幅( 6.73% ),最近 120 日最低价时的涨跌幅(- 0.25% )和当日涨跌幅( 3.4% )。

1.2.4 对图片追加标题及箭头示例

命令如下:

addplot g1: , title("股票价格($nn $id)")	 
addplot g2: , title("股价时序图")	 	 
graph drop g1 g2	   //删除图片

结果如下:


图 4 对图片追加标题
图 4 是仅有图片文件情况下,对原始图片 g1 进行追加标题:股票价格(宝信软件 600845)

图 5 对图片追加标题
图 5 是仅有图片文件情况下,对原始图片 g2 进行追加标题:股价时序图。

命令如下:

clear
graph drop Graph
graph use  price.gph
addplot price: pcarrowi  50 1.7 64 1.85 "换手率最高点",legend(off)     //中间数字代表箭头首尾坐标
addplot price: pcarrowi  80 0.7 73 1.0 "价格最高点",legend(off) 	      //中间数字代表箭头首尾坐标
graph drop price
erase price.gph	 

结果如下:


图 6 对图片添加箭头示例
图 6 是对原始图片 price 追加箭头说明。分别标出价格最高点和换手率最高点。值得注意的是,`addplot`代码中间的数字代表箭头首尾的坐标。

2. fabplot 命令

fabplot 可以在生成分组的 twoway 类型图片的基础上追加前景图。fabplot中的 fab 表示在每个面板数据背景图(background)上再加一个前景图(foreground),实现面板数据的图示化且可对图片进行调整。

2.1 命令简介

fabplot command yvar xvar [if] [in] , by(byvar [, byopts]) [select(condition) front(twoway_command) frontopts(twoway_options) graph_options ]

fabplot 命令可以在分组图片的基础上进行绘制散点图或者其他类型的 twoway 图片类型。其中一部分观测值数据作为前景图数据,其他数据作为背景图数据。其有一些选项可以自定义。 by() 选项用于设定分组变量;select()选项可指定一个真假条件;front()选项可以指定一个 twoway 命令对观察值进行调整,例如 connect 。;frontopts( ) 选项可以指定 twoway 命令对每个子图的前景图进行调整 。具体内容可参见 Stata 的 help 文件:help fabplot。

2.2 实例:用 fabplot 检验资产硬朗度

被誉为“中国民间股神”的林园先生早在 2006 年的新浪博客中提出其选股的财务标准。包括利润总额、毛利率、预收款和净资产收益率等。其中,利润总额直接反应公司的赚钱能力,筛选的标准起码是一个小目标。净资产收益率高,说明企业盈利能力强,这个指标反应企业的效益如何。筛选的标准一般是大于 20% ,小于 10% 的免谈。毛利率可以反应企业经营的定价权。筛选的标准是毛利率大于 20% 的企业,同时需要稳定上升。预收款越多,说明产品供不应求,产品是香饽饽,可以反应产品的硬朗度。应收款太多的公司应该回避,可能产品销售不畅。 理论联系实践,基于上述筛选标准,本节利用 fabplot 命令对比图示互联网数据中心行业中 14 家上市公司最近 10 年的净资产收益率,从历史的角度检验其资产硬朗度。 命令如下:

*下载数据
global s 600845 300383 300017  600602 002335 603887 600797  300166 002197  300846 603881   300738 603912 300698
clear                             //循环下载所有公司的所有历史年报数据
foreach v of global s {
  cnar `v'
}
openall                            //批量打开所有数据并合并成面板数据
save "stock_cnar.dta",replace
*获取股票名称
clear
cnstock all                                 
merge 1:m stkcd using "stock_cnar.dta"       //合并数据
keep if _merge==3
drop _merge
keep if year>2010                          //保留最近 10 年的数据
gen  净资产收益率=归属于母公司所有者的净利润/归属母公司所有者权益(或股东权益)   
fabplot line  净资产收益率 year, by(stknm)  front(connect) frontopts(mc(red) lc(red)) 
addplot : , xline(2015, lp(dash)) yline(0.2, lp(dash) lc(blue)) norescaling 
addplot : , xline(2015, lp(dash)) yline(0.1, lp(dash) lc(blue) ) norescaling 
graph export "$figures\净资产收益率.emf", as(emf) name("净资产收益率")  replace

结果如下:


图 7 资产硬朗度
图 7 综合利用本文介绍的`addplot`和`fabplot`两个命令,展示了 14 家互联网数据中心企业的 10 年的资产硬朗度。两条水平蓝色虚线分别代表净资产收益率在 10% 和 20% 的情况。还把 2015 年作为时间点,添加了一条垂直的竖线。通过绘制的分组图形,对比发现宝信软件整体上资产收益率比较稳健,且多年位于 10% 以上,可见其资产相对比较硬朗。

3. 本文小结

本文介绍了两种在原图片上追加新内容的两种命令(addplotfabplot)。 addplot可以对没有制图数据的图片进行内容追加;fabplot可以对分组的图片进行内容追加。此外,还选取了两个有趣的金融实例进行介绍这两个命令。

4. 本文代码

最后附上本文的全部 do 文件,供大家参考。

clear
global root= "D:\addplot&fabplot"       //在 D 盘自动创建 addplot&fabplot
global raw_data= "$root\Raw_data"
global figures= "$root\Figures"
cap !mkdir "$raw_data"                 // cap 命令可让错误的代码继续运行
cap mkdir "$figures"                 //如果已经创建了这些文件夹,也可以运行
cap mkdir "$raw_data"
cap mkdir "$figures"                     //以上命令在每次打开 do 文件都可运行
cd "$raw_data"  
set scheme s1color                      //统一设定绘图风格
ssc install cnar,replace               //获取 A 股上市公司财务年报数据
ssc install cnstock,replace                //获取 A 股上市公司名称
ssc install cnstrade,replace                //获取 A 股上市公司历史行情数据
ssc install addplot,replace                //安装本文介绍的命令
ssc install fabplot,replace                //安装本文介绍的命令
clear
global id="600845" 
cntrade $id
cap replace stknme="宝信软件"  if stknme=="钢管股份"
global nn = stknme[1]                       //股票名称
use "$id.dta", clear
tsset date                                  //设定为时间序列变量
gsort date
gen x1=_n
gen x2=_N
gen x3=x2-x1
keep if x3<120                           //只保留最近 120 交易日数据
egen x4=max(clsprc)
gen x5=0                                  // 120 交易日价格最大值
replace x5=1 if clsprc < x4           
egen x6=min(clsprc)
gen x7=0                                  // 120 交易日价格最小值
replace x7=1 if clsprc > x6              
replace rit=rit*100                      //转换为百分比分子
replace rit=round(rit,.01)              //保留两位小数
destring turnover,replace
twoway qfitci clsprc turnover,stdf  title("最近120个交易日股票价格与换手率($nn)") || scatter clsprc turnover  //二次拟合线和散点图
graph save price.gph,replace 
tsline clsprc , xlabel(,angle(60))  name(g1,replace)
tsline clsprc , xlabel(,angle(60))  name(g2,replace)
tsline clsprc , xlabel(,angle(60)) subtitle("$nn $id")   //普通绘图
addplot: scatter  clsprc date if x3<1,  ms(o)   mlabel(rit) legend(off)      //追加最近一个交易日涨跌幅
addplot: scatter  clsprc date if x5<1,  ms(d)   mlabel( rit)  legend(off)    //追加最近 120 日交易日最高价时的涨跌幅
addplot: scatter  clsprc date if x7<1,  ms(d)   mlabel( rit)  legend(off)    //追加最近 120 日交易日最低价时的涨跌幅
graph export "$figures\\price_$id.emf", replace
clear
graph drop Graph
graph use  price.gph
addplot price: pcarrowi  50 1.7 64 1.85 "换手率最高点",legend(off)   //中间数字代表箭头首尾坐标
addplot price: pcarrowi  80 0.7 73 1.0 "价格最高点",legend(off) 	     //中间数字代表箭头首尾坐标
graph drop price
erase price.gph	 
*下载数据
global s 600845 300383 300017  600602 002335 603887 600797  300166 002197  300846 603881   300738 603912 300698
clear                           //循环下载所有公司的所有历史年报
foreach v of global s {
   cnar `v'
}
openall      //批量打开所有数据并合并成面板数据
save "stock_cnar.dta",replace
*获取股票名称
clear
cnstock all                                 
merge 1:m stkcd using "stock_cnar.dta"       //合并数据
keep if _merge==3
drop _merge
keep if year>2010                          //保留最近 10 年的数据
gen  净资产收益率=归属于母公司所有者的净利润/归属母公司所有者权益(或股东权益)
fabplot line  净资产收益率 year, by(stknm)  front(connect) frontopts(mc(red) lc(red)) 
addplot : , xline(2015, lp(dash)) yline(0.2, lp(dash) lc(blue)) norescaling 
addplot : , xline(2015, lp(dash)) yline(0.1, lp(dash) lc(blue) ) norescaling 
graph export "$figures\净资产收益率.emf", as(emf) name("净资产收益率")  replace

5. 相关推文

Note:产生如下推文列表的命令为:
lianxh 绘图, m

安装最新版 lianxh 命令:ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,700+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

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

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

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh