2016-01-18 5 views
0

Deux histogrammes peuvent être comparés en créant un tracé qui présente à la fois une superposition des histogrammes (éventuellement normalisés) et un graphique des histogrammes. Voici un tel complot:À l'aide de matplotlib, comment comparer les histogrammes en les superposant et en montrant leur tracé de rapport?

Comment un terrain comme celui-ci soit faite en utilisant matplotlib?

+0

première partie est relativement facile. Vous pouvez dessiner des histogrammes transparents en définissant 'alpha' sur moins de 1 et fournir des tailles de bac prédéfinies. Pourriez-vous expliquer ce que l'intrigue inférieure est censée montrer exactement? Vous devrez probablement le faire manuellement. – kazemakase

Répondre

1

Je ne vois pas ce que sont les points, mais voici un exemple simple des ratios. L'astuce principale consiste à réutiliser les valeurs bin que renvoie hist.

enter image description here

import matplotlib.pyplot as plt 
from numpy.random import normal 

y = [] 
y.append(normal(2, 2, size=120)) 
y.append(normal(2, 2, size=120)) 

fig, (ax1, ax2) = plt.subplots(nrows=2) 

ns, bins, patches = ax1.hist(y, normed=False, 
         histtype='stepfilled', 
         bins=8, 
         alpha=0.2, 
         label=['a','b'] 
        ) 
ax1.legend() 

ax2.bar(bins[:-1],  # this is what makes it comparable 
     ns[0]/ns[1], # maybe check for div-by-zero! 
     alpha=0.4) 

ax1.set_ylabel('Data') 
ax2.set_ylabel('Ratio (a/b)') 
+0

Hé là. Merci pour votre solution. Comment la largeur des bacs peut-elle être cohérente? J'ai remarqué que les choses commencent à sembler un peu étranges avec des statistiques plus basses ou plus élevées. (En passant, les points de mon graphique ne sont que les valeurs du ratio.La zone ombrée est l'incertitude statistique.) – d3pd

+0

"Comment la largeur des bacs peut-elle être rendue cohérente?" - vous pouvez contrôler la largeur de la cases dans l'appel à 'bar': http://matplotlib.org/api/pyplot_api.html?highlight=bar#matplotlib.pyplot.bar – cphlewis