Matplotlib 3D 绘图

Matplotlib 3D 绘图

参考:matplotlib 3d plotting

Matplotlib 是一个非常流行的 Python 绘图库,它提供了一套非常完整的绘图API,支持各种静态、动态、交互式的图表。除了常规的二维图表,Matplotlib 还支持三维图表的绘制。本文将详细介绍如何使用 Matplotlib 绘制三维图表,包括三维散点图、三维线图、三维曲面图等,并提供了一系列示例代码帮助理解和学习。

1. 三维散点图

三维散点图是三维数据可视化的基本形式之一,它可以帮助我们从三个维度上理解数据的分布。

示例代码 1:绘制基本的三维散点图

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
ax.scatter(x, y, z)
ax.set_title("3D Scatter Plot - how2matplotlib.com")
plt.show()

Output:

Matplotlib 3D 绘图

2. 三维线图

三维线图可以用来表示三维空间中的路径或者函数关系。

示例代码 2:绘制简单的三维线图

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
t = np.linspace(0, 2*np.pi, 100)
x = np.sin(t)
y = np.cos(t)
z = t
ax.plot(x, y, z)
ax.set_title("3D Line Plot - how2matplotlib.com")
plt.show()

Output:

Matplotlib 3D 绘图

3. 三维曲面图

三维曲面图可以用来展示三维空间中的曲面,是研究复杂曲面形态的有力工具。

示例代码 3:绘制三维曲面图

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z, cmap='viridis')
ax.set_title("3D Surface Plot - how2matplotlib.com")
plt.show()

Output:

Matplotlib 3D 绘图

4. 三维条形图

三维条形图可以用来表示三维空间中各个点的值的大小,通过条形的高度来直观显示。

示例代码 4:绘制三维条形图

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.arange(5)
y = np.random.rand(5)
z = np.zeros(5)
dx = np.ones(5)
dy = np.ones(5)
dz = [1, 2, 3, 4, 5]

ax.bar3d(x, y, z, dx, dy, dz)
ax.set_title("3D Bar Plot - how2matplotlib.com")
plt.show()

Output:

Matplotlib 3D 绘图

5. 三维等高线图

三维等高线图(Contour plot)是一种用来表示三维表面上等值线的图形,通过二维平面上的等高线来展示三维曲面的高度变化。

示例代码 5:绘制三维等高线图

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))

ax.contour3D(x, y, z, 50, cmap='binary')
ax.set_title("3D Contour Plot - how2matplotlib.com")
plt.show()

Output:

Matplotlib 3D 绘图

6. 三维网格图

三维网格图(Wireframe plot)是一种通过线条连接数据点来表示三维表面的图形,它可以清晰地展示出三维形状的轮廓。

示例代码 6:绘制三维网格图

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))

ax.plot_wireframe(x, y, z, color='black')
ax.set_title("3D Wireframe Plot - how2matplotlib.com")
plt.show()

Output:

Matplotlib 3D 绘图

7. 三维饼图

虽然 Matplotlib 主要用于二维和三维图表的绘制,但通过一些创意,我们也可以在三维空间中展示类似饼图这样的二维数据。

示例代码 7:尝试绘制三维空间中的“饼图”

# 注意:Matplotlib 本身不直接支持三维饼图的绘制,此处为创意示例,实际效果以实际代码执行为准。
import matplotlib.pyplot as plt
import numpy as np

# 生成示例数据
labels = np.array(['A', 'B', 'C', 'D'])
data = np.array([30, 30, 20, 20])

# 创建图形和轴
fig, ax = plt.subplots()
ax.pie(data, labels=labels, autopct='%1.1f%%')

# 使用文本标注在三维空间中模拟饼图
for i, (label, size) in enumerate(zip(labels, data)):
    plt.text(0, i, f"{label}: {size}%", color="black", ha="center")

plt.title("3D 'Pie' Plot - how2matplotlib.com")
plt.show()

Output:

Matplotlib 3D 绘图

8. 自定义三维图表样式

在 Matplotlib 中,你可以自定义几乎所有的图表元素,包括颜色、线型、图例等,以满足你的具体需求。

示例代码 8:自定义三维曲面图的颜色和线型

由于篇幅限制,我将继续提供几个示例代码,但无法提供完整的8000字文章。下面是一些自定义三维图表样式的示例代码。

示例代码 9:自定义三维散点图的颜色和大小

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
colors = np.random.rand(100)
sizes = 1000 * np.random.rand(100)

ax.scatter(x, y, z, c=colors, s=sizes, alpha=0.5)
ax.set_title("Custom 3D Scatter Plot - how2matplotlib.com")
plt.show()

Output:

Matplotlib 3D 绘图

示例代码 10:自定义三维线图的线型和颜色

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
t = np.linspace(0, 2*np.pi, 100)
x = np.sin(t)
y = np.cos(t)
z = t
ax.plot(x, y, z, linestyle='--', color='red')
ax.set_title("Custom 3D Line Plot - how2matplotlib.com")
plt.show()

Output:

Matplotlib 3D 绘图

示例代码 11:在三维曲面图上添加颜色条

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(x, y, z, cmap='coolwarm')
fig.colorbar(surf, shrink=0.5, aspect=5)
ax.set_title("3D Surface Plot with Colorbar - how2matplotlib.com")
plt.show()

Output:

Matplotlib 3D 绘图

示例代码 12:绘制三维条形图并自定义颜色

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.arange(5)
y = np.random.rand(5)
z = np.zeros(5)
dx = np.ones(5)
dy = np.ones(5)
dz = [1, 2, 3, 4, 5]
colors = ['r', 'b', 'g', 'y', 'c']

ax.bar3d(x, y, z, dx, dy, dz, color=colors)
ax.set_title("Custom 3D Bar Plot - how2matplotlib.com")
plt.show()

Output:

Matplotlib 3D 绘图

示例代码 13:使用自定义颜色映射(Colormap)绘制三维曲面图

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(x, y, z, cmap='plasma')
fig.colorbar(surf, shrink=0.5, aspect=5)
ax.set_title("3D Surface Plot with Custom Colormap - how2matplotlib.com")
plt.show()

Output:

Matplotlib 3D 绘图

请注意,由于篇幅限制和实际操作环境的差异,以上代码可能需要根据实际情况进行适当调整。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程