Python 绘制3D

方法

3D 图形需要的数据与等高线图基本相同:X、Y 数据决定坐标点,Z 轴数据决定 X、Y 坐标点对应的高度。与等高线图使用等高线来代表高度不同,3D 图形将会以更直观的形式来表示高度。

为了绘制 3D 图形,需要调用 Axes3D 对象的 plot_surface() 方法来完成

曲面

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(figsize=(12, 8))
ax = Axes3D(fig)
delta = 0.125
# 生成代表X轴数据的列表
x = np.arange(-3.0, 3.0, delta)
# 生成代表Y轴数据的列表
y = np.arange(-2.0, 2.0, delta)
# 对x、y数据执行网格化
X, Y = np.meshgrid(x, y)
Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
# 计算Z轴数据(高度数据)
Z = (Z1 - Z2) * 2
# 绘制3D图形
ax.plot_surface(X, Y, Z,
    rstride=1,  # rstride(row)指定行的跨度
    cstride=1,  # cstride(column)指定列的跨度
    cmap=plt.get_cmap('rainbow'))  # 设置颜色映射
# 设置Z轴范围
ax.set_zlim(-2, 2)
# 设置标题
plt.title("3D图")
plt.show()

上面程序开始准备了和前一个程序相同的数据,只是该程序将 delta 设置为 0.125,这样可以避免生成太多的数据点(在绘制 3D 图形时,计算开销较大,如果数据点太多, Matplotlib 将会很卡)。

程序中第 20 行代码调用 Axes3D 对象的 plot_surface() 方法来绘制 3D 图形,其中 X、Y 参数负责确定坐标点,Z 参数决定 X、Y 坐标点的高度数据。
在这里插入图片描述

圆柱体

# -*- coding: utf-8 -*-
#哪有什么可以直接登顶的人生,只有根据反馈不断迭代的过程! 

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

# 简单方法画出漂亮的圆柱体(半径和高度均为1)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
 
# 生成圆柱数据,底面半径为r,高度为h。
# 先根据极坐标方式生成数据
u = np.linspace(0,2*np.pi,50)  # 把圆分按角度为50等分
h = np.linspace(0,1,20)        # 把高度1均分为20份
x = np.outer(np.sin(u),np.ones(len(h)))  # x值重复20次
y = np.outer(np.cos(u),np.ones(len(h)))  # y值重复20次
z = np.outer(np.ones(len(u)),h)   # x,y 对应的高度

# Plot the surface
ax.plot_surface(x, y, z, cmap=plt.get_cmap('rainbow'))
 
plt.show()

在这里插入图片描述

圆台体

1、绘制上宽下窄的圆台

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值