Dalam [jawaban] sebelumnya 1 direkomendasikan kepada saya untuk menggunakan add_subplot
daripada add_axes
untuk menampilkan sumbu dengan benar, tetapi mencari dokumentasi saya tidak dapat memahami kapan dan mengapa saya harus menggunakan salah satu dari fungsi-fungsi ini.
Adakah yang bisa menjelaskan perbedaannya?
Keduanya, add_axes
dan add_subplot
menambahkan sebuah sumbu ke sebuah gambar. Keduanya mengembalikan sebuah (subclass dari) objek matplotlib.axes.Axes
.
Namun, mekanisme yang digunakan untuk menambahkan sumbu berbeda secara substansial.
##
add_axes`Signature pemanggilan add_axes
adalah add_axes(rect)
, dimana rect
adalah sebuah list [x0, y0, width, height]
yang menunjukkan titik kiri bawah dari sumbu baru dalam gambar koodinat (x0,y0)
dan lebar serta tingginya. Jadi sumbu diposisikan dalam koordinat absolut pada kanvas. Contoh
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
menempatkan gambar di kanvas yang persis sebesar kanvas itu sendiri.
tambah_subplot
Signature pemanggilan add_subplot
tidak secara langsung menyediakan pilihan untuk menempatkan sumbu-sumbu pada posisi yang telah ditentukan. Hal ini lebih memungkinkan untuk menspesifikasikan dimana sumbu-sumbu harus ditempatkan sesuai dengan grid subplot. Cara yang biasa dan paling mudah untuk menspesifikasikan posisi ini adalah notasi 3 integer,
fig = plt.figure()
ax = fig.add_subplot(231)
Dalam contoh ini, sebuah sumbu baru dibuat pada posisi pertama (1
) pada grid 2 baris dan 3 kolom. Untuk menghasilkan hanya satu sumbu tunggal, add_subplot(111)
akan digunakan (Plot pertama pada grid subplot 1 x 1). (Pada versi matplotlib yang lebih baru, `tambahkan_subplot()
tanpa argumen apapun juga bisa digunakan).
Keuntungan dari metode ini adalah matplotlib menangani penentuan posisi yang tepat. Secara default add_subplot(111)
akan menghasilkan sumbu yang diposisikan pada [0.125,0.11,0.775,0.77]
atau sejenisnya, yang sudah menyisakan ruang yang cukup di sekitar sumbu untuk judul dan label (tick). Namun, posisi ini juga dapat berubah tergantung pada elemen lain dalam plot, judul yang ditetapkan, dll.
Hal ini juga dapat disesuaikan dengan menggunakan pyplot.subplots_adjust(...)
atau pyplot.tight_layout()
.
Dalam kebanyakan kasus, add_subplot
akan menjadi metode yang lebih disukai untuk membuat sumbu untuk plot pada kanvas. Hanya dalam kasus-kasus di mana posisi yang tepat penting, add_axes
mungkin berguna.
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (5,3)
fig = plt.figure()
fig.add_subplot(241)
fig.add_subplot(242)
ax = fig.add_subplot(223)
ax.set_title("subplots")
fig.add_axes([0.77,.3,.2,.6])
ax2 =fig.add_axes([0.67,.5,.2,.3])
fig.add_axes([0.6,.1,.35,.3])
ax2.set_title("random axes")
plt.tight_layout()
plt.show()
Cara termudah untuk mendapatkan satu atau lebih subplot bersama dengan pegangannya adalah plt.subplots()
. Untuk satu sumbu, gunakan
fig, ax = plt.subplots()
atau, jika diperlukan lebih banyak subplot,
fig, axes = plt.subplots(nrows=3, ncols=4)
Pada pertanyaan awal sebuah sumbu ditempatkan dengan menggunakan fig.add_axes([0,0,1,1])
, sedemikian rupa sehingga sumbu tersebut menempel erat pada batas gambar. Kerugian dari hal ini tentu saja adalah bahwa kutu, ticklabel, label sumbu dan judul terpotong. Oleh karena itu saya menyarankan dalam salah satu komentar pada jawaban untuk menggunakan fig.add_subplot
karena ini akan secara otomatis memberikan ruang yang cukup untuk elemen-elemen tersebut, dan, jika ini tidak cukup, dapat disesuaikan menggunakan pyplot.subplots_adjust(...)
atau pyplot.tight_layout()
.