gpt4 book ai didi

python - 如何根据数组中的数据在 matplotlib 中创建 3D 线图?

转载 作者:行者123 更新时间:2023-11-28 20:19:22 25 4
gpt4 key购买 nike

我已经使用 SciPy 和脚本对 Lorenz 方程进行了数值求解:

# 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]

现在我想做的是绘制 xyz(如果您不确定,它们都是 Numpy ndarray)在 3D 线(或线框)图中相互对比。我认为这必须使用 matplotlib 来完成,但我并不挑剔,只要你给我一个将在 3D 中绘制数据的解决方案,我不关心我需要导入哪些模块。

最佳答案

这是洛伦兹吸引子的 3D 和动画形式。该脚本位于 Jake VanderPlas 的 Pythonic Perambulations 中的以下链接(连同许多好东西)。通过逐行浏览脚本,您可以学到很多东西 - 这是对 matplotlib 对象的优雅使用。

https://jakevdp.github.io/blog/2013/02/16/animating-the-lorentz-system-in-3d/

我在 animate 函数中的 return 之前添加了这两行,然后使用了 ImageJ导入“图像堆栈”并保存“动画 GIF”:

fname = "Astro_Jake_" + str(i+10000)[1:]
fig.savefig(fname)

注意:对于 OSX,似乎有必要在 animation.FuncAnimation 中设置 blit = FalseAstro Jake

这是一个最小的、简化的基于上述内容的 3D 线条绘制示例:

def lorentz_deriv((x, y, z), t0, sigma=10., beta=8./3, rho=28.0):
"""Compute the time-derivative of a Lorentz system."""
return [sigma * (y - x), x * (rho - z) - y, x * y - beta * z]

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from scipy.integrate import odeint as ODEint

x = np.linspace(0, 20, 1000)
y, z = 10.*np.cos(x), 10.*np.sin(x) # something simple

fig = plt.figure()
ax = fig.add_subplot(1,2,1,projection='3d')
ax.plot(x, y, z)

# now Lorentz
times = np.linspace(0, 4, 1000)

start_pts = 30. - 15.*np.random.random((20,3)) # 20 random xyz starting values

trajectories = []
for start_pt in start_pts:
trajectory = ODEint(lorentz_deriv, start_pt, times)
trajectories.append(trajectory)

ax = fig.add_subplot(1,2,2,projection='3d')
for trajectory in trajectories:
x, y, z = trajectory.T # transpose and unpack
# x, y, z = zip(*trajectory) # this also works!
ax.plot(x, y, z)

plt.show()

screen shot of simplified 3D Lorenz

关于python - 如何根据数组中的数据在 matplotlib 中创建 3D 线图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34571749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com