Python 减少quiverplot中的点数,使其保持等距离

Python 减少quiverplot中的点数,使其保持等距离,python,matplotlib,plot,Python,Matplotlib,Plot,我正在matplotlib库中使用pyhton 2.7。在这里,我使用quiver绘制一个网格 我有以下问题: 我正在计算点的网格。每个点都与x、y变形相关联。出于代数原因,这些值以2n维向量的形式出现,而不是矩阵nXn。总的来说,我有4个向量输入Matplotlib的箭袋:位置X,Y和失真X_R Y_R(分量失真) 它绘制得非常好,但由于我有10201个点,因此绘制的箭头是一团黑色,需要对箭头长度比例因子进行过度微调。我想通过减少绘制的点数来避免这种情况。 以下是问题: 当我只用每十个点X_R

我正在matplotlib库中使用pyhton 2.7。在这里,我使用quiver绘制一个网格

我有以下问题: 我正在计算点的网格。每个点都与x、y变形相关联。出于代数原因,这些值以2n维向量的形式出现,而不是矩阵nXn。总的来说,我有4个向量输入Matplotlib的箭袋:位置X,Y和失真X_R Y_R(分量失真)

它绘制得非常好,但由于我有10201个点,因此绘制的箭头是一团黑色,需要对箭头长度比例因子进行过度微调。我想通过减少绘制的点数来避免这种情况。 以下是问题: 当我只用每十个点X_R[1::10]减少点的数量时,我失去了我需要显示的图中的对称性

例如:

我有n=5,所以我的网格是5X5矩阵。我输入的向量有25个条目: 如果我只允许显示每三分之一的值,我就有问题:

        2,-2 2,-1 2,0 2,1 2,2
        1,-2 1,-1 1,0 1,1 1,2
        more values...
它转换为以下向量:

        (2,-2; 2,-1; 2,0; 2,1; 2,2; 1,-2; 1,-1; 1,0; 1,1; 1,2;....)^T
           X          X         X     X          X         X
我想绘制我用X标记的所有值。如果我只取三分之一的值,我将绘制:

        (2,-2; 2,-1; 2,0; 2,1; 2,2; 1,-2; 1,-1; 1,0; 1,1; 1,2;....)^T
           X          X         X           X          X
失去了情节的对称性

代码

        def plot(d, XY_p,Number):
"""Plot displays Matplotlib moduls quiverplot. Enter scaling factor.
Use Matplotlib features to save, zoom etc.
Feed Zemax data array d, transformed points XY_p and variable Number"""

redo=0

while redo == 0:
    xy_p=XY_p
    Dummy_array=d
    NUMBER=Number

    b=XY_p.size #size of XY_p
    X_p=xy_p[0]
    Y_p=xy_p[1]

    n=2
    while n<b:
        X_p0=xy_p[n]
        Y_p0=xy_p[n+1]
        X_p=np.append(X_p,X_p0)
        Y_p=np.append(Y_p,Y_p0)
        n=n+2


    i=0
    DeltaX=[]
    DeltaY=[]    

    while i<NUMBER:

        x_r=float(Dummy_array[i][7])
        y_r=float(Dummy_array[i][8])


        x_p=(X_p[i])
        y_p=(Y_p[i])




        DeltaX0=np.array((x_p-x_r)*1000/PLATE_SCALE )
        DeltaY0=np.array((y_p-y_r)*1000/PLATE_SCALE )

        DeltaX=np.append(DeltaX,DeltaX0)
        DeltaY=np.append(DeltaY,DeltaY0)

        i=i+1

    scaler=input("Input your scale factor for vector length e.g. 1...100, the larger the scale the shorter the arrows: ") 


    Q = plt.quiver(X_p[0::], Y_p[0::], DeltaX[0::], DeltaY[0::], scale_units='width', scale=scaler)
    #qk=plt.quiverkey(Q,1.0,0.92,2,r'$ [mas] $')
    print("To plot again close plot window")
    plt.show()

    redo=input("To replot enter 0: ")
将1,2,3想象成红色到黄色的不同颜色可能会有所帮助(例如红边黄色中间色)

正如您所看到的,这具有y轴对称性。如果我只取三分之一的值,会发生什么情况:

3  x  x  2  x 
x  2  x  x  3 
x  x  1  x  x  
3  x  x  2  x 
x  2  x  x  3 
不再有y轴对称!我需要以保持y轴对称的方式处理这些值:

 3  x  1  x  3
 3  x  1  x  3
 3  x  1  x  3
 3  x  1  x  3 
 3  x  1  x  3

你能提供一个简单的工作示例吗?在看不到情节的情况下,很难猜出“失去对称性”是什么意思。很抱歉,我不能发布任何情节,模仿face zeemax文件是一件非常痛苦的事情。但这可能有助于理解:我的情节有y轴对称。因此,位置(-1,2)和(1,2)处的箭头将相对。如果你看一下如果我只取三分之一的值会发生什么:它可能会发生,而不是将箭头附加到对称变形的(-a,b)和(a,b)(箭头朝向同一方向)上,它将绘制(-a,b)和(a,b+1)。因为这些点之间没有相关性,所以看起来好像不是对称的。所以我要做的是在向量中建立一个不等距的索引。如果这些值是以矩阵(网格)表示的,我想在一行中处理每一秒的值。但这与向量中的每一秒都是不同的。我们无法猜出你在想什么。您需要提供信息以了解您的问题。。。你是那个试图在这里寻求帮助的人。我做了一些补充评论,希望澄清我的意思。
 3  x  1  x  3
 3  x  1  x  3
 3  x  1  x  3
 3  x  1  x  3 
 3  x  1  x  3