linhas verticais e horizontais no matplotlib

122

Não entendo muito bem por que não consigo criar linhas horizontais e verticais nos limites especificados. Gostaria de vincular os dados por esta caixa. No entanto, os lados não parecem cumprir minhas instruções. Por que é isso?

# 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()

insira a descrição da imagem aqui

Rohit
fonte

Respostas:

166

As funções do pyplot que você está chamando axhline()e axvline()desenham linhas que abrangem uma parte do intervalo do eixo, independentemente das coordenadas. Os parâmetros xminou yminusam o valor 0,0 como o mínimo do eixo e 1,0 como o máximo do eixo.

Em vez disso, use plt.plot((x1, x2), (y1, y2), 'k-')para desenhar uma linha do ponto (x1, y1) até o ponto (x2, y2) na cor k. Veja pyplot.plot.

Bennett Brown
fonte
3
matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.axhline <- documentation. Você deve editar sua resposta para incluir este link
tacaswell
15
Outra solução para traçar linhas horizontais e verticais é a utilização hlinesou vlines, respectivamente, como isso é mais do que um regular trivial plotimo
DDOS
20

Esse pode ser um problema comum para novos usuários do Matplotlib para desenhar linhas verticais e horizontais. Para entender esse problema, você deve estar ciente de que existem diferentes sistemas de coordenadas no Matplotlib .

O método axhline e axvline são usados ​​para desenhar linhas nas coordenadas dos eixos . Nesse sistema de coordenadas, a coordenada para o ponto inferior esquerdo é (0,0), enquanto a coordenada para o ponto superior direito é (1,1), independentemente do intervalo de dados do seu gráfico. O parâmetro xmine xmaxestá no intervalo [0,1].

Por outro lado, o método hlines e vlines são usados ​​para desenhar linhas na coordenada de dados . O intervalo para xmine xmaxestá no intervalo de dados limite do eixo x.

Vamos dar um exemplo concreto,

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()

Ele produzirá o seguinte gráfico: insira a descrição da imagem aqui

O valor para xmine xmaxé o mesmo para o método axhlinee hlines. Mas o comprimento da linha produzida é diferente.

jdhao
fonte
16

Se você deseja adicionar uma caixa delimitadora, use um retângulo:

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

Rectangle doc

Tacaswell
fonte