Hướng dẫn dùng ax annotate python

Sau đây tôi sẽ hướng dẫn cách đánh dấu điểm trên graph qua ví dụ sau: giá trị của 3sin(3pi/4) = 3/2

Hướng dẫn dùng ax annotate python

 thay vì một số nhàm chán 2.1213203435596428.
>>> import numpy as np

>>> import matplotlib.pyplot as plt

>>> X = np.linspace(-2 * np.pi, 3 * np.pi, 70, endpoint=True)

>>> F1 = np.sin(X)

>>> F2 = 3 * np.sin(X)

>>> ax = plt.gca()

>>> plt.xticks( [-6.28, -3.14, 3.14, 6.28],

...         [r'$-2\pi$', r'$-\pi$', r'$+\pi$', r'$+2\pi$'])

([, , , ], )

>>> plt.yticks([-3, -1, 0, +1, 3])

([, , , , ], )

>>> x = 3 * np.pi / 4

>>> plt.scatter([x,],[3 * np.sin(x),], 50, color ='blue')



>>> plt.annotate(r'$(3\sin(\frac{3\pi}{4}),\frac{3}{\sqrt{2}})$',

...          xy=(x, 3 * np.sin(x)),

...          xycoords='data',

...          xytext=(+20, +20),

...          textcoords='offset points',

...          fontsize=16,

...          arrowprops=dict(facecolor='blue'))



>>> plt.plot(X, F1, label="$sin(x)$")

[]

>>> plt.plot(X, F2, label="$3 sin(x)$")

[]

>>> plt.legend(loc='lower left')



>>> plt.show()

Chúng ta phải cung cấp một số thông tin cho các tham số của chú thích, chúng ta đã sử dụng trong ví dụ trước.

Ý nghĩa của thông số
Xy
:  Tọa độ của mũi tên.
xytext
: Tọa độ của vị trí văn bản
Vị trí xy và xytext trong ví dụ của chúng tôi nằm trong tọa độ dữ liệu. Có những hệ tọa độ khác mà chúng ta có thể lựa chọn. Hệ tọa độ của xy và xytext có thể được xác định
qua chuỗi được gán cho xycoords và textcoords. Giá trị mặc định là 'data':

Chuỗi giá trị cho hệ thống tọa độ.

figure points: các điểm từ góc dưới bên trái của hình
figure pixels:  các pixels từ góc dưới bên trái của hình
figure fraction: Chữ số 0,0  là thấp hơn bên trái của hình và 1,1 là trên bên phải
axes points: các diểm trục từ góc dưới bên trái của các trục
axes pixels: các pixels từ từ góc dưới bên trái của các trục
axes fraction:  0,0 là phần dưới bên trái của trục và 1,1 phía trên bên phải
data: sử dụng hệ trục tọa độ dữ liệu

Ngoài ra, chúng ta cũng có thể chỉ định các thuộc tính của mũi tên (arrow). Để làm như vậy, chúng ta phải cung cấp một dictionary các thuộc tính của tham số của mũi tên (arrowprops):

width

Chiều rộng của mũi tên.

frac

Phần của chiều dài mũi tên chiếm bởi phần đầu

headwidth

Chiều rộng của đáy của mũi tên

shrink

Di chuyển đầu và căn cứ vào phần trăm đi từ điểm chú thích và text.

**kwargs

Bất kì key của matplotlib.patches.Polygon, ví dụ, facecolor

Các bạn làm lại ví dụ phía trên nhưng thay đổi các thông số trong phần bôi đen dưới đây:

>>> plt.annotate(r'$(3\sin(\frac{3\pi}{4}),\frac{3}{\sqrt{2}})$',xy=(x, 3 * np.sin(x)), xycoords='data',xytext=(+20, +20),textcoords='offset points',fontsize=16,arrowprops=dict(facecolor='blue', headwidth=25, frac=0.3, width=2,shrink=200))

Kết Luận

Khi bạn muốn vẽ một một mũi tên và muốn chú thích một ý nghĩa nào đó ứng với mũi tên đó thì hãy nghĩ ngay đến kĩ thuật chú thích trong Matplotlib qua phương thức annotate().