2014-09-19 15 views
5

Sto utilizzando Seaborn per creare il grafico in base a this example.Impostare la dimensione del tracciato del colore di sfondo sulla dimensione degli assi nella congiunzione seaborn

import numpy as np 
import pandas as pd 
import seaborn as sns 
sns.set(style="white") 

rs = np.random.RandomState(5) 
mean = [0, 0] 
cov = [(1, .5), (.5, 1)] 
x1, x2 = rs.multivariate_normal(mean, cov, 500).T 
x1 = pd.Series(x1, name="$X_1$") 
x2 = pd.Series(x2, name="$X_2$") 

g = sns.jointplot(x1, x2, kind="kde", size=7, space=0) 

Tuttavia, quando cambio l'ultima riga di codice per

g = sns.jointplot(x1, x2, kind="kde", size=7, space=0, xlim=(-5,5), ylim=(-5,5)) 

il colore di sfondo non cambia correttamente: enter image description here

Come posso risolvere il colore di sfondo in modo che riempia tutta la trama?

+1

Così il problema qui è che Seaborn è solo il calcolo del KDE fuori a -4 e 4 in entrambe le dimensioni. La vera soluzione a questo, IMO, non è di estendere il blu più pallido (KDE = 0) a limiti infiniti, ma di forzare il livello più basso di quella tavolozza di colori all'ombra di fondo degli assi. –

risposta

5

È necessario indicare la funzione sottostante (kdeplot) per estendere ulteriormente la stima KDE. Questo è realizzato attraverso l'argomento cut, che è una funzione della larghezza di banda di KDE. Il valore predefinito è 3, e non c'è un modo ovvio per dire esattamente come è necessario impostarlo, ma non dovrebbe essere così difficile da giocare e trovare valori che funzionano. Quando si utilizza jointplot, è necessario passare questo nel dizionario joint_kws in modo che venga inviato alla funzione di stampa appropriata.

sns.jointplot(x1, x2, kind="kde", size=7, space=0, 
       joint_kws={"cut": 10}, 
       xlim=(-5,5), ylim=(-5,5)) 

Voila:

enter image description here

0

Questo è molto vicino, ma non posso abbinare abbastanza il colore. Se trovi la mappa colori nel modulo cm ("cool"?) Puoi trovare il colore esatto.

ax = plt.gcf().axes[0] 
ax.set_axis_bgcolor((.93,.93,1)) 

Se si esegue questa operazione in modo interattivo, è necessario un file plt.draw() per visualizzare il nuovo spettacolo colori.

+0

Comunque, anche se penso che sia probabilmente meglio farlo quando si chiama 'jointplot' (come nella mia risposta), se sei curioso su come ottenere questo colore devi prima assegnare l'output della funzione a un variabile, chiamiamola 'g', e quindi esegui' g.ax_joint.collections [0] .get_facecolor() '. – mwaskom

Problemi correlati