Python绘制3D图形


Posted in Python onMay 03, 2018

3D图形在数据分析、数据建模、图形和图像处理等领域中都有着广泛的应用,下面将给大家介绍一下如何使用python进行3D图形的绘制,包括3D散点、3D表面、3D轮廓、3D直线(曲线)以及3D文字等的绘制。

准备工作:

python中绘制3D图形,依旧使用常用的绘图模块matplotlib,但需要安装mpl_toolkits工具包,安装方法如下:windows命令行进入到python安装目录下的Scripts文件夹下,执行: pip install --upgrade matplotlib即可;linux环境下直接执行该命令。

安装好这个模块后,即可调用mpl_tookits下的mplot3d类进行3D图形的绘制。

下面以实例进行说明。

1、3D表面形状的绘制

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
import numpy as np 
 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
 
# Make data 
u = np.linspace(0, 2 * np.pi, 100) 
v = np.linspace(0, np.pi, 100) 
x = 10 * np.outer(np.cos(u), np.sin(v)) 
y = 10 * np.outer(np.sin(u), np.sin(v)) 
z = 10 * np.outer(np.ones(np.size(u)), np.cos(v)) 
 
# Plot the surface 
ax.plot_surface(x, y, z, color='b') 
 
plt.show()

球表面,结果如下:

Python绘制3D图形

2、3D直线(曲线)的绘制

import matplotlib as mpl 
from mpl_toolkits.mplot3d import Axes3D 
import numpy as np 
import matplotlib.pyplot as plt 
 
mpl.rcParams['legend.fontsize'] = 10 
 
fig = plt.figure() 
ax = fig.gca(projection='3d') 
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100) 
z = np.linspace(-2, 2, 100) 
r = z**2 + 1 
x = r * np.sin(theta) 
y = r * np.cos(theta) 
ax.plot(x, y, z, label='parametric curve') 
ax.legend() 
 
plt.show()

这段代码用于绘制一个螺旋状3D曲线,结果如下:

Python绘制3D图形

3、绘制3D轮廓

from mpl_toolkits.mplot3d import axes3d 
import matplotlib.pyplot as plt 
from matplotlib import cm 
 
fig = plt.figure() 
ax = fig.gca(projection='3d') 
X, Y, Z = axes3d.get_test_data(0.05) 
cset = ax.contour(X, Y, Z, zdir='z', offset=-100, cmap=cm.coolwarm) 
cset = ax.contour(X, Y, Z, zdir='x', offset=-40, cmap=cm.coolwarm) 
cset = ax.contour(X, Y, Z, zdir='y', offset=40, cmap=cm.coolwarm) 
 
ax.set_xlabel('X') 
ax.set_xlim(-40, 40) 
ax.set_ylabel('Y') 
ax.set_ylim(-40, 40) 
ax.set_zlabel('Z') 
ax.set_zlim(-100, 100) 
 
plt.show()

绘制结果如下:

Python绘制3D图形

4、绘制3D直方图

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
import numpy as np 
 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
x, y = np.random.rand(2, 100) * 4 
hist, xedges, yedges = np.histogram2d(x, y, bins=4, range=[[0, 4], [0, 4]]) 
 
# Construct arrays for the anchor positions of the 16 bars. 
# Note: np.meshgrid gives arrays in (ny, nx) so we use 'F' to flatten xpos, 
# ypos in column-major order. For numpy >= 1.7, we could instead call meshgrid 
# with indexing='ij'. 
xpos, ypos = np.meshgrid(xedges[:-1] + 0.25, yedges[:-1] + 0.25) 
xpos = xpos.flatten('F') 
ypos = ypos.flatten('F') 
zpos = np.zeros_like(xpos) 
 
# Construct arrays with the dimensions for the 16 bars. 
dx = 0.5 * np.ones_like(zpos) 
dy = dx.copy() 
dz = hist.flatten() 
 
ax.bar3d(xpos, ypos, zpos, dx, dy, dz, color='b', zsort='average') 
 
plt.show()

绘制结果如下:

Python绘制3D图形

5、绘制3D网状线

from mpl_toolkits.mplot3d import axes3d 
import matplotlib.pyplot as plt 
 
 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
 
# Grab some test data. 
X, Y, Z = axes3d.get_test_data(0.05) 
 
# Plot a basic wireframe. 
ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10) 
 
plt.show()

绘制结果如下:

Python绘制3D图形

6、绘制3D三角面片图

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
import numpy as np 
 
 
n_radii = 8 
n_angles = 36 
 
# Make radii and angles spaces (radius r=0 omitted to eliminate duplication). 
radii = np.linspace(0.125, 1.0, n_radii) 
angles = np.linspace(0, 2*np.pi, n_angles, endpoint=False) 
 
# Repeat all angles for each radius. 
angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1) 
 
# Convert polar (radii, angles) coords to cartesian (x, y) coords. 
# (0, 0) is manually added at this stage, so there will be no duplicate 
# points in the (x, y) plane. 
x = np.append(0, (radii*np.cos(angles)).flatten()) 
y = np.append(0, (radii*np.sin(angles)).flatten()) 
 
# Compute z to make the pringle surface. 
z = np.sin(-x*y) 
 
fig = plt.figure() 
ax = fig.gca(projection='3d') 
 
ax.plot_trisurf(x, y, z, linewidth=0.2, antialiased=True) 
 
