вертикальні та горизонтальні лінії в 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

Функції піплота, які ви викликаєте, 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є однаковим для axhlineі hlinesметоди. Але довжина виробленої лінії різна.


16

Якщо ви хочете додати обмежувальне поле, використовуйте прямокутник:

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

Rectangle док

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.