вертикальные и горизонтальные линии в matplotlib

122

Я не совсем понимаю, почему я не могу создавать горизонтальные и вертикальные линии в указанных пределах. Я хочу привязать данные к этому окну. Однако стороны, похоже, не соблюдают мои инструкции. Почему это?

# CREATING A BOUNDING BOX
# BOTTOM HORIZONTAL
plt.axhline(y=.4, xmin=0.25, xmax=0.402, linewidth=2, color = 'k')
# RIGHT VERTICAL
plt.axvline(x=0.402, ymin=0.4, ymax = 0.615, linewidth=2, color='k')
# LEFT VERTICAL
plt.axvline(x=0.1, ymin=0.58, ymax = 0.79, linewidth=2, color='k')
plt.show()

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

Рохит
источник

Ответы:

166

Функции pyplot, которые вы вызываете, axhline()и axvline()рисование линий, охватывающих часть диапазона оси, независимо от координат. Параметры xminили yminиспользуйте значение 0,0 как минимум оси и 1,0 как максимум оси.

Вместо этого используйте plt.plot((x1, x2), (y1, y2), 'k-')для рисования линии от точки (x1, y1) до точки (x2, y2) цветом k. Смотрите pyplot.plot.

Беннет Браун
источник
3
matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.axhline <- документация. Вы должны отредактировать свой ответ, включив в него эту ссылку
tacaswell
15
Другим решением для построения горизонтальных и вертикальных линий, чтобы использовать hlinesили vlines, соответственно, так как это более тривиальным , чем обычный plotIMO
SODD
20

Это может быть распространенной проблемой для новых пользователей Matplotlib при рисовании вертикальных и горизонтальных линий. Чтобы понять эту проблему, вы должны знать, что в Matplotlib существуют разные системы координат .

Метод axhline и axvline используются для рисования линий в осях координат . В этой системе координат координата левой нижней точки равна (0,0), а координата правой верхней точки - (1,1), независимо от диапазона данных вашего графика. Оба параметра xminи xmaxнаходятся в диапазоне [0,1].

С другой стороны, методы hlines и vlines используются для рисования линий в координатах данных . Диапазон для xminи xmaxнаходится в пределах диапазона данных по оси x.

Возьмем конкретный пример,

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 5, 100)
y = np.sin(x)

fig, ax = plt.subplots()

ax.plot(x, y)
ax.axhline(y=0.5, xmin=0.0, xmax=1.0, color='r')
ax.hlines(y=0.6, xmin=0.0, xmax=1.0, color='b')

plt.show()

Это даст следующий сюжет: введите описание изображения здесь

Значения xminи xmaxодинаковы для метода axhlineand hlines. Но длина производимой лески другая.

jdhao
источник
16

Если вы хотите добавить ограничивающую рамку, используйте прямоугольник:

ax = plt.gca()
r = matplotlib.patches.Rectangle((.5, .5), .25, .1, fill=False)
ax.add_artist(r)

Rectangle доктор

tacaswell
источник