30行python代码设计_30行Python代码实现3D数据可视化

原标题:30行Python代码实现3D数据可视化

作者:潮汐

来源:Python技术

欢迎来到 编程教室~

我们之前的文章中有讲解过不少 Matplotlib 的用法,比如:

之前我们基本都是用它来绘制二维的数据图表。而今天文章中,我们将教大家如何用不到 30 行代码绘制 Matplotlib 3D 图形。

回顾 2D 作图

用赛贝尔曲线作 2d 图。此图是用基于 Matplotlib 的 Path 通过赛贝尔曲线实现的,有对赛贝尔曲线感兴趣的朋友们可以深入了解一下。在 matplotlib 中,figure 为画布,axes 为绘图区,fig.add_subplot、plt.subplot 方法均可以创建子图。以下是作图实践。

importmatplotlib.path asmpath

importmatplotlib.patches asmpatches

importmatplotlib.pyplot asplt

fig, ax = plt.subplots

#定义绘图指令与控制点坐标

Path = mpath.Path

# Path 控制坐标点绘制贝塞尔曲线

# 图形数据构造

# MOVETO表示将绘制起点移动到指定坐标

# CURVE4表示使用4个控制点绘制3次贝塞尔曲线

# CURVE3表示使用3个控制点绘制2次贝塞尔曲线

# LINETO表示从当前位置绘制直线到指定位置

# CLOSEPOLY表示从当前位置绘制直线到指定位置,并闭合多边形

path_data = [

(Path.MOVETO, ( 1.88, -2.57)),

(Path.CURVE4, ( 0.35, -1.1)),

(Path.CURVE4, ( -1.75, 1.5)),

(Path.CURVE4, ( 0.375, 2.0)),

(Path.LINETO, ( 0.85, 1.15)),

(Path.CURVE4, ( 2.2, 3.2)),

(Path.CURVE4, ( 3, 0.05)),

(Path.CURVE4, ( 2.0, -1.5)),

(Path.CLOSEPOLY, ( 1.58, -2.57)),

]

codes,verts = zip(*path_data)

path = mpath.Path(verts, codes)

patch = mpatches.PathPatch(path, facecolor= 'r', alpha= 0.5)

ax.add_patch(patch)

# plot control points and connecting lines

x, y = zip(*path.vertices)

line, = ax.plot(x, y, 'go-')

ax.grid

ax.axis( 'equal')

plt.show

心型效果图 3D 帽子图1

Matplotlib 绘制 3D 图形使用的是 mplot3d Toolkit,即 mplot3d 工具包。绘制 3D 图可以通过创建子图,然后指定 projection 参数 为 3d 即可,返回的 ax 为 Axes3D 对象。

导入包:

frommatplotlib importcm

frommatplotlib.ticker importLinearLocator, FormatStrFormatter

frommpl_toolkits.mplot3d importAxes3D

绘图全过程:

importmatplotlib.pyplot asplt

frommatplotlib importcm

frommatplotlib.ticker importLinearLocator, FormatStrFormatter

frommpl_toolkits.mplot3d importAxes3D

importnumpy asnp

fig = plt.figure

# 指定图形类型是 3d 类型

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

# 构造数据

X = np.arange( -5, 5, 0.25)

Y = np.arange( -5, 5, 0.25)

X, Y = np.meshgrid(X, Y)

R = np.sqrt(X** 2+ Y** 2)

Z = np.sin(R)

# Plot the surface.

surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,

linewidth= 0, antialiased= False)

# Customize the z axis.

ax.set_zlim( -1.01, 1.01)

ax.zaxis.set_major_locator(LinearLocator( 10))

ax.zaxis.set_major_formatter(FormatStrFormatter( '%.02f'))

# Add a color bar which maps values to colors.

fig.colorbar(surf, shrink= 0.5, aspect= 5)

plt.show

呈现效果:

帽子图1 3D 帽子图2 importnumpy asnp

importmatplotlib.pyplot asplt

frommpl_toolkits.mplot3d importAxes3D

fig = plt.figure

# 指定图形类型为 3d 类型

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

# X, Y value

X = np.arange( -5, 5, 0.25)

Y = np.arange( -5, 5, 0.25)

# 设置 x-y 平面的网格

X, Y = np.meshgrid(X, Y)

R = np.sqrt(X ** 2+ Y ** 2)

# height value

Z = np.sin(R)

# rstride:行之间的跨度 cstride:列之间的跨度

# rcount:设置间隔个数,默认50个,ccount:列的间隔个数 不能与上面两个参数同时出现

