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