2013-08-26 4 views
6

Diciamo che ho due istogrammi e ho impostato l'opacità utilizzando il parametro di Hist: 'alpha = 0.5'Opacità fuorviante quando si stampa due istogrammi, allo stesso tempo con matplotlib

ho tracciato due istogrammi eppure io ottenere tre colori! Capisco che abbia senso dal punto di vista dell'opacità.

Ma! Rende molto confusionario mostrare a qualcuno un grafico di due cose con tre colori. Posso in qualche modo impostare la barra più piccola per ogni scomparto in modo che non abbia opacità?

Esempio grafico

enter image description here

+2

Se in realtà non si desidera avere 'alpha <1' piuttosto che capire di che colore è il colore traslucido sopra il bianco e utilizzare barre opache di quel colore. – tacaswell

+2

Dovresti includere il codice che hai usato per produrre la trama, poiché meno persone probabilmente scriveranno l'intero codice per te, piuttosto che correggere il codice esistente. – hooy

+0

Qual è il codice che hai usato per generare questo grafico? –

risposta

8

Il modo usuale questo problema viene gestito è di avere piazzole con qualche piccola separazione. Questo viene fatto per impostazione predefinita quando plt.hist viene dato più set di dati:

import pylab as plt 

x = 200 + 25*plt.randn(1000) 
y = 150 + 25*plt.randn(1000) 
n, bins, patches = plt.hist([x, y]) 

È invece che di impilare loro (questo potrebbe essere fatto al di sopra utilizzando l'argomento histtype='barstacked'), ma si noti che l'ordinamento non è corretta .

Questo può essere risolto controllando individualmente ogni coppia di punti per vedere quale è più grande e quindi usando zorder per impostare quale viene prima. Per semplicità Sto usando l'uscita del codice precedente (ad esempio n è due allineamenti impilati del numero di punti in ogni scomparto per x ed y):

n_x = n[0] 
n_y = n[1] 
for i in range(len(n[0])): 
    if n_x[i] > n_y[i]: 
     zorder=1 
    else: 
     zorder=0 
    plt.bar(bins[:-1][i], n_x[i], width=10) 
    plt.bar(bins[:-1][i], n_y[i], width=10, color="g", zorder=zorder) 

Ecco l'immagine risultante: enter image description here

Cambiando l'ordine in questo modo l'immagine sembra davvero strana, questo è probabilmente il motivo per cui non è implementato e ha bisogno di un trucco per farlo. Vorrei attenermi al piccolo metodo di separazione, chiunque sia abituato a questi diagrammi presuppone che abbiano lo stesso valore x.