缩放矢量场颤动图与轴在图中

时间:2018-04-24 02:21:34

标签: python matplotlib vector plot

这是我的矢量场的图:

initial plot

我希望速度场的矢量在整个图中均匀分布,而不是在x方向上挤压在一起,并在y方向上伸展。

我想我知道它为什么会出错,但我怎么能让它正确呢? 这是代码的相关部分。

slice_interval = 10
skip = slice(None, None, slice_interval)
plt.quiver(x[skip], y[skip], u[skip], v[skip])

更新

根据建议的解决方案,执行x[skip][skip]等等,并没有解决问题。如果有的话它实际上变得更糟。但它可能提供一些修补的可能性,每个轴可能有不同的跳过?我会尝试自己修补一些。

尝试建议解决方案后的新图表:

wrong solution implementation

新更新

我第一次没有正确实现解决方案,经过大量的摆弄,我现在得到了一个漂亮的速度场图,非常感谢帮助和鼓励,尤其是解决方案的xg.plt.py。

更正情节:

correct plot

1 个答案:

答案 0 :(得分:1)

如果希望它们在x轴和y轴上均匀分布,则必须在两个维度中对输入数组进行切片。否则,您每行都在切片。

唯一需要更改的行是:

plt.quiver(x[skip,skip], y[skip,skip], u[skip,skip], v[skip,skip])

修改

正如评论中所指出的,另一种选择是定义skip2 = (slice(None, None, slice_interval),) * 2并使用array[skip2]直接切割数组得到完全相同的结果。

另一种情况是array[skip][skip]。在这种情况下,应用切片,然后再次切片第一个切片的结果,第二个[skip]不应用于数组的第二个轴,而是应用于array[skip]的第一个轴。它一步一步地做着:

# we start from array.shape = (110, 100)
a2 = array[skip]
# Intermediate step: a2.shape = (11, 100) # containing rows 0, 10, 20...
a3 = a2[skip]
# Final output: a3.shape = (2,100) # now we have sliced every 10 rows of a2
# which translated to array means slicing every 100 rows and still keeping all the columns.

下面是一个显示每个有趣案例的图(u和v都设置为1,因此所有向量都相等,并且创建了网格网格,其中x点为0到100之间的100点linspace和之间的110点-50和50 in y)

slicing options

相关问题