Saya memiliki kerangka data. Setiap sel dalam dua kolom berisi daftar. Saya ingin menggambar seaborn-relplot dengan dua kolom sebagai x dan y. Saya berlari untuk mengeluarkan

Kode saya:

xdf = pd.DataFrame({'v':[[1,2,10,20],[3,4]],'i':[[5,6,50,60],[7,8]]})
xdf['nor_iv'] = ['True','False']
print(xdf)
xdf = 
                v               i nor_iv
0  [1, 2, 10, 20]  [5, 6, 50, 60]   True
1          [3, 4]          [7, 8]  False

# Seaborn plot
hue_colors = {'True': 'red', 
              'False': 'green'}
sns.relplot(data=xdf,x="v", y="i",hue='nor_iv',
             markers=True,kind='line',
                       palette=hue_colors,height=4, aspect=1.5)
plt.show()

Hasilkan keluaran:

TypeError: unhashable type: 'list'
1
Mainland 13 Mei 2021, 03:38

1 menjawab

Jawaban Terbaik

Pertama gunakan xdf = xdf.apply(pd.Series.explode). Harap perhatikan bahwa Anda kemudian perlu mengonversi kolom yang diperlukan dari string yaitu object ke tipe data int setelah ledakan. Tiga cara untuk memvisualisasikan di bawah ini:

Jika Anda menginginkan hamparan (tanpa baris atau kolom):

import matplotlib.pyplot as plt
import seaborn as sns
xdf = pd.DataFrame({'v':[[1,2,10,20],[3,4]],'i':[[5,6,50,60],[7,8]]})
xdf['nor_iv'] = ['True','False']
xdf = xdf.apply(pd.Series.explode)
xdf['v'] = xdf['v'].astype(int)
xdf['i'] = xdf['v'].astype(int)
sns.relplot(data=xdf,x="v", y="i",hue='nor_iv',
             markers=True,kind='line',
                       palette=hue_colors,height=4, aspect=1.5)
plt.show()

enter image description here

Jika Anda menginginkan kolom, Anda dapat melakukan:

import matplotlib.pyplot as plt
import seaborn as sns
xdf = pd.DataFrame({'v':[[1,2,10,20],[3,4]],'i':[[5,6,50,60],[7,8]]})
xdf['nor_iv'] = ['True','False']
xdf = xdf.apply(pd.Series.explode)
xdf['v'] = xdf['v'].astype(int)
xdf['i'] = xdf['v'].astype(int)
sns.relplot(data=xdf,x="v", y="i",col='nor_iv', hue='nor_iv',
             markers=True,kind='line',
                       palette=hue_colors,height=4, aspect=1.5)
plt.show()

enter image description here

Dan jika Anda ingin baris, maka:

import matplotlib.pyplot as plt
import seaborn as sns
xdf = pd.DataFrame({'v':[[1,2,10,20],[3,4]],'i':[[5,6,50,60],[7,8]]})
xdf['nor_iv'] = ['True','False']
xdf = xdf.apply(pd.Series.explode)
xdf['v'] = xdf['v'].astype(int)
xdf['i'] = xdf['v'].astype(int)
sns.relplot(data=xdf,x="v", y="i",row='nor_iv', hue='nor_iv',
             markers=True,kind='line',
                       palette=hue_colors,height=4, aspect=1.5)
plt.show()

enter image description here

1
David Erickson 13 Mei 2021, 01:12