我有一行的情节如下:
import numpy as np
import matplotlib.pyplot as pl
a = np.array([4, 4, 4, 4, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9])
b = np.array([i/len(a) for i in range(1, len(a)+1)])
aa = np.array([i/10 for i in range(40, 91)])
ss = np.array([ 0.06200455, 0.07389492, 0.08721351, 0.10198928, 0.11823225,
0.13593267, 0.15506088, 0.1755675 , 0.19738431, 0.22042543,
0.244589 , 0.26975916, 0.29580827, 0.32259936, 0.34998862,
0.377828 , 0.40596767, 0.43425846, 0.46255411, 0.49071331,
0.51860153, 0.54609255, 0.57306977, 0.5994272 , 0.62507019,
0.64991591, 0.67389356, 0.69694438, 0.71902138, 0.74008905,
0.76012273, 0.77910799, 0.79703987, 0.81392209, 0.82976609,
0.84459023, 0.85841887, 0.87128143, 0.88321163, 0.89424658,
0.90442608, 0.91379189, 0.92238706, 0.93025537, 0.93744079,
0.94398702, 0.94993712, 0.95533313, 0.96021585, 0.96462454,
0.96859684])
pl.scatter(a,b,color = "blue", marker = 'o', s = 20)
pl.plot(aa, ss, 'r-')
我需要将其旋转为:
x轴应为0-1(因此b
)和y轴应反向排序,例如
a2 = sorted(a, reverse = True)
aa2 = sorted(aa, reverse = True)
所以基本上顺时针旋转它并改变旋转曲线的x轴顺序。我最近的尝试是这样的:
pl.scatter(b,a2,color = "blue", marker = 'o', s = 20)
pl.plot(ss, aa2, 'r-')
但逻辑上曲线并没有像我想要的那样旋转。有什么想法吗?
我在this张贴了帖子,但没什么帮助。 pl.scatter
似乎没有orientation
属性,scipy.ndimage
让我退缩
File "C:\Users\rpaca\Desktop\WinPython-64bit-3.5.2.2\python-3.5.2.amd64\lib\site-packages\scipy\ndimage
\interpolation.py", line 663, in rotate
ix = input.shape[axes[1]]
IndexError: tuple index out of range
此外,在旋转的情节中,我应该添加更多的点。所以我真的想通过改变曲线点的位置而不是任何模糊函数来做到这一点。我在winpython中使用python 3.
答案 0 :(得分:1)
旋转必须始终围绕空间中的一个点(让我们称之为origin
)。
要实现旋转,您需要将点移动到原点,围绕选择的角度旋转它们并将它们移回。如果您的角度是90°,旋转是直接的
x_new = -y
y_new = x
以这种方式可以旋转图像:
import numpy as np
import matplotlib.pyplot as plt
a = np.array([4, 4, 4, 4, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9])
b = np.array([i/float(len(a)) for i in range(1, len(a)+1)])
A = np.array([i/10. for i in range(40, 91)])
B = np.array([ 0.06200455, 0.07389492, 0.08721351, 0.10198928, 0.11823225,
0.13593267, 0.15506088, 0.1755675 , 0.19738431, 0.22042543,
0.244589 , 0.26975916, 0.29580827, 0.32259936, 0.34998862,
0.377828 , 0.40596767, 0.43425846, 0.46255411, 0.49071331,
0.51860153, 0.54609255, 0.57306977, 0.5994272 , 0.62507019,
0.64991591, 0.67389356, 0.69694438, 0.71902138, 0.74008905,
0.76012273, 0.77910799, 0.79703987, 0.81392209, 0.82976609,
0.84459023, 0.85841887, 0.87128143, 0.88321163, 0.89424658,
0.90442608, 0.91379189, 0.92238706, 0.93025537, 0.93744079,
0.94398702, 0.94993712, 0.95533313, 0.96021585, 0.96462454,
0.96859684])
def rotate(x,y, origin=(0,0)):
# shift to origin
x1 = x - origin[0]
y1 = y - origin[1]
#rotate
x2 = -y1
y2 = x1
# shift back
x3 = x2 + origin[1]
y3 = y2 + origin[0]
return x3, y3
# now let's do the rotation
origin = (9.,0.5)
a1, b1 = rotate(a,b, origin )
A1, B1 = rotate(A,B, origin )
fig, (ax1, ax2) = plt.subplots(1,2, figsize=(7,3.3))
ax1.set_title("original")
ax1.scatter(a, b, color = "blue", marker = 'o', s = 20)
ax1.plot (A, B, 'r-')
ax2.set_title(u"90° ccw rotated")
ax2.scatter(a1, b1, color = "blue", marker = 'o', s = 20)
ax2.plot (A1, B1, 'r-')
plt.show()
答案 1 :(得分:0)