Tracer les deux histogrammes en même temps avec matplotlib
J'ai créé un histogramme de la parcelle à l'aide de données provenant d'un fichier et pas de problème. Maintenant, je voulais superposer des données à partir de
d'un autre fichier dans le même histogramme, si je fais quelque chose comme
n,bins,patchs = ax.hist(mydata1,100)
n,bins,patchs = ax.hist(mydata2,100)
mais le problème est que pour chaque intervalle, seule la barre avec la valeur la plus élevée s'affiche, et l'autre est caché. Je me demande comment ai-je pu tracer les deux histogrammes dans le même temps, avec des couleurs différentes.
Vous devez vous connecter pour publier un commentaire.
Ici vous avez un exemple de travail:
pyplot.hold(True)
avant de traçage, juste au cas où?hist
None
par défaut. Si vous voulez le même design que le montre le graphique, vous pouvez définir leedgecolor
paramètre à la fois, par exemple pourk
(noir). La procédure est similaire pour la légende.Les réponses acceptées donne le code pour un histogramme avec chevauchement des barres, mais dans le cas où vous souhaitez que chaque bar à côté-à-côte (comme je l'ai fait), essayez de la variation ci-dessous:
Référence: http://matplotlib.org/examples/statistics/histogram_demo_multihist.html
MODIFIER [2018/03/16]: mise à Jour pour permettre le traçage des tableaux de tailles différentes, comme suggéré par @stochastic_zeitgeist
plt.hist
). Une solution simple serait d'utiliser @joaquin de répondre à la place. Un autre (potentiellement meilleure) solution de contournement serait de remplir les différentes tailles de tableau avecnp.nan
donc, vous pourriez fairedata
, mais même si matplotlib échoue. Il y a une attente de la demande d'extraction d'aborder la: github.com/matplotlib/matplotlib/pull/7133plt.hist([x, y], color=['g','r'], alpha=0.8, bins=50)
plt.hist
pour produire un fichier pdf pour chaque histogramme? J'ai chargé mes données à l'aidepandas.read_csv
et le fichier a 36 colonnes et 100 lignes. Je voudrais donc 100 fichiers pdf.x=np.array(df.a)
ety=np.array(df.b.dropna())
essentiellement, il a fini par êtreplt.hist([x, y], weights=[np.ones_like(x)/len(x), np.ones_like(y)/len(y)])
Dans le cas où vous avez des échantillons de tailles différentes, il peut être difficile de comparer les distributions avec un seul axe des ordonnées. Par exemple:
Dans ce cas, vous pouvez tracer vos deux ensembles de données sur des axes différents. Pour ce faire, vous pouvez obtenir vos données d'histogramme à l'aide de matplotlib, clair de l'axe, et puis re-tracer sur deux axes (déplacement de la corbeille des bords de sorte qu'ils ne se chevauchent pas):
Voici une méthode simple pour tracer les deux histogrammes, avec leurs bars côte-à-côte, sur la même parcelle lorsque les données ont différentes tailles:
Comme l'achèvement de Gustavo Bezerra de réponse:
Si vous voulez chaque histogramme normalisé (
normed
pour mpl<=2.1 etdensity
pour mpl>=3.1) vous ne pouvez pas simplement utilisernormed/density=True
, vous devez définir le poids de chaque valeur à la place:A titre de comparaison, l'exact même
x
ety
vecteurs d'un défaut de poids etdensity=True
:Il semble que vous pourriez voulez juste un graphique à barres:
Alternativement, vous pouvez utiliser des sous-intrigues.
Vous devez utiliser
bins
des valeurs retournées parhist
:Juste au cas où vous avez des pandas (
import pandas as pd
) ou sont ok avec elle à l'aide:Cette question a été répondu avant, mais je voulais ajouter une autre rapide/simple solution de contournement qui peuvent aider les autres visiteurs à cette question.
Quelques exemples utiles sont ici pour kde vs histogramme de comparaison.
Inspiré par Salomon de réponse, mais s'en tenir à la question, qui est lié à l'histogramme, une solution propre est:
Assurez-vous de tracer le plus haut d'abord, sinon vous devez définir le plt.ylim(0,0.45) de sorte que le plus grand de l'histogramme n'est pas coupé.