减少quiverplot中的点数使它们保持等距

时间:2016-01-26 10:46:54

标签: python matplotlib plot

我正在使用带有matplotlib库的pyhton 2.7。在那里,我使用箭袋绘制网格。

我有以下问题: 我正在计算积分网格。每个点都与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]绘制对称网格。

3  2  1  2  3
3  2  1  2  3 
3  2  1  2  3
3  2  1  2  3 
3  2  1  2  3

将1,2,3描绘成红色到黄色的不同颜色(例如红色边黄色middel)可能会有所帮助

正如你所看到的那样,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

0 个答案:

没有答案