J'ai créé un tracé d'histogramme en utilisant les données d'un fichier et aucun problème. Maintenant, je voulais superposer les données d'un autre fichier dans le même histogramme, donc je fais quelque chose comme ça
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 apparaît, et l'autre est masquée. Je me demande comment pourrais-je tracer les deux histogrammes en même temps avec des couleurs différentes.
python
matplotlib
plot
histogram
Ouvrez la voie
la source
la source
pyplot.hold(True)
avant de comploter, juste au cas où?None
par défaut. Si vous souhaitez la même conception que celle illustrée dans le graphique, vous pouvez définir leedgecolor
paramètre dans les deux par exemple surk
(noir). La procédure est similaire pour la légende.pyplot.hist([x, y], bins, alpha=0.5, label=['x', 'y'])
.Les réponses acceptées donnent le code d'un histogramme avec des barres qui se chevauchent, mais si vous voulez que chaque barre soit côte à côte (comme je l'ai fait), essayez la variante ci-dessous:
Référence: http://matplotlib.org/examples/statistics/histogram_demo_multihist.html
EDIT [16/03/2018]: mis à jour pour permettre le traçage de tableaux de différentes tailles, comme suggéré par @stochastic_zeitgeist
la source
plt.hist
pour produire un fichier pdf pour chaque histogramme? J'ai chargé mes données en utilisantpandas.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())
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 tailles d'échantillon différentes, il peut être difficile de comparer les distributions avec un seul axe y. 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, effacer l'axe, puis les re-tracer sur deux axes distincts (en déplaçant les bords du bac pour qu'ils ne se chevauchent pas):
la source
Pour compléter la réponse de Gustavo Bezerra :
Si vous voulez que chaque histogramme soit normalisé (
normed
pour mpl <= 2.1 etdensity
pour mpl> = 3.1 ) que vous ne pouvez pas simplement utilisernormed/density=True
, vous devez définir les poids pour chaque valeur à la place:À titre de comparaison, les mêmes
x
ety
vecteurs avec des poids par défaut etdensity=True
:la source
Vous devez utiliser
bins
les valeurs renvoyées parhist
:la source
Voici une méthode simple pour tracer deux histogrammes, avec leurs barres côte à côte, sur le même tracé lorsque les données ont des tailles différentes:
la source
Il semble que vous souhaitiez simplement un graphique à barres:
Vous pouvez également utiliser des sous-tracés.
la source
Juste au cas où vous auriez des pandas (
import pandas as pd
) ou êtes d'accord pour l'utiliser:la source
Il y a une mise en garde lorsque vous souhaitez tracer l'histogramme à partir d'un tableau numpy 2D. Vous devez échanger les 2 axes.
la source
Cette question a déjà reçu une réponse, mais voulait ajouter une autre solution rapide / facile qui pourrait aider d'autres visiteurs à cette question.
Quelques exemples utiles sont ici pour la comparaison kde vs histogramme.
la source
Inspiré par la réponse de Salomon, mais pour s'en tenir à la question, qui est liée à l'histogramme, une solution propre est:
Assurez-vous de tracer le plus grand en premier, sinon vous devrez définir plt.ylim (0,0.45) afin que l'histogramme plus grand ne soit pas coupé.
la source
Également une option assez similaire à la réponse de joaquin:
Donne la sortie suivante:
la source