簡體   English   中英

將matplotlib pyplot旋轉90度

[英]Rotate matplotlib pyplot with curve by 90 degrees

我有一條線的情節是這樣的:

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-')

情節1

我需要這樣旋轉它:

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-')

情節2

但從邏輯上講,曲線沒有按照我的意願旋轉。 有任何想法嗎?

我讀了這篇文章,但幾乎沒有幫助。 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。

旋轉必須始終圍繞空間的某個點發生(我們稱其為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()

在此處輸入圖片說明

我可能會誤解您的問題,但是為什么不只切換x和y軸的值呢?

pl.scatter(b,a,color = "blue", marker = 'o', s = 20)
pl.plot(ss,aa, 'r-')

像這樣?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM