Python+Matplotlib绘制3D图像的示例详解
来源:脚本之家    时间:2022-04-14 10:03:07
目录
1. 绘制3D柱状图2. 绘制3D曲面图示例1示例23.绘制3D散点图4. 绘制3D曲线图

1. 绘制3D柱状图

绘制3D柱状图使用的是axes3d.bar()方法。

可能跟我们中学学的有一点不同的是,其语法如下:

bar(left, height, zs=0, zdir=‘z’, *args, **kwargs)

其中left表示指向侧边的轴,zs表示指向我们的方向的轴,height即表示高度的轴。这三者都需要是一维的序列对象。
在调用相关方法的时候,比如设置轴标签,还有一点需要区分的是,left对应的是y轴,zs对应的是x轴。(意思就是说,比如使用plt.xticks()方法,操作的是zs;而使用plt.yticks()方法则操作的是left轴。height对应着z轴。)

一段完整的代码示例如下:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D
import numpy as np
plt.rcParams["axes.unicode_minus"] = False
plt.rcParams["axes.facecolor"] = "#cc00ff"
plt.rcParams["font.sans-serif"] = ["STKAITI"]
# 创建画布
fig = plt.figure()
# 创建3D坐标系
axes3d = Axes3D(fig)
zs = range(5)
left = np.arange(0, 10)
height = np.array([])
for i in range(len(zs)):
    z = zs[i]
    np.random.seed(i)
    height = np.random.randint(0, 30, size=10)
    axes3d.bar(left, height, zs=z, zdir="x",
               color=["red", "green", "purple", "yellow", "blue", "black", "gray", "orange", "pink", "cyan"])
plt.xticks(zs, ["1月份", "2月份", "3月份", "4月份", "5月份"])
plt.yticks(left, ["A", "B", "C", "D", "E", "F", "G", "H", "I", "G"])
plt.xlabel("月份")
plt.ylabel("型号")
plt.show()

图像效果如下:

2. 绘制3D曲面图

示例1

绘制曲面图使用的是plot_surface()方法,这个方法的参数相对而言更简单。且X、Y、Z三者的顺序相对较为容易分辨。

通过读示例代码,即可快速掌握其用法:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams["font.sans-serif"] = ["STKAITI"]
plt.rcParams["axes.unicode_minus"] = False
plt.rcParams["axes.facecolor"] = "#cc00ff"
fig = plt.figure(figsize=(10, 8), facecolor="#cc00ff")
ax = Axes3D(fig)
delta = 0.125
# 生成代表X轴数据的列表
x = np.arange(-4.0, 4.0, delta)
# 生成代表Y轴数据的列表
y = np.arange(-3.0, 4.0, delta)
# 对x、y数据执行网格化
X, Y = np.meshgrid(x, y)

Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
# 计算Z轴数据(高度数据)
Z = (Z1 - Z2) * 2
# 绘制3D图形
ax.plot_surface(X, Y, Z,
    rstride=1,  # rstride(row)指定行的跨度
    cstride=1,  # cstride(column)指定列的跨度
    cmap=plt.get_cmap("rainbow"))  # 设置颜色映射
plt.xlabel("X轴", fontsize=15)
plt.ylabel("Y轴", fontsize=15)
ax.set_zlabel("Z轴", fontsize=15)
ax.set_title("《曲面图》", y=1.02, fontsize=25, color="gold")
# 设置Z轴范围
ax.set_zlim(-2, 2)
plt.show()

示例2

更换一组数据,呈现的则是另一种艺术效果:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams["font.sans-serif"] = ["STKAITI"]
plt.rcParams["axes.unicode_minus"] = False
plt.rcParams["axes.facecolor"] = "#cc00ff"
fig = plt.figure(figsize=(12, 10), facecolor="#cc00ff")
ax = Axes3D(fig)
delta = 0.125
# 生成代表X轴数据的列表
x = np.linspace(-2, 2, 10)
# 生成代表Y轴数据的列表
y = np.linspace(-2, 2, 10)
# 对x、y数据执行网格化
X, Y = np.meshgrid(x, y)

# 计算Z轴数据(高度数据)
Z = X**2 - Y**2
# 绘制3D图形
ax.plot_surface(X, Y, Z,
    rstride=1,  # rstride(row)指定行的跨度
    cstride=1,  # cstride(column)指定列的跨度
    cmap=plt.get_cmap("rainbow"))  # 设置颜色映射
plt.xlabel("X轴", fontsize=15)
plt.ylabel("Y轴", fontsize=15)
ax.set_zlabel("Z轴", fontsize=15)
ax.set_title("《曲面图》", y=1.02, fontsize=25, color="gold")
plt.show()

3.绘制3D散点图

在3D曲面图示例1的基础上稍作修改。

绘制散点图使用scatter()方法,将散点颜色设置为绿色,红色边沿。

代码示例如下:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams["font.sans-serif"] = ["STKAITI"]
plt.rcParams["axes.unicode_minus"] = False
plt.rcParams["axes.facecolor"] = "#cc00ff"
fig = plt.figure(figsize=(10, 8), facecolor="#cc00ff")
ax = Axes3D(fig)
delta = 0.125
# 生成代表X轴数据的列表
x = np.arange(-4.0, 4.0, delta)
# 生成代表Y轴数据的列表
y = np.arange(-3.0, 4.0, delta)
# 对x、y数据执行网格化
X, Y = np.meshgrid(x, y)

Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
# 计算Z轴数据(高度数据)
Z = (Z1 - Z2) * 2
# 绘制3D图形
ax.scatter(X, Y, Z,
           c="green",
           edgecolors="red")
plt.xlabel("X轴", fontsize=15)
plt.ylabel("Y轴", fontsize=15)
ax.set_zlabel("Z轴", fontsize=15)
ax.set_title("《散点图》", y=1.02, fontsize=25, color="gold")
# 设置Z轴范围
ax.set_zlim(-2, 2)
plt.show()

绘图效果如下:

4. 绘制3D曲线图

绘制曲线图,使用的则是我们最最最熟悉的plot()方法。

其他部分基本不变,数据部分生成三组适合我们绘图的数据,线条为金色,宽度设定为3.

代码如下:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams["font.sans-serif"] = ["STKAITI"]
plt.rcParams["axes.unicode_minus"] = False
plt.rcParams["axes.facecolor"] = "#cc00ff"
fig = plt.figure(figsize=(10, 8), facecolor="#cc00ff")
ax = Axes3D(fig)
theta = np.linspace(0, 3.14*10, 1000)
r = np.linspace(0, 1, 1000)
x = r * np.cos(theta)
y = r * np.sin(theta)
z = np.linspace(0, 4, 1000)
ax.plot(x, y, z, color="gold", lw=3)
plt.xlabel("X轴", fontsize=15)
plt.ylabel("Y轴", fontsize=15)
ax.set_zlabel("Z轴", fontsize=15)
ax.set_title("《曲线图》", y=1.02, fontsize=25, color="gold")
plt.show()

图像效果如下:

以上就是Python+Matplotlib绘制3D图像的示例详解的详细内容,更多关于Python Matplotlib 3D图像的资料请关注脚本之家其它相关文章!

关键词: 使用的是 设置颜色 图像效果 相关文章 还有一点

X 关闭

X 关闭