Python 在matplotlib中用箭头绘制相空间轨迹

Python 在matplotlib中用箭头绘制相空间轨迹,python,matplotlib,plot,Python,Matplotlib,Plot,我试图画出某个动力系统的相空间图。实际上,我有一个二维平面,其中有一个起点,后跟下一个点,依此类推。我想用线连接这些点,在上面我想画一些箭头,这样我就能看到方向(从起点到下一个点等等)。我决定使用线型'->'来实现这一点,但它并没有给出任何好的结果,而且箭头实际上多次指向错误的方向。而且它们的间距很近,因此我看不到单独的线条 我的代码如下: import numpy as np import matplotlib.pylab as plt from scipy.integrate import

我试图画出某个动力系统的相空间图。实际上,我有一个二维平面,其中有一个起点,后跟下一个点,依此类推。我想用线连接这些点,在上面我想画一些箭头,这样我就能看到方向(从起点到下一个点等等)。我决定使用线型
'->'
来实现这一点,但它并没有给出任何好的结果,而且箭头实际上多次指向错误的方向。而且它们的间距很近,因此我看不到单独的线条

我的代码如下:

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()
结果图如下所示:


可以看出,箭头与连接点的线没有正确对齐。此外,许多箭头正在“走出”,我希望它们“进来”,因为下一个点总是指向中间的闭合环。此外,绘图看起来太乱了,我想画更少的箭头,这样绘图看起来会更好。有人知道怎么做吗?提前谢谢

我认为解决方案如下所示:

使用该代码:

将numpy导入为np
将matplotlib.pylab作为plt导入
从scipy.integrate导入odeint
来自scipy.misc导入衍生工具
def系统(vect,t):
x、 y=vect
返回[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())表示范围(5)内的i]
t=np.linspace(010000)
颜色=[‘红色’、‘绿色’、‘蓝色’、‘黄色’、‘洋红’]
plot=plt.figure()
对于枚举中的i,v(vect0):
sol=odeint(系统,v,t)
plt.quiver(sol[:-1,0],sol[:-1,1],sol[1:,0]-sol[:-1,0],sol[1:,1]-sol[:-1,1],比例单位为xy',角度为xy',比例为1,颜色为i])
plt.show(绘图)
[编辑:关于指数的一些解释:

  • 箭袋的定义及其参数可在此处找到:
  • 箭袋的好例子可以在这里找到:
  • quiver需要向量作为输入,输入由起点和终点定义(起点和终点基本上是sol中存储的线坐标的点i和i+1)
  • 因此,向量数组的长度将比坐标数组的长度短一倍
  • 为了补偿这一点,并为坐标和向量提供相同长度的阵列,我们必须使用以下索引:
  • sol[:-1,0]
    (:-1在第一个索引中删除最后一个坐标)
  • sol[1:,0]
    (1:在第一个索引中开始放置第一个坐标)
  • 因此,
    sol[1:,0]-sol[:-1,0]
    是一种创建两个长度为n-1的向量并以结果为
    sol[i+1]-sol[i]

您可以使用
绘图(x,y,marker='o',markevery=5)
例如,每5个点标记一次。让它们指向正确的方向很难……谢谢。我至少会用这个。方向对我来说同样重要。再看看这个问题:,也许它会给你一些启发:)线条样式
'->'
不是箭头。它由两部分组成
'-'
表示实线和“
”>”
,表示三角形指向右侧。如果仔细观察,所有的“箭头”只是指向右边的三角形。@wflynny:对!那么我真的需要找到这个问题的好答案。:)太好了!对我来说很有用。不过,我想看看你在
plt.quiver
中使用的
sol
索引的一些解释。对不起,我已经包含了一些解释,希望能有所帮助。