#vmax和vmin 颜色的最大值和最小值

ax.plot_surface(X, Y, Z, rstride= 1, cstride= 1, cmap=plt.get_cmap( 'rainbow'))

# zdir : 'z' | 'x' | 'y' 表示把等高线图投射到哪个面

# offset : 表示等高线图投射到指定页面的某个刻度

ax.contourf(X,Y,Z,zdir= 'z',offset= -2)

# 设置图像z轴的显示范围,x、y轴设置方式相同

ax.set_zlim( -2, 2)

plt.show

帽子图2 3D 线性图

3D 线性图使用 Axes3D.plot来绘制。绘画的基本方法:Axes3D.plot(xs, ys[, zs, zdir='z', *args, **kwargs])

参数说明:

参数

描述

xs

一维数组,点的 x 轴坐标

ys

一维数组,点的 y 轴坐标

zs

一维数组,可选项,点的 z 轴坐标

zdir

可选项,在 3D 轴上绘制 2D 数据时,数据必须以 xs,ys 的形式传递,若此时将 zdir 设置为 ‘y’,数据将会被绘制到 x-z 轴平面上,默认为 ‘z’

**kwargs

其他关键字参数,可选项,可参见 matplotlib.axes.Axes.plot

importnumpy

asnp

importmatplotlib.pyplot asplt

frommpl_toolkits.mplot3d importAxes3D

# 依次获取画布和绘图区并创建 Axes3D 对象

fig = plt.figure

ax = fig.gca(projection= '3d')

# 第一条3D线性图数据

theta = np.linspace( -4* np.pi, 4* np.pi, 100)

z1 = np.linspace( -2, 2, 100)

r = z1** 2+ 1

x1 = r * np.sin(theta)

y1 = r * np.cos(theta)

# 第二条3D线性图数据

z2 = np.linspace( -3, 3, 100)

x2 = np.sin(z2)

y2 = np.cos(z2)

# 绘制3D线性图

ax.plot(x1, y1, z1, color= 'b', label= '3D Line1')

ax.plot(x2, y2, z2, color= 'r', label= '3D Line2')

# 设置标题、轴标签、图例,也可以直接使用 plt.title、plt.xlabel、plt.legend...

ax.set_title( '3D Line View', pad= 15, fontsize= '10')

ax.set_xlabel( 'x ', color= 'r', fontsize= '14')

ax.set_ylabel( 'y ', color= 'g', fontsize= '14')

ax.set_zlabel( 'z ', color= 'b', fontsize= '14')

ax.legend

plt.show

结果显示:

线性图 3D 散点图

绘制 3D 散点图的基本方法是:Axes3D.scatter(xs, ys[, zs=0, zdir='z', s=20, c=None, depthshade=True, *args, **kwargs])

参数详解:

参数

描述

xs

一维数组,点的 x 轴坐标

ys

一维数组,点的 y 轴坐标

zs

一维数组,可选项,点的 z 轴坐标

zdir

可选项,在 3D 轴上绘制 2D 数据时,数据必须以 xs,ys 的形式传递,若此时将 zdir 设置为 ‘y’,数据将会被绘制到 x-z 轴平面上,默认为 ‘z’

s

标量或数组类型,可选项,标记的大小,默认 20

c

标记的颜色,可选项,可以是单个颜色或者一个颜色列表支持英文颜色名称及其简写、十六进制颜色码等,更多颜色示例参见官网 Color Demo

depthshade

bool 值,可选项,默认 True,是否为散点标记着色以提供深度外观

**kwargs

其他关键字

importmatplotlib.pyplot

asplt

importnumpy asnp

frommpl_toolkits.mplot3d importAxes3D

defrandrange(n, vmin, vmax):

return(vmax - vmin) * np.random.rand(n) + vmin

fig = plt.figure

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

n = 100

# For each set of style and range settings, plot n random points in the box

# defined by x in [23, 32], y in [0, 100], z in [zlow, zhigh].

forc, m, zlow, zhigh in[( 'r', 'o', -50, -25), ( 'b', '^', -30, -5)]:

xs = randrange(n, 23, 32)

ys = randrange(n, 0, 100)

zs = randrange(n, zlow, zhigh)

ax.scatter(xs, ys, zs, c=c, marker=m)

ax.set_title( '3D Diagram View', pad= 15, fontsize= '10')

ax.set_xlabel( 'x ', color= 'r', fontsize= '14')

ax.set_ylabel( 'y ', color= 'g', fontsize= '14')

