如何使用外部文件使用 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)] 的顺序。
在这种情况下,您只需将 x
和 y
展平,使它们成为一维的。你不能在 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 吗?
我正在尝试编写一个非常简单的代码(应该是):
我想绘制来自外部数据文件的箭头,该文件为我提供 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)] 的顺序。
在这种情况下,您只需将 x
和 y
展平,使它们成为一维的。你不能在 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 吗?