我正在使用带有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