Saya agak baru mengenal python / matplotlib dan menggunakannya melalui notebook ipython. Saya mencoba menambahkan beberapa baris anotasi ke grafik yang ada dan saya tidak tahu cara merender garis pada grafik. Jadi, misalnya, jika saya memplot yang berikut ini:
import numpy as np
np.random.seed(5)
x = arange(1, 101)
y = 20 + 3 * x + np.random.normal(0, 60, 100)
p = plot(x, y, "o")
Saya mendapatkan grafik berikut:
Jadi bagaimana cara menambahkan garis vertikal dari (70.100) hingga (70.250)? Bagaimana dengan garis diagonal dari (70.100) sampai (90.200)?
Saya telah mencoba beberapa hal yang tidak Line2D()
menghasilkan apa-apa selain kebingungan di pihak saya. Di R
saya hanya akan menggunakan fungsi segment () yang akan menambahkan segmen garis. Apakah ada padanannya matplotlib
?
sumber
x = np.arange(1, 101)
.plt.plot([70, 70], [100, 250], 'k-', lw=2, label="_not in legend")
90
digunakan baik sebagaix2
dan dany1
menyebabkan banyak ambiguitas. Untuk siapa pun yang melihat ini, catatan yang[70, 90]
tidak mengacu pada satu titik di lokasix1,y1
. Untuk referensi, berikut adalah arti dari nilainya:[x1: 70, x2: 90], [y1: 90, y2: 200]
Belum terlambat untuk para pendatang baru .
Ini mengambil kisaran y juga, menggunakan ymin dan ymax.
sumber
Menggunakan
vlines
:Tanda tangan panggilan dasar adalah:
sumber
vline()
atauhline()
fungsinya. Bagaimana dengan garis diagonal? Saya mengedit pertanyaan untuk menambahkan bit diagonal sekarang setelah Anda menunjukkan kepada saya garis h & v.DataFrame
berisi koordinat x, y dan gambarkan denganstyle='k-'
Matplolib sekarang mengizinkan 'baris anotasi' seperti yang dicari OP. The
annotate()
Fungsi memungkinkan beberapa bentuk menghubungkan jalur dan tanpa kepala dan tailess panah, yaitu, garis sederhana, adalah salah satunya.Dalam dokumentasi dikatakan bahwa Anda hanya dapat menggambar panah dengan string kosong sebagai argumen pertama.
Dari contoh OP:
Seperti pada pendekatan dalam jawaban gcalmettes, Anda dapat memilih warna, lebar garis, gaya garis, dll.
Berikut adalah perubahan pada bagian kode yang akan membuat salah satu dari dua baris contoh menjadi merah, lebih lebar, dan tidak 100% buram.
Anda juga dapat menambahkan kurva ke garis penghubung dengan menyesuaikan
connectionstyle
.sumber
.plot()
tidak bisa dilakukan.Daripada menyalahgunakan
plot
atauannotate
, yang tidak efisien untuk banyak baris, Anda dapat menggunakanmatplotlib.collections.LineCollection
:Dibutuhkan daftar baris
[l1, l2, ...]
, dimana setiap baris adalah urutan N koordinat ( N bisa lebih dari dua).Kata kunci pemformatan standar tersedia, menerima nilai tunggal, dalam hal ini nilai berlaku untuk setiap baris, atau urutan M
values
, dalam hal ini nilai untuk baris ke- i adalahvalues[i % M]
.sumber