2017-08-09 50 views
-1

正如標題所提到的,我正在嘗試創建4個matplotlib子圖,並且在每個子圖中我想繪製一個由我的數據框中的列調色的KDE圖。我已經找到一種方法來「種」這樣做,這是代碼:Seaborn - 具有色調的KDE子圖

ScoreDiffMinus1 = ScoreMovements.loc[ScoreMovements['ScoreDifference'] == -1] 
ScoreDiffMinus2 = ScoreMovements.loc[ScoreMovements['ScoreDifference'] == -2] 
ScoreDiffMinus3 = ScoreMovements.loc[ScoreMovements['ScoreDifference'] == -3] 
ScoreDiffMinus4 = ScoreMovements.loc[ScoreMovements['ScoreDifference'] == -4] 

fg, ax = plt.subplots(2,2, figsize = (20,12.5), sharex=True, sharey=True) 

Face1 = sns.FacetGrid(ScoreDiffMinus1, hue="Product") 
G1 = Face1.map(sns.kdeplot, 'DateDifference', ax = ax[0,0]) 

Face2 = sns.FacetGrid(ScoreDiffMinus2, hue="Product") 
G2 = Face2.map(sns.kdeplot, 'DateDifference', ax = ax[0,1]) 

Face3 = sns.FacetGrid(ScoreDiffMinus3, hue="Product") 
G3 = Face3.map(sns.kdeplot, 'DateDifference', ax = ax[1,0]) 

Face4 = sns.FacetGrid(ScoreDiffMinus4, hue="Product") 
G4 = Face4.map(sns.kdeplot, 'DateDifference', ax = ax[1,1]) 

這種方法的問題是,我同時運行一個FacetGrid和Matplotlib次要情節,這意味着我有4個圖表和下面我有4個來自FacetGrid的空圖表。這也意味着我不能像設置簡單的KDE圖一樣設置xlabels,titles等。

有沒有更好的方法來做到這一點?我覺得我錯過了一些顯而易見的事情,但上面的方法並不適合我。

感謝

+0

你需要選擇你想要做的事情,道:你想使用matplotlib次要情節或者你要使用facetgrid。 – mwaskom

回答

0

怎麼樣以下

import matplotlib.pyplot as plt 
import pandas as pd 
import numpy as np 
import seaborn as sns 

p = np.random.choice(["Fan", "Table", "Ball"], size=100) 
sd = np.random.randint(-4,0,size=100) 
dd = np.random.randint(0,40,size=100) 
df = pd.DataFrame({'ScoreDifference': sd , 
        'DateDifference': dd , 
        "Product": p}) 



grid = sns.FacetGrid(df, col='ScoreDifference', hue="Product", col_order=range(-4,0)[::-1]) 
grid.map(sns.kdeplot, 'DateDifference') 
grid.add_legend() 

plt.show() 

enter image description here

+0

工作完美,非常感謝! – rubs90