📜  Python -3D图表(1)

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

Python - 3D图表

Python是一种高级编程语言,具有简单易学、代码规范、丰富强大的库等特点。而3D图表是一种可视化工具,可以帮助我们更直观地分析数据。Python中的3D图表库很多,常用的有matplotlib、plotly、mayavi等。

Matplotlib

Matplotlib是Python中最常用的绘图库之一,它有一个子库mpl_toolkits.mplot3d,可以帮助我们快速绘制3D图表。下面是一个简单的例子:

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

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

# 绘制一个曲面图
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
surf = ax.plot_surface(X, Y, Z, cmap=plt.cm.coolwarm)

# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

# 添加 colorbar
fig.colorbar(surf, shrink=0.5, aspect=5)

plt.show()

这段代码可以绘制出一个sin函数曲面图,其中np.meshgrid用来生成X和Y的坐标轴,np.sqrt用来计算平面上每个点到原点的距离,在这个距离的基础上计算sin值,最后以Z为高度绘制出曲面。除了sin函数,我们还可以使用其他的函数和数据来绘制3D图表。

Plotly

Plotly是一个交互式数据可视化工具,在Python中有一个plotly库可以用来绘制3D图表。下面是一个例子:

import plotly.graph_objs as go
from plotly.offline import plot

# 生成X和Y的坐标轴
x = [1, 1, 2, 2, 1, 1, 2, 2]
y = [1, 2, 2, 1, 1, 2, 2, 1]
z = [1, 1, 1, 1, 2, 2, 2, 2]

fig = go.Figure(data=[
    go.Mesh3d(
        x=x,
        y=y,
        z=z,
        colorbar_title='z',
        colorscale=[[0, '#3D9970'], [1, '#FF4136']]
    )
])

# 设置图表布局和样式
fig.update_layout(
    scene=dict(
        xaxis=dict(title='X'),
        yaxis=dict(title='Y'),
        zaxis=dict(title='Z'),
    )
)

plot(fig, filename='3d-mesh')  # 保存文件和显示图表

这个例子绘制了一个三角形棱锥的3D图表,我们可以通过添加更多的点和Z值来绘制更复杂的图形。plotly还提供其他类型的3D图表,比如3D散点图、3D表面图等,可以根据自己的需求来选择。

Mayavi

Mayavi是一个专门用来绘制3D图表的库,它可以用来处理复杂的科学数据。下面是一个简单的例子:

import numpy as np
from mayavi import mlab

x, y, z = np.mgrid[-4:4:20j, -4:4:20j, -4:4:20j]
s = np.sin(x*y*z)/(x*y*z)

# 绘制一个 iso-surface
mlab.contour3d(s)

mlab.show()

这段代码可以绘制出一个sin函数的iso-surface,其中np.mgrid用来生成三维坐标轴,np.sin计算每个点的sin值,并将它们的平均值作为颜色用来呈现最终的图形,mlab.contour3d用来绘制iso-surface。除了iso-surface,Mayavi还可以绘制其他类型的图表,比如体积渲染、点云等。

总结

Python中有很多3D图表库可以选择,每种库都有自己的优势和适用范围,我们可以根据自己的需求来选择。3D图表可以帮助我们更直观地分析数据和展示结果,对于数据可视化工作来说非常重要。