plot参数详解python_30行Python代码实现3D数据可视化
作者:潮汐
来源:Python技术
欢迎来到编程教室~
我们之前的文章中有讲解过不少 Matplotlib 的用法,比如:
完成这50个Matplotlib代码,你也能画出优秀的图表
25个常用Matplotlib图的Python代码,收藏了!
之前我们基本都是用它来绘制二维的数据图表。而今天文章中,我们将教大家如何用不到 30 行代码绘制 Matplotlib 3D 图形。
回顾 2D 作图
用赛贝尔曲线作 2d 图。此图是用基于 Matplotlib 的 Path 通过赛贝尔曲线实现的,有对赛贝尔曲线感兴趣的朋友们可以深入了解一下。在 matplotlib 中,figure 为画布,axes 为绘图区,fig.add_subplot()、plt.subplot() 方法均可以创建子图。以下是作图实践。
import matplotlib.path as mpathimport matplotlib.patches as mpatchesimport matplotlib.pyplot as plt
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 linesx, 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 对象。
导入包:
from matplotlib import cmfrom matplotlib.ticker import LinearLocator, FormatStrFormatterfrom mpl_toolkits.mplot3d import Axes3D
绘图全过程:
import matplotlib.pyplot as pltfrom matplotlib import cmfrom matplotlib.ticker import LinearLocator, FormatStrFormatterfrom mpl_toolkits.mplot3d import Axes3Dimport numpy as np
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()
呈现效果:
3D 帽子图2
import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()# 指定图形类型为 3d 类型ax = fig.add_subplot(111, projection='3d')# X, Y valueX = 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 valueZ = 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()
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 |
import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D
# 依次获取画布和绘图区并创建 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 + 1x1 = 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 | 其他关键字 |
import matplotlib.pyplot as pltimport numpy as npfrom mpl_toolkits.mplot3d import Axes3D
def randrange(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].for c, 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年前,他对拿破仑做数据可视化
plot参数详解python_30行Python代码实现3D数据可视化相关推荐
- 30行python代码设计_30行Python代码实现3D数据可视化
原标题:30行Python代码实现3D数据可视化 作者:潮汐 来源:Python技术 欢迎来到 编程教室~ 我们之前的文章中有讲解过不少 Matplotlib 的用法,比如: 之前我们基本都是用它来绘 ...
- pandas to_csv参数详解_【Python基础】Pandas数据可视化原来也这么厉害
一.可视化概述 在Python中,常见的数据可视化库有3个: matplotlib:最常用的库,可以算作可视化的必备技能库,比较底层,api多,学起来不太容易. seaborn:是建构于matplot ...
- 详解200行Python代码实现控制台版2048【总有一款坑适合你】【超详细】
跟着实验楼学习了2048的Python实现,先丢个地址 200行Python代码实现2048 我接触Python时间不长,只了解一些基本的语法和容器,在学习的过程中遇到不少问题,这里做一个记录. cu ...
- matplotlib.pyplot.plot()参数详解、线形图、条形图、散点图、饼状图、画布大小、位置、颜色、标题、图例、坐标轴刻度设置 实例详解
文章目录 matplotlib.pyplot.plot()绘图文档 1. plot函数的一般的调用形式: 2. 参数fmt,以及一些常用参数举例 3.一些图形的绘制 1.线形图plt 2. 柱形图/条 ...
- 关于康托展开和逆康托展开详解,及python代码
在LeetCode上有这样一道题: 60. 第k个排列 给出集合 [1,2,3,-,n],其所有元素共有 n! 种排列. 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: ...
- 数字水印技术:LSB加密详解(附python代码)
概要 数字水印是一种将标识信息嵌入到载体当中,且不影响载体使用的一种技术,主要分为时域水印嵌入算法(将水印嵌入到时域采样数据中)和变换域水印嵌入算法(先对音频做变换,将水印嵌入到变换域系数中).本文主 ...
- 有人说Python是青铜?我用50行Python代码绘制3D机场分布图
绘制一款的3D图形,不仅可以直观的展示数据分析的结果,也更方便数据化运营,同时也让工作成果更容易被大众理解.本文就基于python绘制一款基础的3D地图,用于直观展示全国机场的分布情况,以及该机场出发 ...
- python画50个图-有人说Python是青铜?我用50行Python代码绘制3D机场分布图
绘制一款的3D图形,不仅可以直观的展示数据分析的结果,也更方便数据化运营,同时也让工作成果更容易被大众理解.本文就基于python绘制一款基础的3D地图,用于直观展示全国机场的分布情况,以及该机场出发 ...
- 50 行 Python 代码制作一个数据大屏
今天给大家分享一个制作数据大屏的工具,非常的好用,100行左右的Python代码就可以制作出来一个完整的数据大屏,并且代码的逻辑非常容易理解. PywebIO介绍 Python当中的PywebIO模块 ...
最新文章
- JS字符串的下划线命名和驼峰命名转换
- 【转】推荐计算机科学类的经典书籍 3
- mysql providername,c#访问各数据库的providerName各驱动
- 单例模式懒汉式(线程安全写法)
- java short后缀_自学java的新手问个问题,为什么写个代码中的int能自动转
- mysql vfp_用 VFP 连接 MYSQL 数据库
- MySQL 查询数据
- windows上的一些命令和工具
- 大数据平台设计哲学的重构
- 金融数据安全分类分级解决方案
- 更新显卡驱动后,Windows重启卡在Logo页面
- INDEX函数,隔行提取数据
- lucene 学习笔记之飞龙在天
- php 分表帝国,帝国cms附表如何分表
- 周口女子职专计算机分为哪些专业,周口女子职业中专学校
- CSS颜色属性、文本文字属性、属性继承
- Kinect for Windows SDK v2.0 开发笔记 (十三) 高清面部帧(4) 面部模型构建器
- iPhone销量下降,这两种方法可以把Android和iPhone手机投屏到电脑上!
- 金大侠的亲属与剑桥大学最厉害的三个学院
- axure7.0下载安装教程
热门文章
- 机器学习实践中的10个小秘诀!
- BF法-字符模式匹配
- 正则表达式re模块使用介绍
- 汇编语言学习-寄存器(CPU工作原理)
- 2011-2012年《软件工程》本科期末试卷
- ACMNO.22 C语言-公约公倍2 写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。 输入 两个数 输出 最大公约数 最小公倍数
- 什么??听说Python要凉!
- 【学术相关】什么是核心期刊?国家级期刊、省级期刊、国际级期刊又是啥?...
- 大数据背后的神秘定理:贝叶斯公式
- 如何用 OpenCV、Python 和深度学习实现面部识别?