查看原文
其他

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

连享会 连享会 2022-12-31

👇 连享会 · 推文导航 | www.lianxh.cn

连享会 · 文本分析 | 爬虫 | 机器学习

作者: 李青塬 (广东工业大学)
邮箱: 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 普通绘图

![]() 图 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

  • 专题: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 搜索神器:lianxhsongbl  GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉  使用:
. lianxh DID 倍分法
. songbl all

🍏 关于我们

  • 连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 直通车: 👉【**百度一下:**连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存