查看原文
其他

Stata绘制热力图详解

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:周宏杰

文字编辑:王碧琪

技术总编:李朋冲


重磅!!!为了大家能够更好地学习Python技术,以及应广大粉丝和往期学员的要求,2019年11月29日-12月1日,武汉字符串数据科技有限公司将在湖北武汉举办《第四期Python编程技术培训》。本次培训采用理论与案例相结合的方式,旨在帮助零基础学员轻松入门Python,由浅入深学习和掌握Python的编程技术,特别是网络数据抓取技术。目前正在火热招生中~

详细培训大纲及报名方式,请点击《2019年Python第四期培训招生》或点击文末阅读原文呦~


热力图有着非常广泛的应用,在众多学科中都能见其踪影。通过使用一种渐进的色带来表现相互间的关系,热力图的最终效果要优于离散点的直接显示,可以直观地展现空间数据的疏密程度。

Stata中,绘制热力图的方法有很多,比如twoway contour graph, heatmap命令,不过这种方法比较复杂,且在调用调色板时容易出错。本文介绍heatplot命令绘制热力图,相对来讲,更简单一些。

 

安装步骤

1)需要注意的是,单独安装heatplot是无法运行此命令的,需要我们事先安装palettespalette译为调色板,顾名思义,就是用来控制色块的颜色、形状、线条。palettes包内包括colorpalette,colorpalette9,symbolpalette以及linepalette四个命令。

2)安装完palettes之后,再安装heatplot命令

ssc install palettes, replacessc install heatplot, replace

 

heatplot命令介绍

heatplot的基本语法结构为:heatplot [z] y x [if] [in] [weight]xyz是变量,xy是必选,z是可选。

1)当仅使用xy时,彩色带的数值代表各色块的比例,越接近最大值的代表颜色,该色块对应的比例越大,反之亦然。

2)当加上z时,彩色带的数值代表的是z的数值,越接近最大值代表色,该色块所代表的z值越大,反之亦然(注意,这里彩色带不代表比例,而是代表z值大小,有了实际意义)。

 

举个例子

我们以绘制auto数据集中不同车型的变量pricempgweight的热力图为例。首先,变量mpg作为y,变量weight作为x绘制热力图,具体命令行如下所示:

clearsysuse auto, clearheatplot mpg weight

结果如下图所示:

在图的右侧,我们可以很清晰地看到,黄色色块代表最大的比例,亦即mpgweight在该区间的联合取值在总的样本里所占比例最大。

 

然后,在上述命令的基础上,加入变量price作为z来绘制热力图,具体命令行如下所示:

heatplot price mpg weight


结果如下图所示:

 

在右侧,可以清楚地发现,色块的实际意义已经发生了改变。实际上,只有两个变量时,热力图可以直观反映xy对应的值的比例和分布情况,例如将xy换成经纬度,即可反映某事件经过经纬度的范围及其频率。三变量时的热力图可以反映三个变量对应的值的分布情况,效果类似于气泡图。两者不同之处在于气泡图用气泡面积表示z,热力图用颜色表示z,当然我们也可以根据色块的数量来大致估计某个数值范围的比例大小。

 

hearplot命令的完整结构是heatplot [z] y x [if] [in] [weight] [, z_options yx_options graph_options generate_options ],接下来介绍常用的选项,来提升图形的美观度。

 

变量z选项介绍

1levels()  输入具体数字来控制彩色带的数量

