簡體   English   中英

從使用`pd.Categorical`過濾的數據幀繪制Python seaborn

[英]Python seaborn plotting from dataframe that was filtered using `pd.Categorical`

我試圖從我的數據幀的一個子集中繪制一些數據,但它正在為應該被過濾掉的數據繪制空刻度。 我知道問題是我使用了pd.Categorical() ,但我需要。 我如何只繪制過濾后的數據(即只繪制a1a2 )而沒有額外的刻度? 例子:

import numpy as np
import pandas as pd
data = {'A':['a2', 'a2', 'a2', 'a1', 'a1', 'a1', 'a3', 'a3', 'a3'],
        'B': np.random.normal(0, 1, 9)}

df = pd.DataFrame(data)

df

df
Out[1]: 
    A         B
0  a2 -1.076173
1  a2 -2.574480
2  a2  0.863081
3  a1  1.411732
4  a1 -0.937692
5  a1  0.929105
6  a3 -1.071276
7  a3  0.901292
8  a3  0.740417


# Sort A using pd.categorical
df['A'] = pd.Categorical(df['A'], ['a1', 'a2', 'a3'])
df = df.sort_values(by='A')

plotdf = df.loc[df['A']!='a3']

plotdf現在應該是df一個子集......它是:

plotdf
Out[2]: 
    A         B
3  a1  1.411732
4  a1 -0.937692
5  a1  0.929105
0  a2 -1.076173
1  a2 -2.574480
2  a2  0.863081

但是當我們繪制它時,它保留了過濾掉的刻度位置:

import matplotlib.pyplot as plt
import seaborn as sns

fig, ax = plt.subplots()
sns.barplot(x='A', y='B', data=plotdf)
plt.show()

在此處輸入圖片說明

繪圖前是否需要重新指定類別? 好像有點奇怪...

這似乎是分類類型的影響,即使它們並不總是存在,它也會保留所有可能的值(請參閱print(plotdf['A'].dtype) )。

例如,運行plotdf.groupby('A').size()返回

A
a1    3
a2    3
a3    0

盡管數據框中不存在類別a3 ,但仍顯示類別a3

在任何情況下,如果您不想在繪圖上看到這個空白區域,您可以使用order=參數告訴 seaborn 繪制哪些類別:

sns.barplot(x='A', y='B', data=plotdf, order=['a1', 'a2'])

請注意,如果您想通用,可以執行order=plotdf['A'].unique()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM