Можно ли привязать аннотацию matplotlib к координате данных по оси x, но к относительному местоположению по оси y?

У меня есть сюжет, где я хотел бы аннотировать определенное местоположение по оси х стрелкой и меткой:

  • Расположение наконечника стрелки необходимо точно указать в координатах данных.
  • Стрелка должна быть вертикальной, поэтому координата x тупого конца стрелки (и текстовой метки) также должна быть точно указана в координатах данных.
  • Тем не менее, я в идеале хотел бы иметь возможность указать y-положение тупого конца стрелки относительно ограничивающего рамки оси, а не данных.

Мое текущее рабочее решение включает указание местоположений как наконечника стрелки, так и метки в координатах данных:

import numpy as np from matplotlib import pyplot as plt from matplotlib.transforms import blended_transform_factory x = np.random.randn(10000) r = 3 label = 'foo' arrowprops = dict(fc='r', ec='k') def make_example_plot(): fig, ax = plt.subplots(1, 1) ax.hold(True) counts, edges, patches = ax.hist(x) return fig, ax fig, ax = make_example_plot() lo, hi = ax.get_ylim() ax.annotate(label, xy=(r, 0), xycoords='data', xytext=(r, hi * 1.1), textcoords='data', fontsize='xx-large', ha='center', va='center', color='r', arrowprops=arrowprops) ax.set_ylim(0, hi * 1.3) 

введите описание изображения здесь

Я бы предпочел, чтобы ярлык оставался в постоянном положении в y, независимо от того, как я масштабирую или поворачиваю оси y. Я могу добиться желаемого эффекта для простой текстовой метки, передав смешанное преобразование xy в ax.text :

 fig, ax = make_example_plot() tform = blended_transform_factory(ax.transData, ax.transAxes) ax.text(r, 0.9, label, fontsize='xx-large', color='r', transform=tform) 

введите описание изображения здесь

Если вы воспроизведете эту цифру, то панорамируйте или масштабируйте ее, вы увидите, что текст перемещается по x относительно ограничивающего рамки оси, но остается в фиксированном положении по y. Конечно, это все еще не дает мне стрелы. Я надеялся, что смогу использовать тот же подход с ax.annotate , но это, похоже, не работает:

 fig, ax = make_example_plot() tform = blended_transform_factory(ax.transData, ax.transAxes) ax.annotate(label, xy=(r, 0), xycoords='data', transform=tform, xytext=(r, 0.9), textcoords='data', fontsize='xx-large', ha='center', va='center', color='r', arrowprops=arrowprops) 

Метка и стрелка помещаются в y = 0.9 в координатах данных, а не на 90% от общей высоты оси y:

введите описание изображения здесь

Есть ли способ отдельно указать кадры ссылки для x- и y-преобразований, применяемых к matplotlib.text.Annotation ?

One Solution collect form web for “Можно ли привязать аннотацию matplotlib к координате данных по оси x, но к относительному местоположению по оси y?”

Передайте преобразование в параметры xycoords и textcoords вместо параметра transform . Вот так:

 fig, ax = make_example_plot() tform = blended_transform_factory(ax.transData, ax.transAxes) ax.annotate(label, xy=(r, 0), xycoords=tform, xytext=(r, 0.9), textcoords=tform, fontsize='xx-large', ha='center', va='center', color='r', arrowprops=arrowprops) 
  • Python: одиночная двоеточие против двойной кишки
  • Быстрая абсолютная разница двух массивов uint8
  • Почему я не могу оценить измененную тензорную переменную в анано?
  • Установка scipy в Python 3.5 на 32-разрядной машине Windows 7
  • Почему существуют два np.int64s в numpy.core.numeric._typelessdata (почему numpy.int64 не numpy.int64?)
  • tile для создания csr_matrix из одной строки другой csr_matrix
  • Векторизация внешней петли евклидова расстояния с использованием numpy на многомерных данных
  • Numpy octuple точность float и 128 бит int. Почему и как?
  • Numpy - модуль не имеет атрибута 'arr'
  • Каков наиболее эффективный способ найти позицию первого значения np.nan?
  • Сравнение pandas.Series для равенства, когда они содержат nan?
  •  
    Interesting Posts for Van-Lav

    возврат наружной функции

    Большинство Pythonic способ объявить абстрактное свойство класса

    Python & Pygame: обновление всех элементов в списке под циклом во время итерации

    Отправка электронной почты после очистки

    У меня есть «Код авторизации» для моего приложения. Но как я могу использовать его для публикации в блогере с помощью gdata-python-client?

    Версия Python условного оператора C # (?)

    Вычислить трассировку матрицы по всем диагоналям

    Почему приложение PyQt открыто в фоновом режиме на Mac OS X?

    df.loc вызывает предупреждающее сообщение SettingWithCopyWarning

    Как отобразить облако точек в vtk в разных цветах?

    Создайте «нечеткую» разницу двух файлов в Python, с приблизительным сравнением поплавков

    искать похожие фразы с nltk

    Matplotlib анимация MovieWriters не работает на Ubuntu 12.04

    Соответствующее значение max_packets для функции цикла MQTT

    Как я могу преобразовать время в строку datetime с 24:00 до 00:00 в Python?

    Python - лучший язык программирования в мире.