Matplolib ahora permite 'líneas de anotación' como buscaba el OP. La annotate()
función permite varias formas de conectar caminos y una flecha sin cabeza y sin tai, es decir, una línea simple, es una de ellas.
ax.annotate("",
xy=(0.2, 0.2), xycoords='data',
xytext=(0.8, 0.8), textcoords='data',
arrowprops=dict(arrowstyle="-",
connectionstyle="arc3, rad=0"),
)
En la documentación dice que solo puede dibujar una flecha con una cadena vacía como primer argumento.
Del ejemplo del 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()
Al igual que en el enfoque de la respuesta de gcalmettes, puede elegir el color, el ancho de línea, el estilo de línea, etc.
Aquí hay una alteración en una parte del código que haría que una de las dos líneas de ejemplo sea roja, más ancha y no 100% opaca.
# 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."),
)
También puede agregar una curva a la línea de conexión ajustando el connectionstyle
.