这是我的矢量场的图:
我希望速度场的矢量在整个图中均匀分布,而不是在x方向上挤压在一起,并在y方向上伸展。
我想我知道它为什么会出错,但我怎么能让它正确呢? 这是代码的相关部分。
slice_interval = 10
skip = slice(None, None, slice_interval)
plt.quiver(x[skip], y[skip], u[skip], v[skip])
更新
根据建议的解决方案,执行x[skip][skip]
等等,并没有解决问题。如果有的话它实际上变得更糟。但它可能提供一些修补的可能性,每个轴可能有不同的跳过?我会尝试自己修补一些。
尝试建议解决方案后的新图表:
新更新
我第一次没有正确实现解决方案,经过大量的摆弄,我现在得到了一个漂亮的速度场图,非常感谢帮助和鼓励,尤其是解决方案的xg.plt.py。
更正情节:
答案 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)