ax.set_zlabel( 'z ', color= 'b', fontsize= '14')

plt.show

结果显示为:

散点图 总结

本文主要是介绍使用 Python 第三方库 Matplotlib 来绘制 3D 图形,当然除了上面演示的这几种,还有更多丰富的图形和功能等待你去挖掘。相比于 2D 图形,3D 图形可以多展现一个维度的数据特征,在可视化时会有更加直观的效果。 在实际的数据可视化过程中,我们要根据具体需求来决定用怎样的形式来展现,而多了解一些工具就可以更加游刃有余。这些强大的工具也正是 Python 在数据分析和可视化方面的一大优势之一。

本文相关代码下载地址:

https://github.com/JustDoPython/python-examples/tree/master/chaoxi/Matplotlib_3D

150年前,他对拿破仑做数据可视化 返回搜狐,查看更多

责任编辑:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530198.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jq ajax traditional,jQuery ajax - param() 方法

更多实例我们可以如下显示对象的查询字符串表示以及 URI 编码版本:var myObject {a: {one: 1,two: 2,three: 3},b: [1,2,3]};var recursiveEncoded $.param(myObject);var recursiveDecoded decodeURIComponent($.param(myObject));alert(recursiveEncoded);aler…

联想x250为什么这么贵_外媒:联想笔记本thinkpadX250如何联想thinkpadX250价格及评价...

Thinkpad笔记本,thinkpad的中文名称是“ Thinking Ben”。它曾经是IBM PC下的计算机品牌产品,在计算机行业中享有很高的声誉。联想收购IBM PC之后,Thinkpad的商标先前归于联想。自上市以来,ThinkPad一直是黑色,简单且外…

接口测试用python怎么做_请问一下python怎么做接口测试工具?

茅侃侃之前使用过urllib和urllib2做接口测试,在做的途中,感觉使用urllib2直接进行的get,post 请求并没有那么好用。作为测试人员,所需要的测试工具应当以方便为第一要务,测试的耗时只要是真正的无人值守,耗…

dw连接服务器文档类型,dw怎么连接服务器的数据库

dw怎么连接服务器的数据库 内容精选换一换本章节指导您使用MongoDB客户端和Robo 3T工具,通过公网连接副本集实例。用户可以直接操作副本集主节点和备节点。主节点用于读写请求,您可以连接主节点对数据进行读写操作。备节点复制主节点数据,用于…

#控制台大学课堂点名问题_你对大学生活的5大误解!看完我想静静......

开学在即,对于即将走进校园的准大学生们来说,大学都是存在于别人描述中的象牙塔,带有心向往之的美好“滤镜”。在你们正式进入大学校园之前,小编决定,顶锅盖“打假”!带你们打破“滤镜”,用正确…

aix服务器屏幕显示被锁住了,Exceed登录AIX远程桌面的问题

