楼主: kokowaah797
62509 37

[学习心得] 用STATA画图—各种作图调整美化命令汇总笔记   [推广有奖]

  • 0关注
  • 11粉丝

讲师

4%

还不是VIP/贵宾

-

威望
0
论坛币
4761 个
通用积分
210.0763
学术水平
8 点
热心指数
11 点
信用等级
7 点
经验
11471 点
帖子
192
精华
0
在线时间
317 小时
注册时间
2019-4-22
最后登录
2023-12-13

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

stata作图有很多很多很多命令和可设置的地方,最大的缺点是它没有excel那样的交互界面,只能靠自己一点点摸索。但是stata也是可以画出和excel媲美的图的,一方面可以使用作图界面的【Graph Editor】,算是一个半交互界面,可以对图表的各种选项进行调整,但相比于excel还是有很大局限性,缺点是不方便复制操作;另一方面就是使用代码命令作图,这就需要我们必须对有哪些代码可以使用有一个系统的了解。

-

最近几天在连续使用stata作各种图,很多命令代码都是自己翻命令说明和各种搜索信息才找到的,为方便自己日后再使用,也方便更多同学,现开帖记录如下~
-------
1.授人以鱼不如授人以渔,首先从如何自己探索各种作图命令开始:

help twoway_options             //twoway画图命令可以设置的所有选项的汇总

help added_line_options        //添加辅助线的选项

help added_text_options       //添加文本的选项

help axis_options                 //坐标轴设置

help title_options                 //各种标题设置

help legend_options             //图例设置

