Bagaimana cara mendapatkan beberapa subplot di matplotlib?

156

Saya sedikit bingung tentang cara kerja kode ini:

fig, axes = plt.subplots(nrows=2, ncols=2)
plt.show()

Bagaimana cara kerja sumbu, sumbu dalam kasus ini? Apa fungsinya?

Juga mengapa ini tidak berfungsi untuk melakukan hal yang sama:

fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)
bugyb
sumber
1
Pada matplotlib 2.1 kode kedua berfungsi .
Fermi paradox

Jawaban:

210

Ada beberapa cara untuk melakukannya. The subplotsMetode menciptakan sosok bersama dengan subplot yang kemudian disimpan dalam axarray yang. Sebagai contoh:

import matplotlib.pyplot as plt

x = range(10)
y = range(10)

fig, ax = plt.subplots(nrows=2, ncols=2)

for row in ax:
    for col in row:
        col.plot(x, y)

plt.show()

masukkan deskripsi gambar di sini

Namun, sesuatu seperti ini juga akan berfungsi, itu tidak begitu "bersih" karena Anda membuat gambar dengan subplot dan kemudian menambahkan di atasnya:

fig = plt.figure()

plt.subplot(2, 2, 1)
plt.plot(x, y)

plt.subplot(2, 2, 2)
plt.plot(x, y)

plt.subplot(2, 2, 3)
plt.plot(x, y)

plt.subplot(2, 2, 4)
plt.plot(x, y)

plt.show()

masukkan deskripsi gambar di sini

ImportanceOfBeingErnest
sumber
4
Alih-alih, plot(x, y)saya memiliki plot yang berasal dari fungsi yang ditentukan pengguna, yang membuat grafik dengan networkx. Bagaimana cara menggunakannya?
Sigur
Apakah mungkin untuk membuat banyak subplot tanpa for-loop? Misalnya beberapa solusi vektor untuk memplot banyak kolom data pada plot terpisah? Ini sangat sederhana dengan ggplot di R, tetapi tampaknya mustahil dengan Python.
user2739472
3
Anda dapat mengurangi dua untuk loop menjadi satu axn = ax.flatten()dan kemudian for axes in axn: axes.plot(x,y)
berjalanlah
@ wander95 TERIMA KASIH jawaban ini tidak berfungsi untuk col = 1 atau baris = 1 tanpamu
Gulzar
48
import matplotlib.pyplot as plt

fig, ax = plt.subplots(2, 2)

ax[0, 0].plot(range(10), 'r') #row=0, col=0
ax[1, 0].plot(range(10), 'b') #row=1, col=0
ax[0, 1].plot(range(10), 'g') #row=0, col=1
ax[1, 1].plot(range(10), 'k') #row=1, col=1
plt.show()

masukkan deskripsi gambar di sini

Khalil Al Hooti
sumber
1
Saya mendapatkan apa ax, tapi tidak apa fig. Apakah mereka?
Leevo
3
kapak sebenarnya adalah array numpy. ara adalah matplotlib.figure.Figurekelas di mana Anda dapat melakukan banyak manipulasi pada gambar yang diplot. misalnya, Anda dapat menambahkan colorbar ke subplot tertentu, Anda dapat mengubah warna latar belakang di belakang semua subplot. Anda dapat memodifikasi tata letak subplot ini atau menambahkan kapak kecil baru ke sana. lebih disukai Anda mungkin menginginkan satu judul utama untuk semua subplot yang dapat diperoleh melalui fig.suptitle(title)metode. akhirnya setelah Anda puas dengan plotnya, Anda dapat menyimpannya menggunakan fig.savefigmetode. @Leevo
Khalil Al Hooti
21
  • Anda juga dapat membongkar sumbu pada panggilan subplot

  • Dan atur apakah Anda ingin berbagi sumbu x dan y di antara subplot

Seperti ini:

import matplotlib.pyplot as plt
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2, sharex=True, sharey=True)
ax1.plot(range(10), 'r')
ax2.plot(range(10), 'b')
ax3.plot(range(10), 'g')
ax4.plot(range(10), 'k')
plt.show()

masukkan deskripsi gambar di sini

Colin Anthony
sumber
14

Anda mungkin tertarik pada fakta bahwa pada matplotlib versi 2.1 kode kedua dari pertanyaan berfungsi dengan baik juga.

Dari log perubahan :

Kelas Gambar sekarang memiliki metode subplot Kelas Gambar sekarang memiliki metode subplot () yang berperilaku sama dengan pyplot.subplots () tetapi pada gambar yang ada.

Contoh:

import matplotlib.pyplot as plt

fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)

plt.show()
ImportanceOfBeingErnest
sumber
Saya mendapatkan: AttributeError Traceback (panggilan terakhir terakhir) <ipython-input-168-ed25aa5255fa> dalam <module> () 2 3 fig = plt.figure () ----> 4 sumbu = fig.subplots (nrows = 2 , ncols = 2) AttributeError: objek 'Gambar' tidak memiliki atribut 'subplot'
Ludo Schmidt
1
@LudoSchmidt Jawabannya mengatakan "pada matplotlib versi 2.1 ..."
ImportanceOfBeingErnest
11

baca dokumentasi: matplotlib.pyplot.subplots

pyplot.subplots()mengembalikan tuple fig, axyang dibongkar dalam dua variabel menggunakan notasi

fig, axes = plt.subplots(nrows=2, ncols=2)

Kode

fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)

tidak berfungsi karena subplots()merupakan fungsi pyplotbukan anggota objek Figure.

Diziet Asahi
sumber