Anda dapat membuat subplot besar yang mencakup dua subplot dan kemudian mengatur label umum.
import random
import matplotlib.pyplot as plt
x = range(1, 101)
y1 = [random.randint(1, 100) for _ in xrange(len(x))]
y2 = [random.randint(1, 100) for _ in xrange(len(x))]
fig = plt.figure()
ax = fig.add_subplot(111) # The big subplot
ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212)
# Turn off axis lines and ticks of the big subplot
ax.spines['top'].set_color('none')
ax.spines['bottom'].set_color('none')
ax.spines['left'].set_color('none')
ax.spines['right'].set_color('none')
ax.tick_params(labelcolor='w', top=False, bottom=False, left=False, right=False)
ax1.loglog(x, y1)
ax2.loglog(x, y2)
# Set common labels
ax.set_xlabel('common xlabel')
ax.set_ylabel('common ylabel')
ax1.set_title('ax1 title')
ax2.set_title('ax2 title')
plt.savefig('common_labels.png', dpi=300)
Cara lain menggunakan fig.text () untuk mengatur lokasi label umum secara langsung.
import random
import matplotlib.pyplot as plt
x = range(1, 101)
y1 = [random.randint(1, 100) for _ in xrange(len(x))]
y2 = [random.randint(1, 100) for _ in xrange(len(x))]
fig = plt.figure()
ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212)
ax1.loglog(x, y1)
ax2.loglog(x, y2)
# Set common labels
fig.text(0.5, 0.04, 'common xlabel', ha='center', va='center')
fig.text(0.06, 0.5, 'common ylabel', ha='center', va='center', rotation='vertical')
ax1.set_title('ax1 title')
ax2.set_title('ax2 title')
plt.savefig('common_labels_text.png', dpi=300)
ax
harus dibuat sebelumax1
danax2
, jika tidak, plot besar akan menutupi plot kecil.Satu cara sederhana menggunakan
subplots
:sumber
'off'
keFalse
dengan versi yang lebih baru dari Matplotlib (Saya punya 2.2.2)for ax in axes: ax.plot(x, y)
sepertinya tidak ada gunanya.Jawaban Wen-wei Liao baik jika Anda tidak mencoba untuk mengekspor grafis vektor atau bahwa Anda telah mengatur backend matplotlib Anda untuk mengabaikan sumbu berwarna; jika tidak, sumbu tersembunyi akan muncul dalam grafik yang diekspor.
Jawaban saya di
suplabel
sini mirip denganfig.suptitle
yang menggunakanfig.text
fungsi. Oleh karena itu tidak ada artis kapak yang dibuat dan dibuat tidak berwarna. Namun, jika Anda mencoba menyebutnya beberapa kali, Anda akan mendapatkan teks yang ditambahkan di atas satu sama lain (sepertifig.suptitle
halnya juga). Jawaban Wen-wei Liao tidak, karenafig.add_subplot(111)
akan mengembalikan objek Axes yang sama jika sudah dibuat.Fungsi saya juga bisa dipanggil setelah plot dibuat.
sumber
Berikut adalah solusi di mana Anda mengatur ylabel dari salah satu plot dan menyesuaikan posisi sehingga terpusat secara vertikal. Dengan cara ini Anda menghindari masalah yang disebutkan oleh KYC.
sumber
plt.setp()
akan melakukan pekerjaan:sumber
sumber
Metode dalam jawaban lain tidak akan berfungsi dengan baik ketika yticks berukuran besar. Ylabel akan tumpang tindih dengan kutu, terpotong di sebelah kiri atau benar-benar tidak terlihat / di luar gambar.
Saya telah memodifikasi jawaban Hagne sehingga berfungsi dengan lebih dari 1 kolom subplot, untuk xlabel dan ylabel, dan ini menggeser plot untuk menjaga agar ylabel tetap terlihat dalam gambar.
Ini berfungsi untuk contoh berikut, sementara jawaban Hagne tidak akan menarik ylabel (karena di luar kanvas) dan ylabel KYC tumpang tindih dengan label centang:
Atau, jika Anda baik-baik saja dengan sumbu tidak berwarna, saya telah memodifikasi solusi Julian Chen sehingga ylabel tidak akan tumpang tindih dengan label centang.
Pada dasarnya, kita hanya perlu mengatur ylims dari yang tidak berwarna sehingga cocok dengan ylims terbesar dari subplot sehingga label centang yang tidak berwarna menentukan lokasi yang benar untuk ylabel.
Sekali lagi, kita harus memperkecil plot untuk mencegah kliping. Di sini saya telah mengkodekan jumlah yang menyusut, tetapi Anda dapat bermain-main untuk menemukan nomor yang cocok untuk Anda atau menghitungnya seperti pada metode di atas.
sumber