如何使用Matplotlib绘制流线,给出X线,Y线,U组件和V组件的一维阵列

时间:2015-09-25 04:46:41

标签: python matplotlib

在开始之前,我会补充一点,我根本没有使用Python很长时间!在我发布之前,StackOverflow上也有类似的问题但是我无法从中得到一个可用的答案,因此我仍然被卡住了。

正如标题所示,我有四个1-D阵列。第一个包含 X[] 坐标,第二个包含 Y[] 坐标,第三个包含 U[] 每个点的向量组件,最后是 V[] 组件的第四个组件。数组已经安排好,例如,X(a), Y(a)给出了一个特定的点,其中包含向量组U(a)V(a),其中数组X, Y, U和{{ 1}}是上述坐标/向量数组。数组采用这种格式,因为我还用它们制作了一个三维箭袋图(我省略了z坐标)。

我知道在这种情况下np.mgrid通常用于制作网格,但每个坐标点的矢量都是交叉产品的一部分,V没有给我什么我想了。无论如何,长话短说,我现在有四个阵列,如前所述,我想制作一个流图。

有人能告诉我实现这个目标的最佳方式吗?

我不能简单地将数组插入流绘图参数中,因为它指出np.mgridU必须作为2D数组输入。

干杯!

1 个答案:

答案 0 :(得分:0)

事先说明:numpy 4D到1D便宜又快。

在任何情况下,1D向量应在处理过程中进行,np为您提供了一个强大的技巧来使用它的.view概念。从技术上讲,您可以让numpy根据需要简单地引用原始numpy.ndarray的一部分(或全部),而不会重复数据单元(一旦尺寸增大且RAM内低效数据非常重要结构停止工作)。

可以简单地将完整的4D | 5D | nD坐标存储在一个设备齐全的阵列中,并根据需要智能参考1D - 组件:

XYZUV_any_dimensionalityObservationDataPointsARRAY[:,0] == ( x0, y0, z0, u0, v0 )
XYZUV_any_dimensionalityObservationDataPointsARRAY[:,1] == ( x1, y1, z1, u1, v1 )

# and still use 1D-component vectors, where appropriate ( without DUPs )

XYZUV_any_dimensionalityObservationDataPointsARRAY[0,:] == X      # 0-based index
XYZUV_any_dimensionalityObservationDataPointsARRAY[1,:] == Y
XYZUV_any_dimensionalityObservationDataPointsARRAY[2,:] == Z
...
XYZUV_any_dimensionalityObservationDataPointsARRAY[4,:] == V

可能将它们粘在一起

XYUV_ObservationDataPoints4DARRAY = np.vstack( ( X,
                                                 Y,
                                                 U,
                                                 V
                                                 )    # needs a tuple
                                               )

剧情

因此,绘图过程仍然可以在需要输入适当的函数语法后重新使用部分视图:

X保持为1D

XYZUV[0,:]             #  X via a view taken: 1st column and all rows +[ NO RAM ]

Y保持为1D

XYZUV[1,:]             #  Y via a view taken: 2st column and all rows +[ NO RAM ]

UV保持为2D

XYZUV[3:5,:]           # UV via a view taken at all columns in [3:5]  +[ NO RAM ]

UV粘贴到2D

np.vstack( ( U, V ) )  # UV via an ad-hoc *stack() -- will allocate   +[new RAM ]

Plotting XYUV