查看原文
其他

客官,要来份四象限图吗?

爬虫俱乐部 Stata and Python数据分析 2023-01-01

本文作者:张   猛,中南财经政法大学金融学院

本文编辑:魏若芙

技术总编:戴   雯


Stata&Python云端课程来啦!

     为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~爬虫俱乐部推出了Python编程培训课程Stata基础课程Stata进阶课程。报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦。我们在这篇推文的最后提供了每门课程的课程二维码,大家有需要的话可以直接扫描二维码查看课程详情并进行购买哦~

导论
大家对下面这个图可还熟悉?一个平面可以被平面直角坐标系分成四个象限,它是我们之前学习点与点的位置关系、作出二维图像的重要载体。

下面这张是我们现在常用的散点图(此图正是在auto.dta数据的基础上由scatter trunk mpg这个基础命令实现的)。对于任意一组(x,y),我们都可以将其如此展现出来,甚至这组数中绝大部分的数据都非第一象限的。因为我们可以通过移动坐标轴,使所有点保持在横轴的上边、纵轴的右边,这也是Stata中基本的做图方式。但如果我们需要利用到四象限平面图,该如何在Stata中实现呢?
1. 利用auto数据绘制散点图画四象限散点图前,我们需要构建一组在四个象限均有分布的(x,y)数据。还是利用auto数据,取y = price -5000, x = mpg -20。我们可以scatter y x 看一下此时的散点图。

2. 绘制初步坐标轴如果我们要在此基础上实现四象限散点图,粗略地讲只有两步:
(1)在系统原有坐标轴的基础画出新的坐标轴。(2)把系统原有的坐标轴去掉,保留新建的坐标轴以及点的位置。四象限图的新坐标轴x轴和y轴分别是y=0和x=0这两条直线,那么我们尝试用yli(0)和xli(0)来作出这俩条线,然后再通过ysc(off)、xsc(off)和leg(off)来实现原有数轴的删除。具体代码如下:
sysuse auto, clearkeep price mpggen y=price-5000gen x=mpg-20scatter y x, yli(0) xli(0) ysc(off) xsc(off) leg(off)运行结果如下图:

此时,四个象限已然显现,但它离我们的目标还相差甚远,坐标轴没有箭头、刻度以及刻度值,颜色等也需要调整。上面我们已经画出了两条直线,由于我们不便在直线的尽头直接添加箭头符号,这就需要引入pcarrowi命令,作出指向性箭头来代替上面的俩条直线作为新的坐标轴。然后我们通过scatteri命令,对坐标轴添加刻度以及刻度值(scatteri x y "z"表示在坐标为(x,y)处添加一个元素"z")。

3. 利用pcarrowi命令和scatteri命令绘制新坐标轴

根据对数据大小的观察,我们决定通过pcarrowi命令画一条从(0,-6000)到(0,12000)垂直向上的箭头作为y轴,画一条从(-15,0)到(25,0)水平向右的箭头作为x轴。然后我们通过scatteri命令,在(-10,0)、(10,0)、(20,0)、(0,-3000)、(0,3000)、(0,6000)以及(0,9000)这几个点增加刻度和刻度值,从而提升图的可读性。

最终完善的四象限图为:

详细代码如下:
clear all sysuse auto, clearkeep price mpggen y=price-5000gen x=mpg-20
local z `"||pcarrowi -6000 0 12000 0 (12) "y" 0 -15 0 25 (3) "x",msize(large) mlabsize(vlarge) lcolor(black) mcolor(black) headlabel "'local z `"`z'||scatteri 5000 10 "Ⅰ" 5000 -10 "Ⅱ" -3000 -10 "Ⅲ" -3000 10 "Ⅳ", mlabpos(0) mlabsize(*1.75) msymbol(none) mlabcolor(red)"'
local ax "`ax' ysc(off) xsc(off) leg(off)"
local x `"||scatteri 0 -10 "-10" 0 10 "10" 0 20 "20", "'local x `"`x' mlabpos(6) mlabsize(*1.25) msymbol(none) mlabcolor(black)"'local x `"`x'||scatteri 0 -10 "|" 0 10 "|" 0 20 "|" ,mlabpos(0) msymbol(none) mlabcolor(black)"'
local y `"||scatteri -3000 0 "-3000" 3000 0 "3000" 6000 0 "6000" 9000 0 "9000","'local y `"`y' mlabpos(9) mlabsize(*1.25) msymbol(none) mlabcolor(black)"'local y `"`y'||scatteri -3000 0 "—" 3000 0 "—" 6000 0 "—" 9000 0 "—",mlabpos(0) msymbol(none) mlabcolor(black)"'
scatter y x,msize(0.5) mcolor(blue)`ax'`z'`x'`y' scheme(s2mono) graphr(fc(white)) yla(,nogrid) title({bf:四象限图}) note({it:公众号:爬虫俱乐部},color(green))今天关于四维象限散点图的介绍就是这样啦~~ 不管是什么图,其实背后的原理都是一样的,我们可以删掉系统自带的坐标轴,然后在我们需要的地方添加新的坐标轴。上面用到的各类命令还包含很多选择项的替换,大家可以多加探索练习呀~END最后,我们为大家揭秘雪球网(https://xueqiu.com/) 最新所展示的沪深证券和港股关注人数增长Top10。



腾讯课堂课程二维码






 对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!














往期推文推荐

Python实现简繁体转换

 Stata与Python交互方法及数据传递

 “青铜”爬“王者”

 留下想要的变量,你会几种方法?

 Python:朋友圈配图,我承包了

 绘制全国祠堂密度地图

 如何使用Stata绘制一幅好看的柱状图?

【爬虫篇】基于selenium爬取美团评论

 双标的莱万——足球无关政治?!

 Stata处理重复值:duplicates

It's time to send a flower to your lover!        2021各省GDP新鲜出炉

 爬虫实战-采集全国各省疫情数据

 log——为你的操作保驾护航

 一行代码教你玩转emoji

 票房遇冷的春节档口碑冠军丨《狙击手》影评分析

 学习丰县,营造良好营商环境!

 大国丢娃图:从川渝到徐州!

 丰县“失火”,殃及徐州:股市超跌近30亿!

 Unicode转义字符——编码与解码

        徐州!徐州!

        B站弹幕爬虫——冬奥顶流冰墩墩&雪容融

        不会用Stata做描述性统计表?so easy!

        丰沛之地:备足姨妈巾

 过年啦,用Python绘制一幅属于你的春联吧!

       登上爬虫俱乐部“时光机” |上“机”出发 开启一段奇妙之旅

       【基础篇】查找并输出子字符串的定位

        Stata中的小清新命令——添加观测值

        PCA(主成分分析法)降维——Python实现

       超好用的事件研究法

        如何绘制任泽平《鼓励生育基金》的几幅图

        Python 第六天——字符串

        findname——想要什么找什么

        Python字符串之“分分合合”

        PDF转docx可批量操作?——wordconvert的小技巧

        考研之后,文科生需以“do”躬“do”!

关于我们 


   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



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

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里
为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众
号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

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

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