使用 Matplotlib 在 Python 中进行三维绘图

2023-10-26 14:21:01 浏览数 (2)

使用 Matplotlib 在 Python 中进行三维绘图

3D 图是可视化具有三个维度的数据(例如具有两个因变量和一个自变量的数据)的非常重要的工具。通过在 3D 图中绘制数据,我们可以更深入地了解具有三个变量的数据。我们可以使用各种 matplotlib 库函数来绘制 3D 绘图。

使用 Matplotlib 进行三维绘图的示例

我们首先使用Matplotlib库绘制 3D 轴。为了绘制 3D 轴,我们只需将plt.axes()的投影参数从 None 更改为 3D。

代码语言:javascript复制
import numpy as np
import matplotlib.pyplot as plt


fig = plt.figure()
ax = plt.axes(projection='3d')

输出:

使用 matplotlib 绘制 3D 轴

使用上述语法,启用三维轴,并且可以在 3 个维度上绘制数据。3 维图提供了一种动态方法,使数据更具交互性。与 2-D 图一样,我们可以使用不同的方式来表示来绘制 3-D 图。我们可以制作散点图、等高线图、曲面图等。让我们看看不同的 3-D 图。 由线和点组成的图是最简单的 3 维图。我们将使用ax.plot3d 和ax.scatter函数分别绘制线图和点图。

使用 Matplotlib绘制 3 维线图

为了绘制 3 维线图,我们将使用 mpl_toolkits 库中的 mplot3d 函数。为了在 3D 中绘制直线,我们必须为直线方程初始化三个变量点。在我们的例子中,我们将定义三个变量x、y 和 z。  

代码语言:javascript复制
# importing mplot3d toolkits, numpy and matplotlib
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()

# syntax for 3-D projection
ax = plt.axes(projection ='3d')

# defining all 3 axis
z = np.linspace(0, 1, 100)
x = z * np.sin(25 * z)
y = z * np.cos(25 * z)

# plotting
ax.plot3D(x, y, z, 'green')
ax.set_title('3D line plot geeks for geeks')
plt.show()

输出:

 使用 matplotlib 库绘制 3D 线图

使用 Matplotlib 绘制 3 维散点图

要使用散点绘制相同的图形,我们将使用matplotlib 中的scatter()函数。它将使用不同的点绘制相同的直线方程。 

代码语言:javascript复制
# importing mplot3d toolkits
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()

# syntax for 3-D projection
ax = plt.axes(projection ='3d')

# defining axes
z = np.linspace(0, 1, 100)
x = z * np.sin(25 * z)
y = z * np.cos(25 * z)
c = x   y
ax.scatter(x, y, z, c = c)

# syntax for plotting
ax.set_title('3d Scatter plot geeks for geeks')
plt.show()

输出:

使用 Matplotlib 库绘制 3D 点图

使用 Matplotlib 库绘制曲面图  

曲面图和线框图适用于网格数据。他们获取网格值并将其绘制在三维表面上。我们将使用plot_surface()函数来绘制曲面图。

代码语言:javascript复制
# importing libraries
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt

# defining surface and axes
x = np.outer(np.linspace(-2, 2, 10), np.ones(10))
y = x.copy().T
z = np.cos(x ** 2   y ** 3)

fig = plt.figure()

# syntax for 3-D plotting
ax = plt.axes(projection='3d')

# syntax for plotting
ax.plot_surface(x, y, z, cmap='viridis',
				edgecolor='green')
ax.set_title('Surface plot geeks for geeks')
plt.show()

输出:

使用 matplotlib 库绘制曲面图

使用 Matplotlib 库绘制线框图  

为了绘制线框图,我们将使用matplotlib 库中的plot_wireframe()函数。

代码语言:javascript复制
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt


# function for z axis
def f(x, y):
	return np.sin(np.sqrt(x ** 2   y ** 2))

# x and y axis
x = np.linspace(-1, 5, 10)
y = np.linspace(-1, 5, 10)

X, Y = np.meshgrid(x, y)
Z = f(X, Y)

fig = plt.figure()
ax = plt.axes(projection ='3d')
ax.plot_wireframe(X, Y, Z, color ='green')
ax.set_title('wireframe geeks for geeks');

输出:

使用 matplotlib 库的 3D 线框图

使用 Matplotlib 库绘制等高线图

等值线图采用二维规则网格中的所有输入数据,并在每个点评估 Z 数据。我们使用 ax.contour3D 函数来绘制等高线图。等高线图是可视化优化图的绝佳方法。 

代码语言:javascript复制
def function(x, y):
	return np.sin(np.sqrt(x ** 2   y ** 2))


x = np.linspace(-10, 10, 40)
y = np.linspace(-10, 10, 40)

X, Y = np.meshgrid(x, y)
Z = function(X, Y)

fig = plt.figure(figsize=(10, 8))
ax = plt.axes(projection='3d')

ax.plot_surface(X, Y, Z, cmap='cool', alpha=0.8)

ax.set_title('3D Contour Plot of function(x, y) =
				sin(sqrt(x^2   y^2))', fontsize=14)
ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('y', fontsize=12)
ax.set_zlabel('z', fontsize=12)

plt.show()

输出:

使用 matplotlib 绘制函数的 3D 等高线图 

在 Python 中绘制曲面三角剖分 

上图有时过于受限且不方便。因此,通过这种方法,我们使用一组随机抽签。函数ax.plot_trisurf 用于绘制该图。虽然不是那么明确,但是更加灵活。

代码语言:javascript复制
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.tri import Triangulation

def f(x, y):
	return np.sin(np.sqrt(x ** 2   y ** 2))

x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)

tri = Triangulation(X.ravel(), Y.ravel())

fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')

ax.plot_trisurf(tri, Z.ravel(), cmap='cool', edgecolor='none', alpha=0.8)

ax.set_title('Surface Triangulation Plot of f(x, y) =
				sin(sqrt(x^2   y^2))', fontsize=14)
ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('y', fontsize=12)
ax.set_zlabel('z', fontsize=12)

plt.show()

输出:

使用 matplotlib 绘制等高线图的表面三角测量图 

在Python中绘制莫比乌斯带 

莫比乌斯带也称为扭曲圆柱体,是一种没有边界的单面表面。要创建莫比乌斯带,请考虑其参数化,它是一个二维带,我们需要两个内在维度。其围绕环的角度范围为 0 到 2 个扇形,宽度范围为 -1 到 1。

代码语言:javascript复制
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# Define the parameters of the Möbius strip
R = 2

# Define the Möbius strip surface
u = np.linspace(0, 2*np.pi, 100)
v = np.linspace(-1, 1, 100)
u, v = np.meshgrid(u, v)
x = (R   v*np.cos(u/2)) * np.cos(u)
y = (R   v*np.cos(u/2)) * np.sin(u)
z = v * np.sin(u/2)

# Create the plot
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# Plot the Möbius strip surface
ax.plot_surface(x, y, z, alpha=0.5)

# Set plot properties
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('Möbius Strip')

# Set the limits of the plot
ax.set_xlim([-3, 3])
ax.set_ylim([-3, 3])
ax.set_zlim([-3, 3])

# Show the plot
plt.show()

输出:

使用 matplotlib 库的莫比乌斯带图 

0 人点赞