python - 图中轴矢量场的缩放颤动图

标签 python matplotlib vector plot

这是我的向量场图:

initial plot

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

我想我知道为什么会出错,但是如何让它正常运行呢? 这是代码的相关部分。

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

最佳答案

如果您希望它们在 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,以便所有向量都相等,并且网格是使用 0 到 100 之间的 100 点 linspace 创建的,x 和 110 点之间y 中的 -50 和 50)

slicing options

关于python - 图中轴矢量场的缩放颤动图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49992507/

相关文章:

python - 是否可以创建一个函数,该函数返回创建时生成的静态值,而不是调用该函数时生成的静态值?

c++ - 如何 std::sort 一个 3 维 vector

Python MySQLdb 插入问题

python - turtle 对按键没有反应

python - 在 matplotlib pyplot 中将颜色图与 Iris 数据集一起使用会出现错误

python - 无法在 matplotlib 图中出现次要网格线

c++ - 对 vector push_back 的使用

c++在读取文件之前或之后忽略字符串部分

python - Python 'build_py' 的步骤 'setup.py install' 中的神秘错误

matplotlib - 如何在更改小部件的某些属性后强制重绘小部件?