my previous question У меня есть координаты поля текстовой метки в координатах фракции фигуры и вы пытались получить координаты патча стрелки таким же образом.Получение координат стрелки в аннотации Matplotlib
Но координаты, которые я получаю, не соответствуют стрелке, потому что, когда я сюжет линию над тем же координатам она не лежит на нем:
import numpy as np
import matplotlib
matplotlib.use('agg')
import matplotlib.pyplot as plt
def f(x):
return 10 * np.sin(3*x)**4
x = np.linspace(0, 2*np.pi, 100)
y = f(x)
fig, ax = plt.subplots()
ax.plot(x,y)
xpt = 1.75
ypt = f(xpt)
xy = ax.transData.transform([xpt, ypt])
xy = fig.transFigure.inverted().transform(xy)
xytext = xy + [0.1, -0.1]
rdx, rdy = 0, 1
ann = ax.annotate('A point', xy=xy, xycoords='figure fraction',
xytext=xytext, textcoords='figure fraction',
arrowprops=dict(arrowstyle='->', connectionstyle="arc3",
relpos=(rdx, rdy)),
bbox=dict(fc='gray', edgecolor='k', alpha=0.5),
ha='left', va='top'
)
fig.canvas.draw()
leader_line_box = ann.arrow_patch.get_extents()
print(leader_line_box)
leader_line_box = fig.transFigure.inverted().transform(leader_line_box)
print(leader_line_box)
from matplotlib.lines import Line2D
line = Line2D(leader_line_box.T[0], leader_line_box.T[1],transform=fig.transFigure, lw=2, color='m')
ax.add_line(line)
plt.savefig('test.png')
Как может Я получаю ((x0,y0), (x1,y1))
координаты стрелки аннотации в единицах фракции фигур и что пошло не так в моей попытке здесь?
Я думаю, что он делает именно то, что вы говорите, чтобы сделать: построение линии сверху вниз вправо справа от рамки стрелки. Если вы хотите, чтобы строка была выровнена со стрелкой, вы можете просто поместить '[:: - 1]', чтобы отменить либо xdata, либо ydata. Это те координаты, которые вы искали? Где вы хотите, чтобы линия была построена? – whrrgarbl
Хм - Я думаю, ты прав. Я действительно хочу, чтобы координаты хвоста и головы самой стрелки. – xnx