2015-09-10 11 views
6

Sono in esecuzione Pandas 0.16.2 e Matplotlib 1.4.3. Ho questo problema colorare il mediano del grafico a scatole generato dal seguente codice:panda - problemi di impostazione del colore mediano boxplot

df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E']) 

fig, ax = plt.subplots() 

medianprops = dict(linestyle='-', linewidth=2, color='blue') 

bp = df.boxplot(medianprops=medianprops) 

plt.show() 

che restituisce:

enter image description here

Sembra che l'impostazione color non viene letto. Cambiando solo le impostazioni di linestyle e linewidth il plot reagisce correttamente.

medianprops = dict(linestyle='-.', linewidth=5, color='blue') 

enter image description here

Chiunque può riprodurlo?

risposta

0

In realtà la seguente soluzione funziona bene, restituendo un dict dal comando boxplot:

df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E']) 

fig, ax = plt.subplots() 

bp = df.boxplot(return_type='dict') 

e quindi assegnare direttamente colori e larghezza di riga alle medie con:

[[item.set_color('r') for item in bp[key]['medians']] for key in bp.keys()] 
[[item.set_linewidth(0.8) for item in bp[key]['medians']] for key in bp.keys()] 
5

Guardando il codice per DataFrame.boxplot() c'è qualche codice speciale per gestire i colori dei diversi elementi che sostituisce il kws passato al di boxplot matplotlib. In teoria, sembra che ci sia un modo per passare un argomento color= contenente un dizionario con chiavi pari a 'boxes', 'whiskers', 'medians', 'caps' ma non riesco a farlo funzionare correttamente quando si chiama boxplot().

Tuttavia, questo sembra funzionare:

df.plot(kind='box', color={'medians': 'blue'}, 
     medianprops={'linestyle': '--', 'linewidth': 5}) 

vedere Pandas Boxplot Examples

+1

Grazie, ma per i miei scopi nel tracciare un dataframe multindex ho bisogno della funzione boxplot (con colonna 'by') invece della versione kind = 'box'. –

+0

In realtà usando [questo] (http://stackoverflow.com/a/28103385/2699288) rispondi funziona! –

+0

Non funziona più con pd 0.22 :( –

Problemi correlati