2cuts(a(step)b)输入具体数字来控制彩色带的刻度,a为起始值,b为终值,step为步长(注意,step步长过长或者过短时,Stata会自动调整。并且level()cuts()不能同时使用

3colors(palette)  可以根据help colorpalette9来选择调色模式,调色模式有viridis(默认模式,紫——黄)hcl,bluered(蓝——红)等

 

接下来使用hclPuBuGnRdYlGnd3PRGnhueBuPuYlGnBuBuGn9个调色模式来展示colors选项,具体命令行如下所示:

heatplot mpg weight, colors(hcl) saving(hcl) title(hcl)heatplot mpg weight, colors(PuBuGn) saving(PuBuGn) title(PuBuGn)heatplot mpg weight, colors(RdYlGn) saving(RdYlGn) title(RdYlGn)heatplot mpg weight, colors(d3) saving(d3) title(d3)heatplot mpg weight, colors(PRGn) saving(PRGn) title(PRGn)heatplot mpg weight, colors(hue) saving(hue) title(hue)heatplot mpg weight, colors(BuPu) saving(BuPu) title(BuPu)heatplot mpg weight, colors(YlGnBu) saving(YlGnBu) title(YlGnBu)heatplot mpg weight, colors(BuGn) saving(BuGn) title(BuGn)graph combine "hcl" "PuBuGn" "RdYlGn" "d3" "PRGn" "hue"  "BuGn" "BuPu" "YlGnBu"

结果如下所示

 

4values在各色块上显示其代表的数值

5size(exp)根据z值的绝对值或者估计值来调整色块的大小

6recenter移动色块,使它的中心与其数据的中心(均值)相一致,一般情况下,使用recenter前先使用size

7hexagon将色块改为六边形

8scatter将色块改成散点表示

接下来,通过使用graph combine命令共同展示使用recenterhexagonscatter选项的效果,来对比这三个选项的具体作用,具体命令行如下:

heatplot mpg weight, saving(nochange) title(nochange) heatplot mpg weight, recenter saving(recenter) title(recenter)heatplot mpg weight, hexagon saving(hexagon) title(hexagon)heatplot mpg weight, scatter saving(scatter) title(scatter)graph combine "nochange" "recenter" "hexagon" "scatter"

结果如下:

 

9p#(lcolor(c))改变色块边框的颜色,在“#”处输入数字n,表示彩色带上第n个色块改变颜色(从下到上),c处输入颜色(如blackred)即可改变色块边框颜色

 

变量xy选项介绍

1bins()输入具体数字来同时控制xy方向上的色块数量,xbins()ybins()分别控制xy方向上的色块的数量

2bwidth()输入具体数字来同时控制xy方向上各色块的宽度,可以使用xbwidth()ybwidth()来分别控制xy注意不能同时使用bwidth()bins()

3clip将减去数据的上下限的边界

4fillin()输入具体数字(0~1),将xy范围内色块以外的空白部分填充,然后在色块上标明指定的数值

 

graph选项介绍

1nograph运行程序,不显示图像,类似于quietly

2addplot()可以在已经产生的图像上再画出一个新的图像

 

generate选项介绍

1generate[(namelist)]在新的数据集中增加一个新的变量并储存此变量

2replace替换已有的变量,默认设置是保存原有的变量,可以使用nopreserve来取消保存

 

举个例子

我们仍然以绘制auto数据集中不同车型的pricempgweight的热力图为例,展示上述选项的综合效果。

heatplot price mpg weight, cuts(3500(500)16000) colors(hcl, bluered) values size(10) hexagon p5(lcolor(yellow)) bins(10)

 

上述程序含义如下:绘制出的热力图的彩色带的刻度从3500开始至16000结束,步长为500;颜色从红色渐变到蓝色;显示每个色块的值,把每个色块变成六边形,将彩色带中倒数第五颜色对应的色块的边框变成黄色,xy的色块数量都变成10个。如下图所示:


实际上,上面介绍的热力图的画法,适合数据量较少和探索性阶段时使用。当需要进行较高需求的处理时,例如在地图上展示车辆经过的具体城市时,就需要探索heatplot更高级的方法啦!

至此,相信各位对于Stata热力图的绘制已经有了大致了解,大家可以去尝试一下,相信各位会有不一样的体验!



对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
《少年的你》影评
集合常用方法小结
实战演练-爬取深交所年报
      重建“通天塔” —— Unicode编码与解码
输出分组描述性统计表的利器——report
字典常用操作小结
XPath Helper助XPath爬虫一臂之力
查找变量?用“codebook”!
distinct命令用法一览
Stata数据分析技术应用培训
玩转Python之“手把手”教你爬数据(一)
玩转Python之“手把手”教你爬数据(二)
labelsof和labelbook介绍
Statalist上的“火云邪神”
爬虫实战程序的函数封装
Zipfile(二)
利用collapse命令转化原始数据
Stata中的数值型

关于我们

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

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

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

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