FancyArrowPatch не рисует метку - PullRequest
0 голосов
/ 23 декабря 2018

Я не могу получить FancyArrowPatch для отображения текста, переданного в label kwarg.Я не вижу, что я делаю неправильно.Любая идея?

setup:

import matplotlib.pyplot as plt
from matplotlib import patches
import numpy as np

fig = plt.figure()

X, Y = np.mgrid[-1:1:.1, -1:1:.1]
Z = X+Y

ax1 = fig.add_subplot(311)
ax2 = fig.add_subplot(313)
ax1.contourf(X, Y, Z)
ax2.contourf(X, Y, -Z)

код стрелки:

ax1tr = ax1.transData # Axis 0 -> Display
ax2tr = ax2.transData # Axis 1 -> Display
figtr = fig.transFigure.inverted() # Display -> Figure
ptB = figtr.transform(ax1tr.transform((0., 0.)))
ptE = figtr.transform(ax2tr.transform((0., 0.)))
arrow = patches.FancyArrowPatch(
    ptB, ptE, transform=fig.transFigure,  # Place arrow in figure coord system
    connectionstyle="arc3,rad=0", arrowstyle='simple',
    mutation_scale = 15., label='some arrow'
)
fig.patches.append(arrow)

fig.show()

Я бы ожидал, что некоторая стрелка будет нарисована как меткаСтрелка.Но это не так.enter image description here

1 Ответ

0 голосов
/ 23 декабря 2018

В принципе, это должно работать после добавления строки plt.legend() в ваш код.Тем не менее, существует обходное решение, где вы явно пропускаете патч arrow и текст метки.

arrow = patches.FancyArrowPatch(
    ptB, ptE, transform=fig.transFigure,  # Place arrow in figure coord system
    connectionstyle="arc3,rad=0", arrowstyle='simple',
    mutation_scale = 15., label='some arrow'
)
fig.patches.append(arrow)

plt.legend([arrow], fontsize=16)

Другой альтернативой является

plt.legend(handles=[arrow], fontsize=16)

На основе комментариев, какЯ сказал, что цель label не в том, чтобы поместить текст рядом с патчем стрелки.То, что вы хотите, может быть легко достигнуто с помощью plt.text.Однако, если вы не хотите его использовать, вы можете заставить текущий код работать так, как вам нужно, используя следующий обходной путь

leg = plt.legend(handles = [arrow], fontsize=16, frameon=False, loc=(0.45, 0.5))

for item in leg.legendHandles:
    item.set_visible(False)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...