Python mpl_toolkits.mplot3d工具包绘制三维图

这篇博客介绍了如何在Python中利用Matplotlib库创建和绘制三维图形。从Matplotlib的不同版本变化,讲述了创建3D坐标系的方法,包括曲线图、曲面图以及在同一图形中绘制多条曲线。示例代码展示了如何生成和展示3D曲线和曲面,并提供了调整图形显示的技巧。

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

在Python中我们可以导入mplot3d工具包来绘制三维图。

Matplotlib 1.0.0之前,每个图形只能创建一个Axes3D,需要被直接定义为ax = Axes3D

Matplotlib 3.2.0之前,必须导入mpl_toolkits.mplot3d模块将关键字Projection='3d'传递给Figure.add_subplot

3维坐标系通过将关键字Projection='3d'传递给Figure.add_subplot创建,无需导入mpl_toolkit.mplot3d就可以实现三维图的绘制。

import matplotlib.pyplot as plt  
fig = plt.figure()
ax = fig.add_subplot(projection='3d')

也可以在同一个画布中fig中创建多个3D子图,就像2D子图一样。

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure(figsize = (10,8))
ax1 = fig.add_subplot(121, projection='3d')
ax2 = fig.add_subplot(122,projection = '3d')

plt.show()

在这里插入图片描述

曲线图

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure(figsize=[8,6])
ax = fig.add_subplot(projection='3d')

# Prepare arrays x, y, z
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)

ax.plot(x, y, z, label = "parametric curve")
ax.legend()
plt.show()

在这里插入图片描述

曲面图

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure(figsize=[8,6])
ax = fig.add_subplot(projection='3d')
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
 
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()

在这里插入图片描述

两条曲线

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['axes.unicode_minus']=False
plt.rcParams['font.sans-serif'] = ['SimHei'] 

fig = plt.figure(figsize=(8,6))
ax1 = fig.add_subplot(projection='3d')

# Prepare arrays x, y, z
t = np.linspace(0, 3, 10000)
x = 5*t + 3 * np.cos((np.pi*50*t)/30)
y = 3 * np.sin((np.pi*50*t)/30)
z = 0.005 * np.sin(2*np.pi*40*t)

x1 = 5*t + 3 * np.cos((np.pi*50*t)/30)
y1 = 3 * np.sin((np.pi*50*t)/30)
z1 = 0

ax1.plot(x, y, z,linewidth = 1)
ax1.plot(x1,y1,z1,c='r')
ax1.legend(["UAG","CG"])
ax1.set_zlim(-0.02,0.02)
ax1.set_xlim(-1,15)


x1 = 5*t + 3 * np.cos((np.pi*50*t)/30)
y1 = 3 * np.sin((np.pi*50*t)/30)

plt.show()

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值