📅  最后修改于: 2023-12-03 14:59:05.131000             🧑  作者: Mango
Python 是一种功能强大的编程语言,可以广泛应用于多种领域,包括数据科学、计算机视觉、深度学习等。在图形学方面,Python 也有很多优秀的库和工具,使其能够进行 3D 绘图。
一些流行的 3D 绘图库包括:
matplotlib 是 Python 中最著名的绘图库之一,并具有绘制 3D 图形的功能。其中,mpl_toolkits.mplot3d 模块提供了与 3D 绘图相关的类和函数。
下面是一个例子:
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
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)
plt.show()
输出结果如下:
Mayavi 是一款功能强大的科学数据可视化工具,支持许多 3D 绘图功能。它是由 Enthought 开发的,能够与 NumPy 和 SciPy 集成。
这里是一个简单的例子,绘制一个球体:
from mayavi import mlab
# Create a figure
mlab.figure()
# Create a 3D scalar field
x, y, z = mgrid[-5:5:100j, -5:5:100j, -5:5:100j]
f = x**2 + y**2 + z**2
# Create a surface plot of the scalar field
mlab.contour3d(f)
# Show the plot
mlab.show()
输出结果如下:
Plotly 是一款交互式数据可视化工具,支持许多绘图类型,包括 3D 绘图。它支持 Python 和其他语言,包括 R 和 JavaScript。
下面是一个简单的例子:
import plotly.graph_objs as go
# Define the data
x = [1, 2, 3, 4]
y = [2, 4, 8, 16]
z = [4, 8, 16, 32]
# Create a 3D scatter plot
trace = go.Scatter3d(x=x, y=y, z=z, mode='markers')
# Define the layout
layout = go.Layout(title='3D Scatter Plot')
# Create the figure
fig = go.Figure(data=[trace], layout=layout)
# Show the plot
fig.show()
输出结果如下:
PyVista 是一个功能强大的 3D 可视化库,可用于科学数据可视化、仿真等领域。它支持许多常用格式的数据导入、网格剖分、显式和隐式绘图等。
下面是一个简单的例子:
import pyvista as pv
# Create a mesh
mesh = pv.Sphere()
# Plot the mesh
mesh.plot()
输出结果如下:
VisPy 是一个高性能的交互式可视化库,适用于 OpenGL 2 和 3 环境下的数据可视化。它的设计目标是支持大规模和高精度的数据集,同时提供丰富的 3D 绘图功能。
下面是一个简单的例子:
import numpy as np
import vispy.scene
from vispy.scene import visuals
# Create a canvas
canvas = vispy.scene.SceneCanvas(keys='interactive', show=True)
# Create a grid of points
x, y, z = np.mgrid[:10, :10, :10] * 0.1 - 0.5
pos = np.empty((1000, 3), dtype=np.float32)
pos[:, 0] = x.ravel()
pos[:, 1] = y.ravel()
pos[:, 2] = z.ravel()
# Create a sphere visual
sphere = visuals.Markers()
sphere.set_data(pos, edge_color=None, face_color=(1, 0, 0), size=3)
# Add the sphere to the canvas
canvas.view.add(sphere)
# Run the event loop
vispy.app.run()
输出结果如下:
PyOpenGL 是 Python 编程语言的开源实现,支持 OpenGL 标准。它是一款功能强大的 3D 编程工具,用于创建和渲染 3D 图形和动画。
以下是一个使用 PyOpenGL 绘制简单正方体的示例:
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
# Define the vertices of a cube
vertices = (
(1, -1, -1),
(1, 1, -1),
(-1, 1, -1),
(-1, -1, -1),
(1, -1, 1),
(1, 1, 1),
(-1, -1, 1),
(-1, 1, 1)
)
# Define the edges of a cube
edges = (
(0, 1),
(0, 3),
(0, 4),
(2, 1),
(2, 3),
(2, 7),
(6, 3),
(6, 4),
(6, 7),
(5, 1),
(5, 4),
(5, 7)
)
def draw_cube():
# Draw the edges of the cube
glBegin(GL_LINES)
for edge in edges:
for vertex in edge:
glVertex3fv(vertices[vertex])
glEnd()
def display():
# Clear the screen
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
# Set the projection matrix
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(45, 1, 0.1, 50)
# Set the modelview matrix
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
gluLookAt(3, 3, 3, 0, 0, 0, 0, 1, 0)
# Draw the cube
glColor3f(1, 1, 1)
glEnable(GL_DEPTH_TEST)
draw_cube()
# Swap the buffers
glutSwapBuffers()
def init():
# Enable antialiasing
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glEnable(GL_LINE_SMOOTH)
glEnable(GL_POINT_SMOOTH)
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST)
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST)
# Set the background color
glClearColor(0.2, 0.2, 0.2, 0)
# Set the viewport
glViewport(0, 0, 400, 400)
def main():
# Initialize GLUT
glutInit()
glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_DOUBLE)
# Create the window
glutCreateWindow('OpenGL Cube')
# Register the display function
glutDisplayFunc(display)
# Initialize OpenGL
init()
# Run the event loop
glutMainLoop()
if __name__ == '__main__':
main()
输出结果如下:
Python 提供了许多强大的 3D 绘图工具和库,可以满足不同领域或需求的绘图要求。其中一些库提供非常高级的功能,如支持大规模和高精度的数据集、交互式绘图和动画等。如果您需要进行 3D 绘图,请尝试使用其中的某个库,它们中的许多都已在实践中得到了广泛的应用。