查看原文
其他

数据呈现 | 一步一步教你做出漂亮的三维图形

数据Seminar 2022-12-31

本文转载自公众号:Stata and Python数据分析

作者:强宇曦

在三维的世界里,二维图形已经无法满足人类的需求了。那stata如何画三维图呢?今天,爬虫君向大家介绍命令graph3d、surface、scat3来画3d图形。

graph3d

安装命令

ssc install graph3d,replace

语法结构:

graph3d var1 var2 var3 [var4] [if] [in] [, options]

在给定三个变量的数据集后,graph3d可以绘制3d图,并且支持图形的移动、缩放和旋转,默认用小黑点绘制图形。

栗子说明

我们随机生成用于画图的变量:

clearset obs 600set obs 600gen x = int((_n - mod(_n-1,30) -1 ) /30 )gen z = mod(_n-1,30)gen y = normalden(x,10,3)*normalden(z,15,5)*10000

绘制以x、y、z为变量的三维图

程序如下:

graph3d x y z

graph3d x y z,wire  // wire选项可以绘制一个线框将所有的数据点连接起来。

角度扭转

例一的三维图是基本款,如果我们想将图形颜色变换一下,角度扭转一下要怎么做呢?程序如下:

graph3d x y z , colorscheme(cr) xang(80)


在这里,我们用了graph3d的两个选项:

(1)colorscheme():调色盘。graph3d提供了三种调色盘,分别为cr(蓝绿色和红色)、bcgyr(蓝色、蓝绿色、绿色、黄色和红色)、fade(黑色渐变)

(2)xang():x轴围绕枢轴旋转某个角度,默认为45度。栗子中为x轴旋转80度。同样的,也有yang(默认旋转45度)、zang(默认旋转45度),与xang含义相同。那枢轴又在哪里呢?加一个选项piv即可显示枢轴所在位置。

增加长方体框及坐标轴的标签

很多时候我们想在三维图外面增加一个长方体的框,同时增加x轴、y轴、z轴的标签,要怎么做呢?程序如下:

graph3d x y z, xang(80) cuboid innergrid coord(all) xlabel(x2333) xlangle (330) xlpos(9) yl(y2333) ylangle(90) ylpos(3) zlabel(z2333) zlangle(33) zlpos(11)

在这里,我们又使用了graph3d的几个其他选项:

(1)cuboid:添加长方体框。

(2)innergrid:在长方体框上添加额外的网格线。

(3)coord(all):标出长方体所有点的坐标。

(4)xlabel(x2333):添加x轴的标签x2333

(5)xlangle (330):指定x轴标签的角度。标签一开始添加进去是在长方体顶点中心位置与水平放置,这样会导致图形的坐标轴指定不清楚,所以需要将标签旋转一定角度使得标签正好与在x轴平行。

(6)xlpos(9):指定x轴标签的位置。有0-12个位置,1-12表示表盘的时刻,比如3表示三点钟方向,指正东位置;0指中心。xplos()默认为0,标签会放置在长方体顶点中心,所以需要指定标签位置使得标签指向更明确。

