garis vertikal & horizontal di matplotlib

122

Saya tidak begitu mengerti mengapa saya tidak dapat membuat garis horizontal dan vertikal pada batas yang ditentukan. Saya ingin mengikat data dengan kotak ini. Namun, sisi-sisinya sepertinya tidak sesuai dengan instruksi saya. Kenapa ini?

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

masukkan deskripsi gambar di sini

Rohit
sumber

Jawaban:

166

Fungsi pyplot yang Anda panggil, axhline()dan axvline()menggambar garis yang menjangkau sebagian dari rentang sumbu, terlepas dari koordinatnya. Parameter xminatau ymingunakan nilai 0,0 sebagai minimum sumbu dan 1,0 sebagai maksimum sumbu.

Sebagai gantinya, gunakan plt.plot((x1, x2), (y1, y2), 'k-')untuk menggambar garis dari titik (x1, y1) ke titik (x2, y2) dengan warna k. Lihat pyplot.plot.

Bennett Brown
sumber
3
matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.axhline <- dokumentasi. Anda harus mengedit jawaban Anda untuk menyertakan tautan ini
tacaswell
15
Solusi lain untuk memplot garis horizontal dan vertikal adalah dengan menggunakan hlinesatau vlines, secara plot
berurutan
20

Ini mungkin masalah umum bagi pengguna baru Matplotlib untuk menggambar garis vertikal dan horizontal. Untuk memahami masalah ini, Anda harus menyadari bahwa sistem koordinat yang berbeda ada di Matplotlib .

Metode axhline dan axvline digunakan untuk menggambar garis pada koordinat sumbu . Dalam sistem koordinat ini, koordinat titik kiri bawah adalah (0,0), sedangkan titik kanan atas adalah (1,1), terlepas dari range data plot Anda. Baik parameter xminmaupun xmaxberada dalam kisaran [0,1].

Di sisi lain, metode hlines dan vlines digunakan untuk menggambar garis pada koordinat data . Rentang untuk xmindan xmaxberada dalam rentang batas data sumbu x.

Mari kita ambil contoh konkret,

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

Ini akan menghasilkan plot berikut: masukkan deskripsi gambar di sini

Nilai untuk xmindan xmaxsama untuk metode axhlinedan hlines. Tetapi panjang garis yang diproduksi berbeda.

jdhao
sumber
16

Jika Anda ingin menambahkan kotak pembatas, gunakan persegi panjang:

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

Rectangle dokter

tacaswell.dll
sumber