Merencanakan dengan seaborn menggunakan antarmuka berorientasi objek matplotlib

103

Saya sangat suka menggunakan matplotlibdalam gaya OOP:

f, axarr = plt.subplots(2, sharex=True)
axarr[0].plot(...)
axarr[1].plot(...)

Ini membuatnya lebih mudah untuk melacak beberapa gambar dan subplot.

Pertanyaan: Bagaimana cara menggunakan seaborn dengan cara ini? Atau, bagaimana cara mengubah contoh ini menjadi gaya OOP? Bagaimana cara mengetahui seabornfungsi plot seperti lmplotyang mana Figureatau Axesitu plot?

Api Beku
sumber
1
Terkait: Masalah ini dan jawaban ini untuk solusi yang mungkin, yang akan memungkinkan untuk membuat gambar dasar laut dan memindahkan semua sumbu ke kisi subplot nanti.
ImportanceOfBeingErnest

Jawaban:

229

Itu sedikit tergantung pada fungsi dasar laut yang Anda gunakan.

Fungsi plotting di seaborn secara luas dibagi menjadi dua kelas

  • "Axes-level" fungsi, termasuk regplot, boxplot, kdeplot, dan banyak lainnya
  • "Gambar-level" fungsi, termasuk lmplot, factorplot, jointplotdan satu atau dua orang lain

Grup pertama diidentifikasi dengan mengambil axargumen eksplisit dan mengembalikan Axesobjek. Seperti yang disarankan, Anda dapat menggunakannya dalam gaya "berorientasi objek" dengan meneruskannya Axeskepada mereka:

f, (ax1, ax2) = plt.subplots(2)
sns.regplot(x, y, ax=ax1)
sns.kdeplot(x, ax=ax2)

Fungsi tingkat sumbu hanya akan menggambar ke Axesdan tidak akan mengacaukan gambar, sehingga mereka dapat hidup berdampingan dengan bahagia dalam skrip matplotlib berorientasi objek.

Fungsi kelompok kedua (Tingkat gambar) dibedakan oleh fakta bahwa plot yang dihasilkan berpotensi mencakup beberapa Sumbu yang selalu diatur dengan cara yang "bermakna". Itu berarti bahwa fungsi harus memiliki kontrol penuh atas gambar tersebut, jadi tidak mungkin untuk merencanakan, katakanlah, lmplotke salah satu yang sudah ada. Memanggil fungsi selalu menginisialisasi gambar dan menyiapkannya untuk plot spesifik yang digambarnya.

Namun, setelah Anda menelepon lmplot, itu akan mengembalikan objek tipe FacetGrid. Objek ini memiliki beberapa metode operasi pada plot yang dihasilkan yang mengetahui sedikit tentang struktur plot. Ini juga mengekspos gambar yang mendasari dan array sumbu di FacetGrid.figdan FacetGrid.axesargumen. The jointplotFungsi ini sangat mirip, tetapi menggunakan JointGridobjek. Jadi Anda masih dapat menggunakan fungsi-fungsi ini dalam konteks berorientasi objek, tetapi semua penyesuaian Anda harus dilakukan setelah Anda memanggil fungsi tersebut.

mwaskom.dll
sumber
Ini sangat membantu. Lihat jawaban saya di sini: stackoverflow.com/questions/27019079/…
denson