Pea*_*ful 11 python plot matplotlib
我正在尝试绘制某个动力系统的相空间图.实际上,我有一个2d平面,其中有一个起点,然后是下一个点,依此类推.我想用线连接这些点,并且我想绘制一些箭头,以便我能够看到方向(起点到下一点等).我决定使用linetype '->'来实现这一点,但它没有给出任何好的结果,箭头实际上似乎多次指向错误的方向.它们间隔很小,因此我看不到各条线.
我的代码如下:
import numpy as np
import matplotlib.pylab as plt
from scipy.integrate import odeint
def system(vect, t):
x, y = vect
return [x - y - x * (x**2 + 5 * y**2), x + y - y * (x**2 + y**2)]
vect0 = [(-2 + 4*np.random.random(), -2 + 4*np.random.random()) for i in range(5)]
t = np.linspace(0, 100, 1000)
for v in vect0:
sol = odeint(system, v, t)
plt.plot(sol[:, 0], sol[:, 1], '->')
plt.show()
Run Code Online (Sandbox Code Playgroud)
可以看出,箭头没有与连接点的线正确对齐.此外,许多箭头"走出去",我希望它们"进入",因为下一个点始终位于中间的闭环.此外,情节看起来太乱,我想绘制更少的箭头,以便情节看起来更好.有没有人知道如何做到这一点?提前致谢.
tfv*_*tfv 12
我认为解决方案看起来像这样:
使用该代码:
import numpy as np
import matplotlib.pylab as plt
from scipy.integrate import odeint
from scipy.misc import derivative
def system(vect, t):
x, y = vect
return [x - y - x * (x**2 + 5 * y**2), x + y - y * (x**2 + y**2)]
vect0 = [(-2 + 4*np.random.random(), -2 + 4*np.random.random()) for i in range(5)]
t = np.linspace(0, 100, 1000)
color=['red','green','blue','yellow', 'magenta']
plot = plt.figure()
for i, v in enumerate(vect0):
sol = odeint(system, v, t)
plt.quiver(sol[:-1, 0], sol[:-1, 1], sol[1:, 0]-sol[:-1, 0], sol[1:, 1]-sol[:-1, 1], scale_units='xy', angles='xy', scale=1, color=color[i])
plt.show(plot)
Run Code Online (Sandbox Code Playgroud)
[编辑:对指数的一些解释:
sol[:-1, 0] (:第一个索引中的-1删除最后一个坐标)sol[1:, 0] (1:在第一个索引开始下降第一个坐标)sol[1:, 0] - sol[:-1, 0] 因此,创建两个长度为n-1的向量并以结果的方式减去它们是一种方便的方法 sol[i+1] - sol[i]| 归档时间: |
|
| 查看次数: |
6192 次 |
| 最近记录: |