Matplolib hiện cho phép 'dòng chú thích' như OP đang tìm kiếm. Các annotate()
chức năng cho phép nhiều hình thức các đường dẫn kết nối và không đầu và tailess mũi tên, ví dụ, một dòng đơn giản, là một trong số họ.
ax.annotate("",
xy=(0.2, 0.2), xycoords='data',
xytext=(0.8, 0.8), textcoords='data',
arrowprops=dict(arrowstyle="-",
connectionstyle="arc3, rad=0"),
)
Trong tài liệu, nó nói rằng bạn chỉ có thể vẽ một mũi tên với một chuỗi rỗng làm đối số đầu tiên.
Từ ví dụ của OP:
%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(5)
x = np.arange(1, 101)
y = 20 + 3 * x + np.random.normal(0, 60, 100)
plt.plot(x, y, "o")
# draw vertical line from (70,100) to (70, 250)
plt.annotate("",
xy=(70, 100), xycoords='data',
xytext=(70, 250), textcoords='data',
arrowprops=dict(arrowstyle="-",
connectionstyle="arc3,rad=0."),
)
# draw diagonal line from (70, 90) to (90, 200)
plt.annotate("",
xy=(70, 90), xycoords='data',
xytext=(90, 200), textcoords='data',
arrowprops=dict(arrowstyle="-",
connectionstyle="arc3,rad=0."),
)
plt.show()
Cũng giống như cách tiếp cận trong câu trả lời của gcalmettes, bạn có thể chọn màu sắc, độ rộng dòng, kiểu dòng, v.v.
Đây là một thay đổi đối với một phần của mã sẽ làm cho một trong hai dòng ví dụ có màu đỏ, rộng hơn và không mờ 100%.
# draw vertical line from (70,100) to (70, 250)
plt.annotate("",
xy=(70, 100), xycoords='data',
xytext=(70, 250), textcoords='data',
arrowprops=dict(arrowstyle="-",
edgecolor = "red",
linewidth=5,
alpha=0.65,
connectionstyle="arc3,rad=0."),
)
Bạn cũng có thể thêm đường cong vào đường kết nối bằng cách điều chỉnh connectionstyle
.