help scale(#)                       //大小范围设置

help region_options              //作图区域大小设置

help scheme(schemename)    //设置图表主题样式

以上是一些主要的设置选项的命令,有些选项的下级还有更详细具体分类,比如:

help axis_options                 //坐标轴设置

help axis_label_options         //坐标轴标签设置

help axis_title_options          //坐标轴标题设置

help axis_scale_options         //坐标轴范围设置

help axis_choice_options       //坐标轴选择设置

种种作图命令都藏在这些help的说明文件中,大家可以自己探索。这篇整理笔记后续内容其实也只是说明文件的搬运工,希望大家都能善用help命令,不做伸手党~
-------
*附上一些不错的学习资源:
Stata基础操作: 绘图概述(一):本论坛内的一篇帖子,对基础的设置可选项列举的十分详尽,比如可选颜色,可选点的样式,可选线的样式等。
https://www.surveydesign.com.au/tipsgraphs.html:几乎画了所有stata可以画的图,并配有命令。但是没有对每一个命令详细阐释,不过可以供参考~
https://www.jianshu.com/p/6e3ba1d15a24:详尽总结了直方图的调整美化命令。
-------
2.几个数据整理的基础命令
数据整理的命令范围就更大了,这里仅记录一下我最近做整理金融交易数据时用到的小命令
-------
2.1生成日期型时间变量
直接下载得到的数据导入stata后经常是文本型的(如图date变量),我们如何让stata识别它变成日期型时间变量(如图t1和t2变量)呢?
截屏2020-07-27 13.20.16.png


g nt=date(日期变量,"YMD")
//stata识别时间变量后,会生成stata内部一套序数表示时间,我们通常需要在此基础再调整格式
-------
g t1=date(日期变量,"YMD")
form t1 %td
//%td格式就是日期型变量的默认格式
//本命令显示为“17nov2014”表示2014年11月17日
-------
g t2=date(日期变量,"YMD")
form t2 %tdCCYY-NN-DD
//在%td后再设置年月日的显示格式,CCYY表示年,NN表示月,DD表示日
//本命令显示为“2014-11-17”表示2014年11月17日
-------
tsset t
//设置t为时间序列的时间变量
-------
2.2将不同时间序列按日期匹配变量
处理金融时间序列时常遇到的一个问题是交易日不匹配,哪天开市哪天不开市对于各个变量都可能不一样。
处理这个问题的做法是:统一不同时间序列的数据文件中的时间变量名,然后使用merge命令将不同数据文件整合。

merge m:1 t using "数据.dta"        //将“数据.dta”按t变量整合至当前数据中
对于这个命令的具体阐释请大家自行help merge
-------
2.3用文本标记坐标轴
以我的案例为例,我需要对持仓前10支股票画图,并使他们按顺序标记在x坐标轴上:
label define var1 1"公司名称" 2"..." 3"..." 4"..." 5"..." 6"..." 7"..." 8"..." 9"..." 10"...", replace      //var1是一个顺序1至10的变量,对他做标签
label values var2 var1                  //var2是对应的文本标签变量
tw (bar var3 var2, xlabel(1(1)10, valuelabel))                       //对不同var2画var3的柱形图并以标签标记
-------
3.美化图形命令
stata用的好,所有图都可以在stata里直接画好,美观度不亚于excel的哦~
-------
3.1修改颜色
首先放上各种可选项,图片来自Stata基础操作: 绘图概述(一)
stata可选颜色.png


修改颜色时,可以参考上面这张图片中的默认颜色,并且在此基础上调整透明度、强度等等。
也可以直接输入RGB值、CMYK值或HSV值:
color("# # #")               //RGB value; white = "255 255 255"             //使用RGB值选择颜色
color("# # # #")           //CMYK value; yellow = "0 0 255 0"              //使用CMYK值选择颜色
color("hsv # # #")         //HSV value; white = "hsv 255 255 255"       //使用HSV值选择颜色
-------
help colorstyle                  //关于颜色设置的命令说明
-------
//调整透明度

color(green%50)              //设置颜色为50%透明度的绿色

color("0 255 0%50")        //设置颜色为RGB值为0,255,0且透明度50%

color(%30)                    //设置当前颜色透明度为30%

-------

//调整颜色强度

color(green*.8)                    //设置颜色为强度0.8倍的绿色
color(purple*1.5)                  //设置颜色为强度1.5倍的紫色
color("0 255 255*1.2")          //设置颜色为RGB值0,255,255且1.2倍强度
color("hsv 240 1 1*.5")           //设置颜色为HSV值240,1,1且0.5倍强度

-------
3.1.1修改图形底色
我相信很多人和我以前一样,觉得stata画图的最大标志就是他的浅灰蓝色外框,一直以为这个是不能改的,直到打开了新世界的大门......
stata默认的浅灰蓝色外围颜色叫“light bluish-gray”,修改这部分颜色的命令是:

tw ...... , graphregion(color(white))     //修改外围区域颜色为白色
tw ...... , graphregion(fcolor(orange))     //修改外围区域填充颜色为橘色

*color和fcolor的区别在于“margin”(margin的宽窄亦可调节,见3.2.2),color包括margin部分,fcolor不包括margin部分。

截屏2020-07-30 13.20.22.png

类似地,修改内部作图区域颜色的命令:

tw ...... , plotregion(color(white))      //修改作图区域颜色为白色

tw ...... , plotregion(fcolor(black))     //修改作图区域填充颜色为黑色
-------
3.1.2修改所作图的颜色

tw (line var1 t, color(black))     //修改line图线条颜色为黑色

tw (scatter var1 t, mcolor(orange))     //修scatter图标记颜色为橘色

tw (line var1 t, color(black)) (connected var2 t, lcolor(red) mcolor(yellow))     //分别修改line图var1线条颜色为黑色,修改connected图var2标记颜色为黄色、连线颜色为红色

-------

3.2修改图形大小和比例

help regions_options              //关于区域和图形大小等设置的命令说明

-------

3.2.1修改整个作图区域的大小和比例

stata默认的图形比例是横向5.5inch纵向4inch,也就是5.5比4的一个矮胖的比例
对此我们可以自行修改设置:
tw ...... , xsize(10)            //修改x方向为10英寸(y方向仍为默认4英寸)
tw ...... , ysize(6)              //修改y方向为6英寸(x方向仍为默认5.5英寸)
tw ...... , xsize(10) ysize(6)  //修改x方向为10英寸,y方向为6英寸
-------
3.2.2修改作图区域边际大小
help marginstyle                                       //关于边际设置的命令说明
tw ...... , graphregion(margin(zero))           //设置外围区域边际为0
tw ...... , plotregion(margin(tiny))              //设置内部区域边际为极小
tw ...... , plotregion(margin(# # # #))       //设置内部区域边际左、右、下、上的具体值

-------

一楼有字数限制,后续整理更新在回帖中~


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Stata tata connected options Stata基础

截屏2020-07-27 13.20.16.png (47 KB)

截屏2020-07-27 13.20.16.png

已有 3 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
中山君2012 + 1 + 1 精彩帖子
震震果实 + 4 + 4 + 4 + 4 精彩帖子
dxystata + 100 + 10 精彩帖子

总评分: 经验 + 100  论坛币 + 14  学术水平 + 5  热心指数 + 5  信用等级 + 4   查看全部评分

沙发
dxystata 发表于 2020-7-27 15:04:43 |只看作者 |坛友微信交流群
谢谢分享!

使用道具

藤椅
kokowaah797 学生认证  发表于 2020-7-28 14:32:55 |只看作者 |坛友微信交流群
dxystata 发表于 2020-7-27 15:04
谢谢分享!
感谢版主支持~

使用道具

板凳
kokowaah797 学生认证  发表于 2020-7-30 14:08:04 |只看作者 |坛友微信交流群

3.3修改图形线条和标记点的样式

help linestyle                //关于线条设置的命令说明

help marker_options      //关于标记设置的说明

*注:相关颜色修改见3.1.2

-------

3.3.1 修改线条样式

help linepatternstyle            //关于线条样式设置的命令说明

tw (line var1 t, lpattern(dash))     //修改line图线条样式为虚线

tw (line var1 t, lpattern(dot))      //修改line图线条样式为点

tw (connected var1 t, lpattern(dash_dot))     //修改connected图线条样式为点线交错

tw (connected var1 t, lpattern(longdash))     //修改connected图线条样式为长虚线

tw (connected var1 t, lpattern(_))     //修改connected图线条样式为长虚线(即_)

-------

3.3.2 修改线条粗细

help linewidthstyle        //关于线条粗细设置的命令说明

tw (line var1 t, lwidth(none))               //修改line图线条不显示

tw (line var1 t, lwidth(thin))                 //修改line图线条粗细为细

tw (connected var1 t, lwidth(thick))     //修改connected图线条粗细为粗

除了设定好的粗细外,还可以help relativesize设置任意想要的粗细

-------

3.3.3 修改标记样式

help symbolstyle         //关于标记样式设置的命令说明

tw (dot var1 t, msymbol(diamond))        //修改dot图标记为钻石型(其实就是斜着的正方形)

tw (dot var1 t, msymbol(triangle))         //修改dot图标记为三角形

tw (scatter var1 t, msymbol(circle))       //修改scatter图标记为圆形

tw (scatter var1 t, msymbol(O))            //修改scatter图标记为圆形(注意O大小写区分圆点的大小)

tw (connected var1 t, msymbol(X))       //修改connected图标记为X

tw (connected var1 t, msymbol(circle_hollow))     //修改connected图标记为空心圆

tw (connected var1 t, msymbol(Oh))     //修改connected图标记为空心圆

-------

3.3.4 修改标记大小

help markersizestyle     //关于标记大小设置的命令说明

tw (dot var1 t, msize(tiny))                  //修改dot图标记大小为微小

tw (scatter var1 t, msize(medlarge))     //修改dot图标记大小为中偏大

tw (connected var1 t, msize(huge))      //修改connected图标记大小为巨大

-------

已有 3 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Arleen + 5 + 3 + 3 + 3 对论坛有贡献
remlus + 100 精彩帖子
dxystata + 100 + 10 + 1 鼓励积极发帖讨论

总评分: 经验 + 200  论坛币 + 15  学术水平 + 3  热心指数 + 4  信用等级 + 3   查看全部评分

使用道具

报纸
kokowaah797 学生认证  发表于 2020-8-2 18:11:03 |只看作者 |坛友微信交流群
3.4 显示点标签
help marker_label_options          //关于标记标签设置的命令说明
-------
3.4.1 指定标记变量
tw (scatter var1 t, mlabel(var1))     //为scatter图添加数值标记
-------
3.4.2 修改标签的相对位置
tw (scatter var1 t, mlabel(var1) mlabgap(#))     //修改数值标记的相对位置距离
*用数值表示的方式,100是graph区域长或宽中的较小值,mlabgap(2)表示距离等于graph区域长或宽中的较小值的2%
tw (scatter var1 t, mlabel(var1) mlabgap(*#))     //修改数值标记的相对位置距离
*用倍数表示的方式,mlabgap(*1)为默认距离,mlabgap(*1.5)表示改为默认距离的1.5倍
help relativesize         //相对位置距离的表示方式
-------
tw (scatter var1 t, mlabel(var1) mlabposition(#))     //修改数值标记的相对位置方向
help clockposstyle      //相对位置方向的表示方式
相对位置方向以时钟时间表示,就是特工打暗号时候说的“几点钟方向”(狗头),在以后说到关于title设置的时候也是使用这个方式说明方向。
截屏2020-08-02 17.19.27.png
-------
3.4.3 修改标签文本的角度
tw (scatter var1 t, mlabel(var1) mlabangle(#))     //修改数值标记的文本角度
tw (scatter var1 t, mlabel(var1) mlabangle(vertical))     //修改数值标记的文本角度
*用数值直接表示角度,也可以选择horizontal(水平方向,从左往右读,也即0°)、vertical(垂直方向,从下往上读,也即90°)、rvertical(反向垂直方向,从上往下读,也即270°或-90°)、rhorizontal(反向水平方向,标记是“倒立”的,也即180°)
Help anglestyle      //文本角度的表示方式
-------
3.4.4 修改标签的大小和颜色
tw (scatter var1 t, mlabel(var1) mlabsize(large))     //修改数值标记为大
help textsizestyle      //关于文本大小设置的命令说明
tw (scatter var1 t, mlabel(var1) mlabcolor(red))     //修改数值标记为红色
help colorstyle      //关于颜色设置的命令说明
-------
3.4.5 如果需要对不同点的位置有不同设置...
这里使用stata原说明文件的例子
generate pos = 3      //生成一个设置3.4.2中相对位置方向的变量pos,设置方向为3点钟方向
replace pos = 9 if country=="Honduras"      //将国家为洪都拉斯时的标签位置改为9点钟方向
scatter lexp gnppc if region==2, mlabel(country) mlabv(pos))      //使用mlabvposition(varname)(或者简写为mlabv)设置标签的相对位置方向
-------

使用道具

地板
kokowaah797 学生认证  发表于 2020-8-4 10:21:16 |只看作者 |坛友微信交流群

3.5 坐标轴设置

help axis_options      //关于坐标轴设置的命令说明

-------

3.5.1 坐标轴选择

help axis_choice_options      //关于坐标轴选择的命令说明

//x、y轴最多各可以设置9个

tw (line var1 t, yaxis(1)) (line var2 t, yaxis(2))       //var1的y轴为左轴,var2的y轴为右轴

tw (line var1 t1, xaxis(1)) (line var2 t2, xaxis(2))       //var1的x轴为下轴,var2的x轴为上轴(此时y轴同为左轴)

-------

3.5.2 坐标轴标题设置

help axis_title_options      //关于坐标轴标题设置的命令说明

-------

//不显示标题

tw (line var1 t), xtitle(“”)      //不显示x轴标题

tw (line var1 t), xtitle(“”) ytitle(“”)      //不显示x和y轴标题

//注意双引号应为英文输入法

-------

//修改标题

tw (line var1 t), xtitle(“第一”)      //修改x轴标题为第一

//注意双引号应为英文输入法

-------

//修改指定坐标轴的标题

tw (line var1 t, yaxis(1)) (line var2 t, yaxis(2)), ytitle(“第一”, axis(1))      //修改第一条y轴(即左轴)标题为第一

tw (line var1 t, yaxis(1)) (line var2 t, yaxis(2)), ytitle(“第一”, axis(1)) ytitle(“第二”, axis(2))      //修改第一条y轴(即左轴)标题为第一,第二条y轴(即右轴)标题为第二

//注意双引号应为英文输入法

-------

//为一条坐标轴生成或修改多行标题

tw (line var1 t), xtitle(“第一行” “第二行”)      //修改x轴标题为两行及相应内容

tw (line var1 t), xtitle(“第一行” “第二行” “第三行” “第四行”)      //修改x轴标题为四行及相应内容

tw (line var1 t), xtitle(“第一行” “第二行” “第三行”) xtitle(“第四行”, suffix)      //在原有标题基础上,在最后增加一行标题,效果同上

tw (line var1 t), xtitle(“第零行” “第一行” “第二行” “第三行”)      //修改x轴标题为四行及相应内容

tw (line var1 t), xtitle(“第一行” “第二行” “第三行”) xtitle(“第零行”, prefix)      //在原有标题基础上,在最前增加一行标题,效果同上

//suffix和prefix两个命令多用于重复画图时,目前看起来似乎有些鸡肋,而stata自身对此给出的例子(使用sts graph命令绘制KM生存曲线)不属于经济学范畴

//注意双引号应为英文输入法

-------

//修改特殊坐标轴的标题

tw (scatter var1 t), ttitle(“时间序列”)      //修改时间序列中时间变量坐标轴的标题

tw (contour z y x), ztitle(“等高线”)       //修改contour命令(等高线图)中的contour legend轴的标题

//注意ztitle仅适用于contour图的情况!

-------

3.5.3 坐标轴标题样式的设置

help textbox_options      //关于坐标轴标题样式设置的命令说明

//内容与修改点线颜色样式等相似,不再赘述

-------


使用道具

7
kokowaah797 学生认证  发表于 2020-8-7 13:47:53 |只看作者 |坛友微信交流群

3.5.4 坐标轴标记的设置

help axis_label_options      //关于坐标轴标记设置的命令说明

-------

3.5.4.1 坐标轴主标记的设置

//主标记设置(默认即为主标记)

tw (line var1 t), xlabel(#6)      //x轴近似显示6个合适的标记

tw (line var1 t), xlabel(1(10)100)      //x轴从1到100的范围下,每隔10个值一标记

tw (line var1 t), xlabel(1(1)20)      //x轴从1到20的范围下,标记每个值

tw (line var1 t), xlabel(1(.5)5)      //x轴从1到5的范围下,每隔0.5一标记

tw (line var1 t), xlabel(minmax)      //x轴仅显示最大最小值

tw (line var1 t), xlabel(none)      //x轴不显示标记

tw (line var1 t), xlabel(none, axis(2))      //第二条x轴不显示标记

-------

//标记内容的格式修改,格式详见help format

tw (line var1 t), xlabel(, format(%9.2fc))      //仅修改x轴标记的格式

tw (line var1 t), xlabel(1(.5)5, format(%9.2fc))      //同时修改x轴标记的格式

-------

//修改标记文字的大小和颜色

tw (line var1 t), xlabel(1(.5)5, labsize(small) labcolor(yellow))      //修改文字大小为小,颜色为黄色

//颜色设置同3.1,或help colorstyle

//大小设置help textsizestyle

-------

//修改标签间距

tw (line var1 t), xlabel(1(.5)5, labgap(#))

tw (line var1 t), xlabel(1(.5)5, labgap(*#))

//规则与3.4.2类似,或help relativesize

-------

//修改刻度标记的长度、宽度和颜色

tw (line var1 t), xlabel(1(.5)5, tlength(*2) tlwidth(thick) tlcolor(red))     //修改刻度标记长度为默认的两倍长,宽度为厚,颜色为红色

//长度设置同上述“修改标签间距”,或help relativesize

//宽度设置同3.2.2,或help linewidthstyle

//颜色设置同3.1,或help colorstyle

-------

3.5.4.2 时间变量坐标轴主标记的设置(用于时间序列)

//以下命令均需建立在tsset命令的基础上

tw (line var1 t), tlabel(2014m1(2)2014m12)      //t轴标记为2014年每两个月一标记(注:此处原数据格式为%tm)

tw (line var1 t), tlabel(17nov2014(300)21jul2020)      //t轴标记为2014年11月17日至2020年7月21日,每300天一标记

tw (line var1 t), tlabel(17nov2014(300)21jul2020, format(%tdNN/DD/CCYY))      //t轴标记为2014年11月17日至2020年7月21日,每300天一标记,标记格式为月月/日日/年年年年,如07/21/2020

tw (line var1 t), tlabel(, format(%tdCCYY-NN-DD))      //t轴标记标记格式修改为年年年年-月月-日日,如2020-07-21

//标记内容的格式修改见help format

-------

3.5.4.3 坐标轴的其他设置

//仅修改坐标轴的刻度标记位置,label换成tick命令

tw (line var1 t), xtick(none)      //x轴不显示(主标记)刻度

//修改坐标轴副标记,label换成mlabel命令

tw (line var1 t), mlabel(none)      //x轴不显示副标记

//修改坐标轴副标记的刻度标记位置,mlabel换成mtick命令

tw (line var1 t), mtick(none)      //x轴不显示副标记的刻度标

-------


使用道具

8
kokowaah797 学生认证  发表于 2020-8-18 15:07:13 |只看作者 |坛友微信交流群
*插播一个小操作问题:
当有多个x轴或y轴时,如何设置各个坐标轴的位置?
多条y轴如何设置左轴和右轴?
多条x轴如何设置上轴和下轴?
双坐标轴如何修改左右坐标轴位置?
多个y坐标轴画在同一张图中如何设置只显示左右两个坐标轴?
......
有多于两个坐标轴画在同一张图中时,stata会默认将所有坐标轴并列于左侧(x轴则下侧),整个图都不协调了,如何修改?
解决办法如下:
以有三条y轴画在一张图中,只需指定并显示左右两条坐标轴为例
1.首先,在一般画图命令中,将需要显示的两条坐标轴设为1轴和2轴,如:
  1. tw (area x1 t, yaxis(3)) (line x2 t, yaxis(1)) (line x3 t, yaxis(2))  //x2变量的坐标轴为1轴,x3变量的坐标轴为2轴,x1变量的坐标轴为3轴
复制代码
2.然后,将不需要的坐标轴隐藏,指定需要置于另一侧的坐标轴,如:
  1. tw (area x1 t, yaxis(3)) (line x2 t, yaxis(1)) (line x3 t, yaxis(2)) , ysc(axis(3) noline) ylabel(none, axis(3)) ysc(axis(2) alt)  //将3轴隐藏,将3轴的标签隐藏,将2轴置于图表右侧
复制代码
注:如果不进行第1步,则左侧坐标轴与图表会存在空隙(实际是被隐藏的那一轴的占位)

使用道具

9
lycred 学生认证  发表于 2021-1-29 20:55:29 |只看作者 |坛友微信交流群
感谢分享,graphregion(margin())学到了!

使用道具

10
xiayouxue 发表于 2021-3-27 10:54:28 |只看作者 |坛友微信交流群
谢谢楼主

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-24 06:07