600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 三维散点图:Python 之matplotlib篇

三维散点图:Python 之matplotlib篇

时间:2020-06-29 11:26:22

相关推荐

三维散点图:Python 之matplotlib篇

散点图应该是我们做可视化时候接触到的第一个图形,无论是在R语言还是在Python的可视化图形里面,默认的方法都是采用散点图的,比如下面这样:

这是R语言默认plot函数直接就画出来的散点图。

很多时候,虾神我都用散点图来作为R语言的hello world,如下:

只要能够弹出来图形来,就说明R语言基本正常了。

所以,散点图可能是我们搞可视化专题图所接触的第一个图形了(也有同学说:俺们第一个玩的是柱状图……好吧,excel路过的,不要在意这些细节……)

散点图是用两组坐标来考察分布的东西,所以需要有X\Y两组数据,所以考察两组数据间的关系的散点图最大优势也是它最大的问题,就是在平面上只能考察两组数据……

所以,今天我们来讲讲三维散点图。

不说话,先看效果:

这是正面图,由三个图层组成,各种颜色的点表示地震的位置,背景是世界地图,线是核密度之后提取的等值线。通过这张图,可以很清晰的对三个地震带进行识别,密度最高的环太平洋地震带,然后是几乎都在陆地上的欧亚地震带,以及线性特征明显的海岭地震带。

当我们对地图进行前后翻转90度——

地震带的深度也被展示出来了。按照通用的分类方法,深度在60公里以内的称之为浅源地震,60—300公里的,叫做中源地震,超过300公里的,叫做深源地震。

从上面这张图上除了可以看出浅源地震的数量 > 中源 > 深源以外,还可以很明显的看出,浅源地震的分布普遍比较分散,而中源就明显的产生了聚集,到了深源,主要就集中在固定的地震带上(环太平洋)了。

然后从其他几个角度再来看看:

看完了效果,下面就来说说这东东是怎么实现的了。

Python下面的可视化包很多,但是最最出名的,自然就是matplotlib了。这个包在python可视化界的地位,和Shapefile在GIS数据格式界的地位一样,称之为“事实上的标准”或者是“无冕之王”。

在说之前,先来缅怀一下这位matplotlib之父——John Hunter

John Hunter博士毕业于普林斯顿大学,是著名的计算机图形学专家和可视化专家,可惜英年早逝。当然,虽然他走了,但是开源的事业还在被更多的爱好者和程序们继续着,所以大家不用担心这个包会挂掉。

关于更多的matplotlib的内容,可以查看其官方主页:/ 到我写这篇文章为止,最新的版本是1.5.3。

下面就简单说说matplotlib的三维散点图怎么做:

贴部分代码和注释,有兴趣的同学可以问我要数据和源代码

def s3dDemo1():

fig = plt.figure()

ax = fig.add_subplot(111, projection='3d')

#下面这段话,是利用numpy包读取csv里面的数据,然后分别取出X\Y\Z三维值

eq = np.loadtxt(csvfile, dtype=np.str,delimiter=",")

data = eq[1:,0:].astype(np.float)

X = data[:,0]

Y = data[:,1]

Z = data[:,2] * -1

C = []

#下面这循环是根据Z值(地震深度)设置颜色

for z in Z:

if z >= -60:

C.append("r")

elif z < -300:

C.append("k")

else:

C.append("y")

#好吧,关键就是这个方法,把XYZ三个值扔进去,三维散点图就出来了,打完收工。。。

ax.scatter(X,Y,Z,c=C,alpha=0.4,s=10)

ax.set_xlabel('longitude')

ax.set_ylabel('latitude')

ax.set_zlabel('deepth')

当然,上面是部分代码,需要完整源代码的,可以通过微信公众号发送2,获取虾神的邮箱,然后发一封包含自我介绍的邮件来获取所有的代码和数据。

下期预告:用R语言来做三维散点图(如果虾神的懒癌不发作的话)。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。