【有问必答】绘图的奥秘你知道吗?

2016-11-21 司海涛 爬虫俱乐部 爬虫俱乐部

哈喽,诸君安。自从我们公众号推出有问必答栏目,陆陆续续有很多朋友向我们投来自己的问题。我们本着有问必答的态度,认真对待每一个问题,并及时帮大家答疑解惑。近日,又有一位朋友提出一个问题,问题是酱婶的:

这是一个stata的作图问题,他要绘制1978-1996年全国不同省份大豆收购量和时间关系。

例如:

上图是吉林省1978-1996年大豆收购量的关系图。但是注意到左边y轴刻度是以20为起点,终值为100,现在问题是想让左边y轴起点从0开始,终点到该省大豆收购量最大值结束。但是每个省大豆收购量最大值是不同的;若修改的话只能每个省手动修改,这样耗时费力,还有可能出现错误。怎么办呢?接下来小编就带你解决这个问题。

鉴于没有提问者的数据,小编找了一个类似的面板数据进行解答,数据已放入百度云(http://pan.baidu.com/s/1kVAtimz),读者可自行下载。

clear

set more off

use d:/question_exam


这是一个非平衡的面板数据,为了方便观察,笔者选择了4个地区一段时间内的GDP

数据有了,接下来对数据进行处理,我们的目的是把每个地区GDP的最大值作为y轴的终值,那么首先我们要找出每个地区GDP的最大值。

程序如下:

sort country year

by country: gen id=(_n==1)

replace id= sum(id) //生成id,是每一个国家对应一个id

replace GDP = GDP/1000000 //为了方便观察,把GDP除以1百万,相应的单位变为(百万美元)

bysort id :egen maxgdp=max(GDP) //得到每个国家GDP的最大值

结果如下:


这样我们就得到了每个地区GDP的最大值。接下来,开始做图!对多个地区分别作出相应的图标,我们可以利用循环。

我们先进行尝试,程序如下:

capture mkdir d:/statagraph/

forvalue i=1(1)4 {

gen maxgdp`i' = maxgdp if id ==`i'

graph twoway (bar GDP year, yaxis(1) barwidth(0.5) ylabel(0(`=maxgdp`i'/3')`=maxgdp`i'')) ///

(con GDP year,  yaxis(2) ) if id == `i'

graph export "d:/statagraph/`i'.tif",replace

}

结果出现了错误: 我们再看一下程序,当进行第一次循环生成 maxgdp1时,条件是id=1,那么id不等于1的,都将变为缺失值。如下图:


  在下边作图时,我们设定ylabel(0(`=maxgdp`i'/3')`=maxgdp`i'')因为stata把缺失值默认为无穷大,所以ylabel中将出现缺失值,程序无法继续运行。当然,我们想到可以把缺失值drop掉,可是缺失值所在的行也会一并的drop掉,我们将无法完成第二个图的绘制。相信经常关注我们公众号的朋友到了这里,会马上找到解决办法,那就是preserve restore--stata的起死回生之术。我们可以将这一命令写入循环中,使每一次循环结束,都还原一个完整的原始数据。(更多关于preserve-restore的命令,请查看推文preserve restore——stata的起死回生之术

程序如下:

capture mkdir d:/statagraph/

forvalue i=1(1)4 {

preserve

gen maxgdp`i' = maxgdp if id ==`i'

drop  if maxgdp`i' ==.

graph twoway (bar GDP year, yaxis(1) barwidth(0.5) ylabel(0(`=maxgdp`i'/3')`=maxgdp`i'')) ///

(con GDP year,  yaxis(2) ) if id == `i'

graph export "d:/statagraph/`i'.tif",replace

restore

}

结果储存在d:/statagraph

可以看到这四幅图左边y轴的终值都为每个地区GDP的最大值。问题解决了!

以上就是今天小编与大家分享的全部内容了,如果各位看官喜欢今天的分享,不要吝啬您的打赏哦!~~想了解更多有关stata的小秘密,请继续关注我们的公众号哦,更多惊喜等着您!~~

编辑by谢慧蓉 徐苾雯


往期推文推荐:

1.天路——chinafin与cntrade命令

2.分时数据,从此唾手可得

3.有了这个命令,以后还怕重复?

4.esttab功能挖掘:“Yes”or“No”

5.用“套路”处理数据

6.厉害了,我stata哥

7.爬虫俱乐部周末送大礼——chinagcode提取中文地址经纬度

8.据说这样数据替换比较快,你试一下,然后……

9.众里寻她千百度,synth命令来帮助!

10.I have a Stata, I have a python

11.用subinfile修改文件,滚蛋吧,繁琐的命令君!

12.删繁就简三秋叶,subinfile似剪刀


此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:xueyuan19920310@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


长按二维码关注你懂哟!~~

微信扫一扫
关注该公众号