Matplolib теперь позволяет использовать «строки аннотации», как искал OP. annotate()
Функция позволяет несколько форм соединительных путей и обезглавленная и tailess стрелки, т.е. простой линии, является одним из них.
ax.annotate("",
xy=(0.2, 0.2), xycoords='data',
xytext=(0.8, 0.8), textcoords='data',
arrowprops=dict(arrowstyle="-",
connectionstyle="arc3, rad=0"),
)
В документации говорится, что вы можете нарисовать только стрелку с пустой строкой в качестве первого аргумента.
Из примера 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()
Как и в случае с ответом gcalmettes, вы можете выбрать цвет, ширину линии, стиль линии и т. Д.
Вот изменение в части кода, которое сделало бы одну из двух строк примера красной, широкой и не на 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."),
)
Вы также можете добавить кривую к соединительной линии, отрегулировав connectionstyle
.