知行编程网知行编程网  2022-09-15 10:00 知行编程网 隐藏边栏  68 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于超好看的3D绘图方式,Python厉害了!的相关知识,包括简单3d绘图软件,以及手机3d绘图软件这些编程知识,希望对大家有参考作用。

超好用的3D画法,Python厉害了!


【01x01】Axes3D 对象创建方法一:Axes3D(fig)

在 Matplotlib 1.0.0 版本中,要绘制 3D 图形,需要先导入 Axes3D 包。获取图形画布对象 fig 后,使用 Axes3D(fig) 方法创建一个 Axes3D 对象。具体方法如下:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 获取 figure 画布并创建 Axes3D 对象
fig = plt.figure()
ax = Axes3D(fig)
# 数据坐标
z = np.linspace(0, 15, 1000)
x = np.sin(z)
y = np.cos(z)
# 绘制线性图
ax.plot(x, y, z)
plt.show()


【01x02】Axes3D 对象创建方法二:add_subplot

在 Matplotlib 3.2.0 版本中,可以通过创建子图来绘制 3D 图,然后指定投影参数为 3d。返回的 ax 是一个 Axes3D 对象。可以使用以下两种方法:

import numpy as np
import matplotlib.pyplot as plt
# 获取 figure 画布并通过子图创建 Axes3D 对象
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 数据坐标
z = np.linspace(0, 15, 1000)
x = np.sin(z)
y = np.cos(z)
# 绘制线性图
ax.plot(x, y, z)
plt.show()
import numpy as np
import matplotlib.pyplot as plt
# 通过子图创建 Axes3D 对象
ax = plt.subplot(111, projection='3d')
# 数据坐标
z = np.linspace(0, 15, 1000)
x = np.sin(z)
y = np.cos(z)
# 绘制线性图
ax.plot(x, y, z)
plt.show()


【01x03】Axes3D 对象创建方法三:gca

除了以上两种方法,还可以先获取canvas对象fig,然后通过fig.gca()方法获取当前绘图区域(gca = Get Current Axes),然后指定投影参数为3d,并且返回的 ax 是 Axes3D 对象。

import numpy as np
import matplotlib.pyplot as plt
# 依次获取画布和绘图区并创建 Axes3D 对象
fig = plt.figure()
ax = fig.gca(projection='3d')
# 数据坐标
z = np.linspace(0, 15, 1000)
x = np.sin(z)
y = np.cos(z)
# 绘制线性图
ax.plot(x, y, z)
plt.show()

以上三种方法运行结果均为下图:

超好用的3D画法,Python厉害了!


【02x00】cmap 与 colorbar

默认情况下,散点图、线性图、曲面图等都会用纯色着色,但可以通过提供 cmap 参数来支持颜色映射。 cmap参数用来设置一些特殊的颜色组合,比如渐变色等。

如果使用cmap参数,可以使用pyplot.colorbar()函数来绘制颜色条,颜色控制条。

基本语法:matplotlib.pyplot.colorbar([mappable=None, cax=None, ax=None, **kw])

部分参数说明见下表,其他参数如长度、宽度等请参考官方文档。

参数 描述
mappable 要设置色条的图像对象,该参数对于 Figure.colorbar 方法是必需的,但对于 pyplot.colorbar 函数是可选的
cax 可选项,要绘制色条的轴
ax 可选项,设置色条的显示位置,通常在一个画布上有多个子图时使用
**kw 可选项,其他关键字参数,参考官方文档

【03x00】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 np
import matplotlib.pyplot as plt
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
# 依次获取画布和绘图区并创建 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 线性图一')
ax.plot(x2, y2, z2, color='r', label='3D 线性图二')
# 设置标题、轴标签、图例,也可以直接使用 plt.title、plt.xlabel、plt.legend...
ax.set_title('绘制 3D 线性图示例', pad=15, fontsize='12')
ax.set_xlabel('x 轴', color='r', fontsize='12')
ax.set_ylabel('y 轴', color='g', fontsize='12')
ax.set_zlabel('z 轴', color='b', fontsize='12')
ax.legend()
plt.show()


超好用的3D画法,Python厉害了!


【04x00】3D 散点图:Axes3D.scatter

基本方法: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

标记的颜色,可选,可以是单一颜色或颜色列表

支持英文颜色名称及其缩写、十六进制颜色代码等。更多颜色示例见官网

depthshade bool 值,可选项,默认 True,是否为散点标记着色以提供深度外观
**kwargs 其他关键字参数,可选项,可参见
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
# 依次获取画布和绘图区并创建 Axes3D 对象
fig = plt.figure()
ax = fig.gca(projection='3d')
n = 100
def randrange(n, vmin, vmax):
    return (vmax - vmin)*np.random.rand(n) + vmin
'''
定义绘制 n 个随机点,设置每一组数据点的样式和范围
x轴数据位于[23,32]区间,y轴数据位于[0,100]区间,z轴数据位于[zlow,zhigh]区间
'''
for m, zlow, zhigh in [('o', -50, -25), ('^', -30, -5)]:
    xs = randrange(n, 23, 32)
    ys = randrange(n, 0, 100)
    zs = randrange(n, zlow, zhigh)
    ax.scatter(xs, ys, zs, marker=m)
# 设置标题、轴标签、图例,也可以直接使用 plt.title、plt.xlabel...
ax.set_title('绘制 3D 散点图示例', pad=15, fontsize='12')
ax.set_xlabel('x 轴', color='b')
ax.set_ylabel('y 轴', color='b')
ax.set_zlabel('z 轴', color='b')
plt.show()


超好用的3D画法,Python厉害了!


【05x00】3D 线框图:Axes3D.plot_wireframe

基本方法:Axes3D.plot_wireframe(X, Y, Z[, *args, **kwargs])

参数 描述
X 二维数组,x 轴数据
Y 二维数组,y 轴数据
Z 二维数组,z 轴数据
**kwargs 其他关键字参数,可选项,如线条样式颜色等,可参见
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
# 获取 figure 画布并通过子图创建 Axes3D 对象
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 定义Z轴坐标的生成方法
def f(m, n):
    return np.sin(np.sqrt(m ** 2 + n ** 2))
# 设置3D线框图数据
x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
# 生成网格点坐标矩阵,该方法在系列文章八中有具体介绍
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
# 绘制3D线框图
ax.plot_wireframe(X, Y, Z, color='c')
# 设置标题、轴标签、图例,也可以直接使用 plt.title、plt.xlabel...
ax.set_title('绘制 3D 线框图示例', pad=15, fontsize='12')
ax.set_xlabel('x 轴')
ax.set_ylabel('y 轴')
ax.set_zlabel('z 轴')
plt.show()

超好用的3D画法,Python厉害了!

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享