使用 matplotlib 绘制能量转换

Plotting energy transitions using matplotlib

我想在 matplotlib 中重现这样的情节。 我正在执行模拟,其中能量由函数定义的粒子的位移,例如E(X)=1/2kx^2。我有一个包含粒子位置的列表,想在能量函数图上绘制跃迁,最好在连续位置之间使用箭头。我如何在 matplotlib 中执行此操作?

我附上了示例图的图像(梯度下降图 - 我的要求非常相似)。

所以给定一个由 E = [(x*0.1-2)**2+1 for x in range(40)] 制成的列表 E 和点列表 X = [0, 3, 1.5, 2.2, 1.9, 1.95, 2.05] 我想要一个像我附上的那样的情节

您可以将 plt.quiver 与您的 diff 积分一起使用。

import numpy as np
import matplotlib.pyplot as plt

xp = [x*.1 for x in range(41)]
E = [(x-2)**2+1 for x in xp]

X = [0, 3, 1.5, 2.2, 1.9, 1.95, 2.05]
y = [(x-2)**2+1 for x in X]

# computing arrow vectors as diff of x and y
u = [u-v for u, v in zip(X[1:], X)]
v = [u-v for u, v in zip(y[1:], y)]

plt.figure(figsize=(5, 7))
plt.plot(xp, E)
plt.quiver(X[:-1], y[:-1], u, v, angles='xy', scale_units='xy', scale=1)
plt.scatter(X, y, edgecolors='blue', marker='o', color='white')
plt.show()

输出