我已经使用 SciPy 和脚本对洛伦兹方程进行了数值求解:
# Lorenz Equations SciPy solver
import numpy as np
from scipy import integrate
from math import cos
from matplotlib import pyplot as plt
a, b = 0, 100
sigma, rho, beta = 10, 28, 8/3
N = 1000000
h = (b-a) / float(N)
def solvr(Y, t):
return [sigma*(Y[1]-Y[0]), Y[0]*(rho-Y[2])-Y[1], Y[0]*Y[1]-beta*Y[2]]
t = np.arange(a, b, h)
asol = integrate.odeint(solvr, [0, 1, 1], t)
x = asol[:,0]
y = asol[:,1]
z = asol[:,2]
现在我想做的是针对每个函数绘制
x
、
y
和
z
(它们都是 Numpy ndarrays,如果您不确定的话) 3D 线(或线框)图中的其他。我认为这必须使用 matplotlib 来完成,但我并不挑剔,只要你给我一个能够以 3D 方式绘制数据的解决方案,我不在乎我需要导入什么模块。
可以使用 matplotlib.pyplot 的
plot
函数在 3D 中绘制数据。以下是对的代码进行绘制的修改:
# Lorenz Equations SciPy solver
import numpy as np
from scipy import integrate
from math import cos
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D # 导入用于 3D 绘图
a, b = 0, 100
sigma, rho, beta = 10, 28, 8/3
N = 1000000
h = (b-a) / float(N)
def solvr(Y, t):
return [sigma*(Y[1]-Y[0]), Y[0]*(rho-Y[2])-Y[1], Y[0]*Y[1]-beta*Y[2]]
t = np.arange(a, b, h)
asol = integrate.odeint(solvr, [0, 1, 1], t)
x = asol[:,0]
y = asol[:,1]
z = asol[:,2]
# 创建一个 3D 图形
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制线条
ax.plot(x, y, z)
# 添加标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
# 显示绘图
plt.show()
此代码将创建一个 3D 图形,并使用
plot
函数绘制作为洛伦兹方程解的
x
、
y
和
z
值。此函数将数据作为参数,并将
x
值与
y
和
z
值进行比较以创建线条。
我们还添加了轴标签,以便于理解绘图。
这是一个创建 3D 线图的简单方法,但可以使用其他选项(例如不同的颜色、线条样式和标记)来自定义绘图。可以在 matplotlib 文档中找到有关这些选项的更多信息。
标签:python,arrays,matplotlib,plot From: 34571749