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变量)呢?
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基础操作: 绘图概述(一)
修改颜色时,可以参考上面这张图片中的默认颜色,并且在此基础上调整透明度、强度等等。
也可以直接输入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部分。
类似地,修改内部作图区域颜色的命令:
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(# # # #)) //设置内部区域边际左、右、下、上的具体值
-------
一楼有字数限制,后续整理更新在回帖中~
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.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 //关于坐标轴标题样式设置的命令说明
//内容与修改点线颜色样式等相似,不再赘述
-------
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轴不显示副标记的刻度标
-------