【Python】画3d图(网格优化图)简介

本文介绍了如何使用Python的matplotlib库和mpl_toolkits包绘制3D图形,通过具体实例展示了从创建画布到绘制3D曲面图的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近找实习有个公司的笔试题,有部分是画3d图,因此学习了一下如何用Python来画3d图。
基本思想:使用matplotlib创建画布,然后使用mpl_toolkits包的Axes3D函数将其转化为3d图画布。

先导入主要用到的函数:

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

然后构造变量三个变量用户作图:

X = np.arange(-2, 2, 0.2)
Y = np.arange(-2, 2, 0.2)
X, Y = np.meshgrid(X, Y)
Z = np.sin(np.sqrt(X**2 + Y**2))

创建画布:

fig = plt.figure()
ax = Axes3D(fig)

画图:

ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.cm.hot)
ax.contourf(X, Y, Z, zdir='z', offset=-2, cmap=plt.cm.hot)
ax.set_zlim(-2,2)
plt.show()

我们下次再见,如果还有下次的话!!!

【新浪微博@516数据工作室】

长按下方二维码关注"516数据工作室"

### 使用Matplotlib绘制3D网格坐标 为了在三维空间中创建网格坐标系,可以利用 `matplotlib` 库中的 `Axes3D` 对象来实现。下面是一个具体的例子,展示了如何构建这样的表: ```python import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 定义数据范围 x = np.linspace(-5, 5, 10) y = np.linspace(-5, 5, 10) # 构建二维网格矩阵 X, Y = np.meshgrid(x, y) # 初始化全零的高度值用于表示平面内的点 Z = np.zeros_like(X) # 新建像并获取3D区域 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 添加各轴上的线条以形成框架结构 for i in range(len(x)): ax.plot([x[i]]*len(y), y, Z[:,i], color="gray", linestyle="--") for j in range(len(y)): ax.plot(x, [y[j]]*len(x), Z[j,:], color="gray", linestyle="--") # 设置坐标轴名称 ax.set_xlabel('X Axis') ax.set_ylabel('Y Axis') ax.set_zlabel('Z Axis') plt.show() ``` 这段程序会生成一个简单的3D直角坐标系统,在其中包含了沿各个方向延伸的虚线作为辅助参考。 如果希望进一步增强视觉效果或者交互体验,则可以选择使用Plotly库来进行开发。以下是采用 Plotly 实现相同功能的方式: ```python import plotly.graph_objects as go # 准备基础参数 size = 10 step = int((max(abs(-5), abs(5)))/size)*2+1 xs = ys = list(range(-size, size+1, step)) trace_lines_x = [] trace_lines_y = [] for xi in xs: trace_lines_x.append(go.Scatter3d( x=[xi]*len(xs), y=ys, z=[0]*len(xs), mode='lines', line=dict(color='rgba(128,128,128,.7)', width=2))) for yi in ys: trace_lines_y.append(go.Scatter3d( x=xs, y=[yi]*len(xs), z=[0]*len(xs), mode='lines', line=dict(color='rgba(128,128,128,.7)', width=2))) layout = dict(title='3D Grid Coordinate System', scene=dict(aspectmode="cube")) figure_data = [*trace_lines_x,*trace_lines_y] fig = go.Figure(data=figure_data, layout=layout) fig.update_scenes(xaxis_title_text='X Axis', yaxis_title_text='Y Axis', zaxis_title_text='Z Axis') fig.show() ``` 上述代码片段定义了一系列平行于XY平面上的直线段,并通过调整颜色和透明度使得这些线条看起来像是悬浮在一个虚拟的空间里[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值