我试图画出一个动力系统的相空间图。实际上,我有一个二维平面,其中有一个起点,然后是下一个点,依此类推。我想用线把这些点连接起来,在上面画一些箭头,这样我就能看到方向(从起点到下一个点等等)。我决定使用线型'->'
来实现这一点,但它没有给出任何好的结果,箭头实际上似乎多次指向错误的方向。而且它们的间距很近,因此我看不到单独的线条。
我的代码如下:
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()
如图所示,箭头未与连接点的线正确对齐。而且,很多箭头是“出去”的,我希望它们“进来”,因为下一个点总是指向中间的闭合环。此外,情节看起来太混乱,我想画更少的箭头,这样情节会看起来更好。有人知道怎么做吗?提前谢谢。
我想一个解决方案是这样的:
使用该代码:
[编辑:关于索引的一些解释:
sol[:-1, 0]
(:-1在第一个索引中删除最后一个坐标)sol[1:, 0]
(1:在第一个索引中开始删除第一个坐标)sol[1:, 0] - sol[:-1, 0]
因此是一种方便的方法来创建两个长度为n-1的向量,并以结果为sol[i+1] - sol[i]
的方式减去它们相关问题 更多 >
编程相关推荐