Cara memperbaiki objek 'numpy.ndarray' tidak memiliki atribut 'get_figure' saat memplot subplot
Oct 06 2020
Saya telah menulis kode berikut untuk memplot 6 diagram lingkaran di subplot yang berbeda, tetapi saya mendapatkan kesalahan. Kode ini berfungsi dengan benar jika saya menggunakannya untuk memplot hanya 2 grafik, tetapi menghasilkan kesalahan lebih dari itu.
Saya memiliki 6 variabel kategori dalam kumpulan data saya, yang namanya disimpan dalam daftar cat_cols. Grafik akan diplot dari data pelatihan train.
KODE
fig, axes = plt.subplots(2, 3, figsize=(24, 10))
for i, c in enumerate(cat_cols):
train[c].value_counts()[::-1].plot(kind = 'pie', ax=axes[i], title=c, autopct='%.0f', fontsize=18)
axes[i].set_ylabel('')
plt.tight_layout()
KESALAHAN
AttributeError: 'numpy.ndarray' object has no attribute 'get_figure'
Bagaimana kita memperbaikinya?
Jawaban
3 TrentonMcKinney Oct 06 2020 at 16:37
- Masalahnya adalah
plt.subplots(2, 3, figsize=(24, 10))membuat dua grup dari 3 subplot, bukan satu grup yang terdiri dari enam subplot.
array([[<AxesSubplot:xlabel='radians'>, <AxesSubplot:xlabel='radians'>, <AxesSubplot:xlabel='radians'>],
[<AxesSubplot:xlabel='radians'>, <AxesSubplot:xlabel='radians'>, <AxesSubplot:xlabel='radians'>]], dtype=object)
- Buka kemasan semua larik subplot dari
axes, menggunakanaxes.ravel().numpy.ravel, yang mengembalikan larik yang diratakan.- Pemahaman daftar juga akan berfungsi,
axe = [sub for x in axes for sub in x]
- Tetapkan setiap plot ke salah satu subplot di
axe. - Cara mengatasi AttributeError: objek 'numpy.ndarray' tidak memiliki atribut 'get_figure' saat merencanakan subplot adalah masalah yang serupa.
import pandas as pd
import numpy as np
# sinusoidal sample data
sample_length = range(1, 6+1)
rads = np.arange(0, 2*np.pi, 0.01)
data = np.array([np.sin(t*rads) for t in sample_length])
df = pd.DataFrame(data.T, index=pd.Series(rads.tolist(), name='radians'), columns=[f'freq: {i}x' for i in sample_length])
# crate the figure and axes
fig, axes = plt.subplots(2, 3, figsize=(24, 10))
# unpack all the axes subplots
axe = axes.ravel()
# assign the plot to each subplot in axe
for i, c in enumerate(df.columns):
df[c].plot(ax=axe[i])
Kiat Pemilik Anjing yang Bermanfaat: Mengapa Penting untuk Membiarkan Anjing Anda Mengendus di Jalan