yl(y2333)、ylangle(90、 ylpos(3)、zlabel(z2333)、zlangle(33)、zlpos(11)意义相同

其他选择

除了可以用点表示三维图形的数据,graph3dmarkeroptions选项提供了其他选择,比如圆圈、钻石等,同时颜色、大小等都可以调整。

graph3d x y z, markeroptions(msymbol(D) mfcolor(white) mlcolor(green) msize(small))

markeroptions选项可以设定数据标记。

(1)msynbol():设定标记的形状。比如D(钻石)、S(正方形)等

(2)mfcolor():设定标记填充颜色

(3)mlcolor():设定标记外部线条的颜色

(4)msize():设定标记的大小

surface

安装命令

ssc install surface

语法:

surface [var1 var2 var3] [, options twoway_options]

栗子:

基本款三维图

使用surface绘制以x、y、z为变量的基本款三维图:

surface x y z

与graph3d相比,surface生成的图形自带长方体框、坐标轴名称及坐标数值,并将所有的数据点连接起来,如果我们想去掉连接线的话可以使用nowire选项:

surface x y z, nowire scale(0.8) sch(s1color)

这里我们除了使用了nowire选项,也用了其他选项:

scale():可调整文本、标记等的大小

scheme(schemename):可以调整图形的整体外观,比如改变图形的颜色或者标记的形状,有多个方案可供选择。

添加坐标轴标签等

如果我们想给图形增加坐标轴标签、图形题目等等,则可以使用下面的命令:

surface x y z , ylabel(0 13 20 29) labelround(1) xtitle(X2333) ztitle(Z2333) ytitle(Y2333) title(3Dplot2333) nowire sch(sj) scale(0.8)


ylabel():标记出y轴上特定的值,比如13、20等。

labelround():坐标轴数值保留几个小数点,例子中保留了一位。

xtitle():增加x轴标签名称,ytitle()、ztitle()类似。

title():增加图形标题。

此外,surface还可以使用twoway里的一些选项,比如saving(filename[, replace ]),将图形保存到本地文件;name(name[, replace]),将图形保存在存储器中,这样新生成的图形就不会替代原来的图形,存储器中可以保留多个图形。

scat3

安装命令

ssc install scat3

语法:

scat3 xvar yvar zvar [if exp] [in range] [, rotate(#) elevate(#) axistype(axis_type) axes(line_options) shadow[(scatter_options)] spikes(rspike_options) titlex([title_text][, marker_label_options]) titley([title_text][, marker_label_options]) titlez([title_text][, marker_label_options]) variablenames separate(varname) graph_options]

栗子:

基本款三维图

使用scat3绘制以x、y、z为变量的基本款三维图:

scat3 x y z, sch(economist) scale(0.29) titlez(, mlabang(0) mlabs(vhuge)) titlex(,mlabs(vhuge)) titley(,mlabs(vhuge))

同样使用了sch()scale()选项调整图形标记颜色与大小。用titlex()titley()titlez()则是对坐标抽标签进行设置。

装饰图形

如果我们同样想装饰一下图形,可以使用以下命令:

scat3 x y z, rot(45) elev(45) titlez(z2333, mlabang(0) mlabpos(0) mlabs(vhuge)) titlex(x2333, mlabpos(7) mlabs(vhuge)) titley(y2333, mlabpos(7) mlabs(vhuge)) title("myplot23333", size(tenth) pos(12)) sch(economist) scale(0.3333)


rot()、elev():分别指定旋转角度、仰角角度,默认都为45度。常用的视觉效果较好的组合有30、60;45、45;60、30。

titlez()titley()titlex():指定坐标轴名称标签,并且可通过选项设置标签的位置颜色等,比如mlabang()指标签放置角度,0表示水平位置,90表示垂直放置;mlabpos()则表示标签位置;mlabs()指标签大小。坐标轴名称标签也可以指定,如例子里的z2333,如果未指定则为变量标签或变量名称。

title():设置图形标题。

此外,scat3还有其他有意思的选项,也可以使用twoway里的一些选项,小伙伴们可以自己琢磨一下使图形更美观哦!





星标⭐我们不迷路!
想要文章及时到,文末“在看”少不了!

点击搜索你感兴趣的内容吧


往期推荐


软件应用 | 数据分析最有用的25个Matplotlib图表

统计计量 | 实证分析三步走:数据、模型、结果检验

软件应用 | Stata绘图极简新模板:plotplain和plottig

软件应用 | 如何随机生成满足特定数据特征的新变量?

统计计量 | 统计学中常用的数据分析方法汇总

统计计量 | 34本经济学经典著作选读书单推荐






数据Seminar




这里是大数据、分析技术与学术研究的三叉路口


推荐 | 张静红
    欢迎扫描👇二维码添加关注    

点击下方“阅读全文”了解更多

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

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