如何使用外部文件使用 matplotlib quiver

How to use matplotlib quiver using an external file

我正在尝试编写一个非常简单的代码(应该是):

我想绘制来自外部数据文件的箭头,该文件为我提供 x 和 y 方向的向量维度,在两列 sx 和 sy 中给出。

例如,我有两列,每列 36 个数字,但它们是具有 6x6 网格的向量的维度。但是,当我执行以下操作时出现错误,我想我需要一个额外的步骤才能将此数据从两列转换为网格?! 但我不知道这一步是什么。有什么见解吗?

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

data=np.loadtxt(r'text.dat')
x,y = np.meshgrid(np.arange(0, 6, 1), np.arange(0, 6, 1))
u = data[:,1]
v = data[:,2]

plt.quiver(x, y, u, v, angles='xy', scale_units='xy', scale=1)

您将受益于快速完整性检查。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

data=np.loadtxt(r'text.dat')
x,y = np.meshgrid(np.arange(0, 6, 1), np.arange(0, 6, 1))

print x  # 6x6 array, 2D!
print y  # 6x6 array, 2D!

u = data[:,1] # 36 array, 1D!
v = data[:,2] # 36 array, 1D!

plt.quiver(x, y, u, v, angles='xy', scale_units='xy', scale=1)

大概您的 text.dat 文件包含点 [(0,0), (1,0), (2,0), ... (0,1), (1,1) 的记录, (2,1)... (4,5), (5,5)] 的顺序。

在这种情况下,您只需将 xy 展平,使它们成为一维的。你不能在 quiver 中混合使用一维和二维数组。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

data=np.loadtxt(r'text.dat')
x,y = np.meshgrid(np.arange(0, 6, 1), np.arange(0, 6, 1))
x = x.flatten()
y = y.flatten()

print x  # 36 array, 1D!
print y  # 36 array, 1D!

u = data[:,1] # 36 array, 1D!
v = data[:,2] # 36 array, 1D!

plt.quiver(x, y, u, v, angles='xy', scale_units='xy', scale=1)

编辑: 如果您仍然遇到问题,运行 在交互式终端或命令提示符中输入您的命令。检查每个变量及其维度 (array.shape) 以确保变量与您认为的一样。每个维度实际上是 36 吗?