Stata绘图:addplot-fabplot-多图层美化图片
👇 连享会 · 推文导航 | www.lianxh.cn
🍎 Stata:Stata基础 | Stata绘图 | Stata程序 | Stata新命令 📘 论文:数据处理 | 结果输出 | 论文写作 | 数据分享 💹 计量:回归分析 | 交乘项-调节 | IV-GMM | 时间序列 | 面板数据 | 空间计量 | Probit-Logit | 分位数回归 ⛳ 专题:SFA-DEA | 生存分析 | 爬虫 | 机器学习 | 文本分析 🔃 因果:DID | RDD | 因果推断 | 合成控制法 | PSM-Matching 🔨 工具:工具软件 | Markdown | Python-R-Stata 🎧 课程:公开课-直播 | 计量专题 | 关于连享会
连享会 · 文本分析 | 爬虫 | 机器学习
作者: 李青塬 (广东工业大学)
邮箱: qingyuanli95@gmail.com
目录
1. addplot 命令
1.1 命令简介
1.2 实例:用 addplot 图示上市公司市场表现
1.2 .1 路径设定及命令安装
1.2 .2 数据下载及初步处理
1.2 .3 追加不同类型涨跌幅
1.2.4 对图片追加标题及箭头示例
2. fabplot 命令
2.1 命令简介
2.2 实例:用 fabplot 检验资产硬朗度
3. 本文小结
4. 本文代码
5. 相关推文
温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:
1. addplot 命令
如果您想在已经创建好的 twoway 类型图中添加标题或者追加其他数据点内容,addplot
命令将非常有用。其 可以在已经绘制好的 twoway 类型图片上追加内容。更重要的是,如果您没有原始制图数据,只有图形文件时,也可用该命令在图形文件上进行修改。参见连享会推文:
专题:Stata绘图 Stata绘图:addplot-层层叠加轻松绘图
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 普通绘图
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 基本示例
1.2.4 对图片追加标题及箭头示例
命令如下:
addplot g1: , title("股票价格($nn $id)")
addplot g2: , title("股价时序图")
graph drop g1 g2 //删除图片
结果如下:
图 4 对图片追加标题
图 5 对图片追加标题
命令如下:
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 对图片添加箭头示例
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 资产硬朗度
3. 本文小结
本文介绍了两种在原图片上追加新内容的两种命令(addplot
与 fabplot
)。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
专题:Stata教程 普林斯顿Stata教程(二) - Stata绘图 专题:Stata绘图 Stata绘图:箱形图与小提琴图-vioplot Stata绘图:太美了!羊皮卷风格图形 Stata绘图:自定义绘图利器-palettes 史上最牛Stata绘图模版-schemepack:酷似R中的ggplot2-袁子晴 Stata绘图:addplot-层层叠加轻松绘图 Stata 绘图:用 Stata 绘制一打精美图片-schemes 常用科研统计绘图工具介绍 Stata空间计量:莫兰指数绘图moranplot命令介绍 Stata绘图-组间差异可视化:不良事件火山图、点阵图 Stata绘图极简新模板:plotplain和plottig-T251 给你的图形化个妆:Stata绘图常用选项汇总-上篇 给你的图形化个妆:Stata绘图常用选项汇总-下篇 Stata绘图:柱状图专题-T212 Stata绘图:回归系数可视化-论文更出彩 Stata绘图:世行可视化案例-条形图-密度函数图-地图-断点回归图-散点图 Stata绘图:随机推断中的系数可视化 Stata绘图:重新定义坐标轴刻度标签 Stata绘图:用-bytwoway-实现快速分组绘图 Stata绘图:一个干净整洁的-Stata-图形模板qlean Stata绘图:怎么在Stata图形中附加水平线或竖直线? Stata绘图:在图片中添加虚线网格线 Stata绘图:制作教学演示动态图-GIF Stata绘图:绘制一颗红心-姑娘的生日礼物 Stata绘图:bgshade命令-在图形中加入经济周期阴影 Stata绘图:让图片透明——你不要掩盖我的光芒 Stata:图形美颜-自定义绘图模板-grstyle-palettes Stata绘图:多维柱状图绘制 Stata绘图:用暂元统一改变图形中的字号 一文看尽 Stata 绘图 Stata绘图:绘制单个变量的时序图
New! Stata 搜索神器:
lianxh
和songbl
GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉 使用:
. lianxh DID 倍分法
. songbl all
🍏 关于我们
连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。 直通车: 👉【**百度一下:**连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。