Использование аннотации matplotlib в качестве размерных линий (позиции стрелок)? - PullRequest
0 голосов
/ 03 ноября 2019

Я хотел бы иметь что-то вроде «размерной линии» - горизонтальную линию со стрелками на каждом конце и текстом в середине.

Я придумал этот пример:

#!/usr/bin/env python3

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0,100)
y = 2*x+1

fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.plot(x,y)
ax1.axhline(y=1, color='gray', linestyle='-', linewidth=0.5)
yannot=1.0
aaline = ax1.annotate("X1",
  xy=(0, yannot), xycoords=('data', 'axes fraction'),
  xytext=(100, yannot), textcoords=('data', 'axes fraction'),
  verticalalignment = "bottom",
  arrowprops=dict(
    arrowstyle="<->", color="Red", shrinkA=0, shrinkB=0,
  ),
)
plt.show()

Я попытался указать x в координатах данных, а y в долях осей, чтобы линия сохраняла увеличение;однако, это то, что я получаю в начале:

matplotlib-1

Как вы можете видеть - даже если я попытался указать координату y начала и концаточки линии аннотации должны быть одинаковыми - эта (красная) линия не является прямой горизонтальной! Возможно, это связано с тем, что у аннотации есть не только начальная и конечная точки, но и аннотируемая точка, а также местоположение аннотированного текста, а также размер / заполнение текстовой метки. в конечном итоге в вычислениях в другой из конечных точек.

Тем не менее, что я могу использовать, чтобы получить правильную параллельную линию со стрелками, так что текст метки центрируется в середине?

О постоянном увеличении - это то, что я получаю после увеличения:

matplotlib-2

Это в основном то, что я хочу - нарисованные стрелки показаны,Однако мне бы хотелось, чтобы линия аннотации была обрезана по графику, а метка «X1» была размещена в центре показанной линии независимо от показанного уровня масштабирования. Есть ли способ достичь этого?

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