使用 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()
输出
我想在 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()
输出