原标题: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年前,他对拿破仑做数据可视化 返回搜狐,查看更多

责任编辑:

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

  1. python动态心形代码_Python实现酷炫的动态交互式数据可视化,附代码!

    (关注公众号AI新视野,发送'资料'二字,免费获取50G人工智能视频教程!) 本文介绍如何创建交互式图表和小组件,使用python做数据可视化.涉及的python库有:Plotly, Bokeh, n ...

  2. python开发cs程序_CSE209代做、代写Computer Graphics、代做CS/python编程设计代写Python程序|代做Processing...

    CSE209代做.代写Computer Graphics.代做CS/python编程设计代写Python程序|代做ProcessingCSE209 Computer Graphics~1~CSE209 ...

  3. python 可视化 画直线_用Python画江苏省地图,实现各地级市数据可视化

    前言 万万没想到我昨天发布的用Python画中国地图,实现各省份数据可视化这篇文章获得了很多朋友的喜欢,目前已获得了66次转发,314次收藏,也让我涨了60个左右粉丝. 小嘚瑟 虽然这点成绩跟很多大V ...

  4. python实现的、带GUI界面电影票房数据可视化程序

    代码地址如下: http://www.demodashi.com/demo/14588.html ##详细说明: Tushare是一个免费.开源的python财经数据接口包.主要实现对股票等金融数据从 ...

  5. Python爬取影评并进行情感分析和数据可视化

    Python爬取影评并进行情感分析和数据可视化 文章目录 Python爬取影评并进行情感分析和数据可视化 一.引言 二.使用requests+BeautifulSoup进行影评的爬取 1.分析界面元素 ...

  6. Python在Seaborn中手动指定调色板颜色进行数据可视化颜色自定义实战(Manually Specify Palette Colors in Seaborn)

    Python在Seaborn中手动指定调色板颜色进行数据可视化颜色自定义实战(Manually Specify Palette Colors in Seaborn) 目录

  7. plot参数详解python_30行Python代码实现3D数据可视化

    作者:潮汐 来源:Python技术 欢迎来到编程教室~ 我们之前的文章中有讲解过不少 Matplotlib 的用法,比如: 完成这50个Matplotlib代码,你也能画出优秀的图表 25个常用Mat ...

  8. Python中国知网(cnki)爬虫及数据可视化分析设计

    开发环境: Pycharm + Python3.6 + Django2.0 + mysql数据库,redis数据库 毕业设计-中国知网(cnki)爬虫及数据可视化,采用Django和Celery将爬虫 ...

  9. python动态交互图表_Python 调用 matplotlib 实现交互式数据可视化图表案例

    交互式的数据可视化图表是 New IT 新技术的一个应用方向,在过去,用户要在网页上查看数据,基本的实现方式就是在页面上显示一个表格出来,的而且确,用表格的方式来展示数据,显示的数据量会比较大,但是, ...

最新文章

  1. 深度学习近似建模,助力飞越「维数灾难」温度场
  2. python【蓝桥杯vip练习题库】BASIC-16分解质因数(数论 质数分解)
  3. 查看电脑python虚拟环境-Linux系统创建python虚拟环境
  4. python和c哪个好学-C/C++和Python哪个更有前景?
  5. SharePoint 2013安装图文教程
  6. 记6分的交通违法行为
  7. python中math库最大值_python-math库解析
  8. C++中volatile关键字
  9. 笨办法学 Python · 续 练习 18:性能测量
  10. 动态加载js文件 document.createElement
  11. GhostNet论文
  12. 软件测试脚本语言有哪些,测试脚本是什么意思有哪些脚本
  13. 适合ABB和halcon互转——四元数与欧拉角互转方法C#
  14. 2020 IJCAI 接受论文 list 分类排列(一)
  15. thinkpad使用u盘启动
  16. oracle重建inventory,Oracle中Inventory目录作用以及如何重建此目录-Oracle
  17. 每天3分钟知晓天下事,一句话新闻资讯简报的公众号推荐
  18. 【UWB 定位】测距TOA 和 TDOA详解
  19. 网络协议 11 - Socket 编程(下)
  20. Spring入门第一讲——Spring框架的快速入门

热门文章

  1. 重磅!Python又第一了!网友:为什么找不到好工作?真相让人脸红…
  2. c语言spi测试代码,spi_test.c的spi跟踪(spi 数据传送流程)
  3. redistemplate.opsforvalue 设置不过期_民法典即将实施!“离婚冷静期”倍受关注
  4. java timer schedule_java怎么再次设置Timer的schedule???
  5. linux+oracle+自动增量备份脚本,linux自动运行rman增量备份脚本
  6. 导入Oracle 数据库镜像,创建Oracle虚拟机_01
  7. IntelliJ IDEA 2019 安装lombok
  8. jmap+MAT实战内存溢出
  9. 超详细前端开发案例:品优购商场项目(四)
  10. python3-matplotlib基本使用(以折线图为例)