我需要使用matplotlib中的streamplot函数,坐标为x,p,顺序如下代码所示。
import numpy as np
import matplotlib.pyplot as plt
size = 2
x, p = np.mgrid[-size:size:100j, -size:size:100j]
x_force = p
p_force = x**3
fig = plt.figure()
ax = fig.gca()
ax.streamplot(x, p, x_force, p_force, density=[0.5, 1])
plt.show()
这会产生一个错误:ValueError: The rows of 'x' must be equal
。令人惊讶的是,更改流图中x和p的顺序解决了这个问题。
ax.streamplot(p, x, p_force, x_force, density=[0.5, 1])
为什么会发生这种事?如何按照我选择的顺序绘制坐标图?
在meshgrid命令中更改x和p的顺序可以解决问题:
p, x = np.mgrid[-size:size:100j, -size:size:100j]