📜  python中的3d绘图(1)

📅  最后修改于: 2023-12-03 15:04:34.538000             🧑  作者: Mango

Python中的3D绘图

Python拥有众多绘图库,其中包括能够绘制3D图形的库。这些库使得开发者能够轻松地在Python环境中创建各种三维图形。

Matplotlib

Matplotlib是Python中最受欢迎的绘图库之一,它不仅可以绘制2D图形,也支持3D绘图。

安装Matplotlib

使用以下命令在Python中安装Matplotlib库:

pip install matplotlib
绘制3D图形

使用Matplotlib库的mplot3d子库来绘制3D图形。以下是一个简单的例子,将一个球体绘制在三维坐标系中:

import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d

%matplotlib notebook

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

# 生成数据
z = np.linspace(0, 1, 100)
theta = np.linspace(0, 2 * np.pi, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)

# 绘制球体
ax.plot_surface(x, y, z, color="b")

plt.show()

此代码会生成一个3D图形,如下图所示:

matplot3d-example.png

Plotly

Plotly是一个交互式的数据可视化库,它能够绘制出一些非常详细的3D图形。

安装Plotly

使用以下命令在Python中安装Plotly库:

pip install plotly
绘制3D图形

以下是一个简单的例子,使用Plotly库绘制一个3D散点图:

import plotly.graph_objects as go

# 生成数据
import numpy as np

np.random.seed(42)
random_x = np.random.randint(1, 101, 100)
random_y = np.random.randint(1, 101, 100)
random_z = np.random.randint(1, 101, 100)

# 绘制散点图
fig = go.Figure(data=[go.Scatter3d(
    x=random_x,
    y=random_y,
    z=random_z,
    mode="markers",
    marker=dict(
        size=12,
        color=random_z,                # 根据z值着色
        colorscale="Viridis",          # 使用Viridis调色板
        opacity=0.8
    )
)])

# 设置图形布局
fig.update_layout(scene=dict(
    xaxis_title="X axis",
    yaxis_title="Y axis",
    zaxis_title="Z axis"
))

fig.show()

此代码会生成一个具有交互性的3D散点图,如下图所示:

plotly-example.png

Mayavi

Mayavi是一个专门设计用于科学数据可视化的Python库,它能够基于Python的Numpy库在3D空间中绘制出复杂的3D图形。

安装Mayavi

使用以下命令在Python中安装Mayavi库:

pip install mayavi
绘制3D图形

以下是一个简单的例子,使用Mayavi库绘制一个3D曲面网格图:

from mayavi import mlab
import numpy as np

# 生成数据
x, y = np.mgrid[-10:10:250j, -10:10:250j]
r = np.sqrt(x ** 2 + y ** 2)
z = np.sin(r) / r

# 绘制3D曲面图
mlab.figure(size=(600, 500))
mlab.surf(x, y, z, warp_scale="auto")

mlab.show()

此代码会生成一个复杂的3D曲面网格图,如下图所示:

mayavi-example.png

总结

Python支持多种3D绘图库,每个库都具有其优点和特色。了解这些库及其功能,能够帮助开发者选择最适合自己项目需求的3D绘图库。