今天用Exceed登录新安装的AIX远程桌面,在ExceedXDMCPBrodcast中可以看到AIX主机,但是尝试访问远程桌面时,无法打开登录界面。查看错误日志/var/dt/Xerrors,发现错误信息如下:XIO: fatal IO error 73 (A connection wit…

axios获取图片显示_Vue.js+axios图片预览以及上传显示进度

在平时项目开发中,我们经常会对文件做一些上传操作,不仅仅要实现基本需求,也要兼顾用户体验,根据自己在工作中遇到的问题谈谈对图片上传的预览以及上传进度的优化。1.搭建项目基于Vue.jsaxios搭建的项目,新建一个Index…

剑盾神秘礼物正在维护服务器,宝可梦剑盾神秘礼物获取途径一览

宝可梦剑盾神秘礼物获取途径一览更新时间:2019-11-09作者:shaoshao宝可梦剑盾神秘礼物获取攻略:活动、礼包以及礼物这系列的东西,想必一定是各位游戏玩家们最为喜爱的一部分了吧。在今日,宝可梦剑盾该款角色扮演类冒险…

httpurlconnect设置中文参数_CNC机床参数的设置及报警解除,赶紧收藏吧!

在三菱CNC的硬件连接检查与设置执行完毕向系统送电后,显示器上的READY绿灯仍然不亮。而且在〔诊断〕――〔报警〕 画面上显示很多报警内容,让初次使用三菱CNC的调试工程师感到困惑。而且三菱CNC的参数多达700余种,哪些是开机时必须设置的呢&a…

createsolidcaret 后 很快就不闪烁了_为什么LED灯会越用越暗?为什么会闪烁?

现在LED灯的制作首先要经过严谨的电脑编程制作,制作好灯板,再进入装配车间的流水线,具体咱们就不再展开了。大家都有这么一个生活经验刚买回来的LED灯,总是特别亮,但是过一段时间后很多灯会变得越来越暗,为…

python最大约数是_python – 找到最大的公约数(赋值错误,我迫切需要你的帮助)

我有一个作业(作业)如下:Write a program which enters two positive integers a and b from thekeyboard. Also write a recursive function for determining the gcd(greatest common divisor) of a and b using Euclid’s algorithm.According to this algorithm…

c#简单记事本应用程序的快捷方式_Windows 10七月更新又翻车,记事本没了

每一次微软更新,总是能引起一篇“哀嚎”,翻车实在太频繁了,让人又爱又恨。近日,微软在本月更新补丁推送上,进行了新的调整,让分预装的应用程序被悄然删除,这导致不少用户只能逐一重新安装。从目…

python我的世界给予物品指令_我的世界指令给予物品 我的世界指令给予物品是多少...

给予物品指令为 /give 人物id 物品id 数量,如果数量不填的话默认是64个。示例:/give AW fire_charge 64 给玩家AW 64个火焰弹。其他指令一览/nick ID 名称 -给某人改一个名 ID是加白名单的名字/backup -运行备份命令/fireball -发射一个火球(会破坏方块)…

db2 空值转换函数_Hive常见函数的使用

hive函数1.关系函数等值比较 语法&#xff1a;AB 如果表达式A和表达式B相等&#xff0c;则为TRUE&#xff1b;否则为FALSE不等值比较 <>语法&#xff1a;A <> B如果表达式A为null&#xff0c;或者表达式B为null&#xff0c;返回null&#xff1b;如果表达式A和表达式…

中级软件测试笔试题100精讲_汇集上千位软件测试精英面试笔试题,最全面的题型都在这!...

知己知彼&#xff0c;才能百战不殆测试员想要在竞争激烈的职场中拥有一席之地&#xff0c;就需要提前做好准备。前人栽树&#xff0c;后人乘凉一次面试就能入职自己心仪的公司&#xff0c;就需要通过“前人”积累的面试题来了解面试官的“套路”&#xff0c;通过不断的优化答案…

学考语言成绩c对高考有影响吗_三大影响!考生务必上心,最近正在进行的学考对升学很重要...

阅读关键词&#xff1a;【填报技巧】【新高考】近日(1月6-8日)&#xff0c;高中生们正在进行2021年1月普通高中学业水平合格性考试(也就是大家普遍说的“学考”&#xff0c;又称“合格性考试”)。学考成绩有哪些用途&#xff1f;跟高考录取到底有什么关系&#xff1f;……今天我…

三次握手和四次挥手图解_TCP三次握手和四次挥手详解

作者&#xff1a;雨点的名字来源&#xff1a;https://www.cnblogs.com/qdhxhz/p/8470997.htmlTCP有6种标示:SYN(建立联机) ACK(确认) PSH(传送) FIN(结束) RST(重置) URG(紧急)一、TCP三次握手第一次握手客户端向服务器发出连接请求报文&#xff0c;这时报文首部中的同部位SYN1…

ubuntu修改新增用户的目录_Linux 用户、用户组添加修改删除(ubuntu、centos)

一、LINUX(UBUNTU/CENTOS)用户添加删除修改1、建用户&#xff1a;adduser web #新建web用户useradd web #添加web 用户passwd web #给web用户设置密码useradd web -g admin -n -m #新建web用户并指定用户组为 admin用户组,并自动建立登录目录passwd web #给web 用户设置密码use…

读excel_基础 | Excel中单元格的引用方式,读这篇就够了!

最近推送了几个Excel中最难的函数&#xff0c;哀嚎遍野&#xff0c;太难了……所以今天我们来“从万丈高楼平地起”的平地讲起&#xff01;搞懂Excel单元格引用方式&#xff0c;是保证公式准确最最基本的条件&#xff01;单元格引用方式整体分三种&#xff1a;相对引用(A1)绝对…

天融信防火墙重置配置_天融信防火墙配置手册

天融信防火墙配置指南一、对象与规则现在大多防火墙都采用了面向对象的设计。针对对象的行为进行的快速识别处理&#xff0c;就是规则。比如&#xff1a;甲想到A城市B地点。由这个行为就可以制定一些规则进行约束&#xff0c;例如&#xff1a;1)用户身份识别&#xff0c;是不是…