plt.show(

绘制结果如下:

Python绘制3D图形

7、绘制3D散点图

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
import numpy as np 
 
 
def randrange(n, vmin, vmax): 
 ''''' 
 Helper function to make an array of random numbers having shape (n, ) 
 with each number distributed Uniform(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_xlabel('X Label') 
ax.set_ylabel('Y Label') 
ax.set_zlabel('Z Label') 
 
plt.show()

绘制结果如下:

Python绘制3D图形

8、绘制3D文字

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
 
 
fig = plt.figure() 
ax = fig.gca(projection='3d') 
 
# Demo 1: zdir 
zdirs = (None, 'x', 'y', 'z', (1, 1, 0), (1, 1, 1)) 
xs = (1, 4, 4, 9, 4, 1) 
ys = (2, 5, 8, 10, 1, 2) 
zs = (10, 3, 8, 9, 1, 8) 
 
for zdir, x, y, z in zip(zdirs, xs, ys, zs): 
 label = '(%d, %d, %d), dir=%s' % (x, y, z, zdir) 
 ax.text(x, y, z, label, zdir) 
 
# Demo 2: color 
ax.text(9, 0, 0, "red", color='red') 
 
# Demo 3: text2D 
# Placement 0, 0 would be the bottom left, 1, 1 would be the top right. 
ax.text2D(0.05, 0.95, "2D Text", transform=ax.transAxes) 
 
# Tweaking display region and labels 
ax.set_xlim(0, 10) 
ax.set_ylim(0, 10) 
ax.set_zlim(0, 10) 
ax.set_xlabel('X axis') 
ax.set_ylabel('Y axis') 
ax.set_zlabel('Z axis') 
 
plt.show(

绘制结果如下:

Python绘制3D图形

9、3D条状图

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
import numpy as np 
 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
for c, z in zip(['r', 'g', 'b', 'y'], [30, 20, 10, 0]): 
 xs = np.arange(20) 
 ys = np.random.rand(20) 
 
 # You can provide either a single color or an array. To demonstrate this, 
 # the first bar of each set will be colored cyan. 
 cs = [c] * len(xs) 
 cs[0] = 'c' 
 ax.bar(xs, ys, zs=z, zdir='y', color=cs, alpha=0.8) 
 
ax.set_xlabel('X') 
ax.set_ylabel('Y') 
ax.set_zlabel('Z') 
 
plt.show()

绘制结果如下:

Python绘制3D图形

以上所述是小编给大家介绍的python绘制3D图形,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持

Python 相关文章推荐
简单的通用表达式求10乘阶示例
Mar 03 Python
python中使用xlrd、xlwt操作excel表格详解
Jan 29 Python
python中Genarator函数用法分析
Apr 08 Python
Python中的迭代器与生成器高级用法解析
Jun 28 Python
python爬虫的工作原理
Mar 05 Python
python爬虫实战之爬取京东商城实例教程
Apr 24 Python
python实现C4.5决策树算法
Aug 29 Python
python将视频转换为全字符视频
Apr 26 Python
在django中实现页面倒数几秒后自动跳转的例子
Aug 16 Python
Pytorch Tensor的统计属性实例讲解
Dec 30 Python
python3.8.1+selenium实现登录滑块验证功能
May 22 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
Sep 21 Python
Python学习_几种存取xls/xlsx文件的方法总结
May 03 #Python
Python使用win32 COM实现Excel的写入与保存功能示例
May 03 #Python
python调用xlsxwriter创建xlsx的方法
May 03 #Python
Python基于opencv的图像压缩算法实例分析
May 03 #Python
python实现数据导出到excel的示例--普通格式
May 03 #Python
python操作xlsx文件的包openpyxl实例
May 03 #Python
对Python字符串中的换行符和制表符介绍
May 03 #Python
You might like
一个简单的php加密解密函数(动态加密)
2013/06/19 PHP
使用 PHP Masked Package 屏蔽敏感数据的实现方法
2019/10/15 PHP
解放web程序员的输入验证
2006/10/06 Javascript
javascript Array.prototype.slice使用说明
2010/10/11 Javascript
js限制textarea每行输入字符串长度的代码
2012/10/31 Javascript
JS中 用户登录系统的解决办法
2013/04/15 Javascript
js里取容器大小、定位、距离等属性搜集整理
2013/08/19 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
jQuery绑定事件的几种实现方式
2016/05/09 Javascript
Js调用Java方法并互相传参的简单实例
2016/08/11 Javascript
Ionic默认的Tabs模板使用实例
2016/08/29 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
2016/12/28 Javascript
JS实现的简易拖放效果示例
2016/12/29 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
2017/01/09 Javascript
浅析JavaScript中var that=this
2017/02/17 Javascript
想用好React的你必须要知道的一些事情
2017/07/24 Javascript
Three.js开发实现3D地图的实践过程总结
2017/11/20 Javascript
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
集成vue到jquery/bootstrap项目的方法
2018/02/10 jQuery
nodejs实现解析xml字符串为对象的方法示例
2018/03/14 NodeJs
vue-router 源码实现前端路由的两种方式
2018/07/02 Javascript
vue.js自定义组件directives的实例代码
2018/11/09 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
2020/08/07 Javascript
vue3弹出层V3Popup实例详解
2021/01/04 Vue.js
[41:13]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第一场 11.20
2020/11/20 DOTA
python中stdout输出不缓存的设置方法
2014/05/29 Python
python3监控CentOS磁盘空间脚本
2018/06/21 Python
Python基础学习之类与实例基本用法与注意事项详解
2019/06/17 Python
解决Django Static内容不能加载显示的问题
2019/07/28 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
CSS3新属性transition-property transform box-shadow实例学习
2013/06/06 HTML / CSS
Street One瑞士:德国现代时装公司
2019/10/09 全球购物
教学实验楼管理制度
2014/02/01 职场文书
清洁工个人工作总结
2015/03/05 职场文书
应聘教师求职信范文
2015/03/20 职场文书
PostgreSQL13基于流复制搭建后备服务器的方法
2022/01/18 PostgreSQL