Ich habe ein Histogramm mit Daten aus einer Datei erstellt und kein Problem. Jetzt wollte ich Daten aus einer anderen Datei im selben Histogramm überlagern, also mache ich so etwas
n,bins,patchs = ax.hist(mydata1,100)
n,bins,patchs = ax.hist(mydata2,100)
Das Problem ist jedoch, dass für jedes Intervall nur der Balken mit dem höchsten Wert angezeigt wird und der andere ausgeblendet wird. Ich frage mich, wie ich beide Histogramme gleichzeitig mit unterschiedlichen Farben zeichnen könnte.
python
matplotlib
plot
histogram
Mach den Weg frei
quelle
quelle
pyplot.hold(True)
vor dem Plotten zu setzen , nur für den Fall?None
standardmäßig der Fall . Wenn Sie das gleiche Design wie in der Grafik sehen möchten, können Sie denedgecolor
Parameter in beiden beispielsweise aufk
(schwarz) setzen. Die Vorgehensweise ist für die Legende ähnlich.pyplot.hist([x, y], bins, alpha=0.5, label=['x', 'y'])
.Die akzeptierten Antworten geben den Code für ein Histogramm mit überlappenden Balken an. Wenn Sie jedoch möchten, dass jeder Balken nebeneinander liegt (wie ich), versuchen Sie die folgende Variation:
Referenz: http://matplotlib.org/examples/statistics/histogram_demo_multihist.html
BEARBEITEN [2018/03/16]: Aktualisiert, um das Zeichnen von Arrays unterschiedlicher Größe zu ermöglichen, wie von @stochastic_zeitgeist vorgeschlagen
quelle
plt.hist
eine PDF-Datei für jedes Histogramm erstellt? Ich habe meine Daten mit geladenpandas.read_csv
und die Datei hat 36 Spalten und 100 Zeilen. Ich möchte also 100 PDF-Dateien.x=np.array(df.a)
undy=np.array(df.b.dropna())
es endete im Grundeplt.hist([x, y], weights=[np.ones_like(x)/len(x), np.ones_like(y)/len(y)])
Wenn Sie unterschiedliche Stichprobengrößen haben, kann es schwierig sein, die Verteilungen mit einer einzelnen y-Achse zu vergleichen. Beispielsweise:
In diesem Fall können Sie Ihre beiden Datensätze auf verschiedenen Achsen zeichnen. Zu diesem Zweck können Sie Ihre Histogrammdaten mit matplotlib abrufen, die Achse löschen und dann auf zwei separaten Achsen neu zeichnen (Verschieben der Bin-Kanten, damit sie sich nicht überlappen):
quelle
Als Ergänzung zu Gustavo Bezerras Antwort :
Wenn Sie möchten, dass jedes Histogramm normalisiert wird (
normed
für mpl <= 2.1 unddensity
für mpl> = 3.1 ), können Sie nicht nur verwendennormed/density=True
, sondern stattdessen die Gewichte für jeden Wert festlegen:Zum Vergleich die gleichen
x
undy
Vektoren mit Standardgewichten unddensity=True
:quelle
Sie sollten
bins
aus den zurückgegebenen Werten Folgendes verwendenhist
:quelle
Hier ist eine einfache Methode, um zwei Histogramme mit ihren Balken nebeneinander auf demselben Diagramm zu zeichnen, wenn die Daten unterschiedliche Größen haben:
quelle
Es hört sich so an, als ob Sie nur ein Balkendiagramm möchten:
Alternativ können Sie Unterzeichnungen verwenden.
quelle
Nur für den Fall, dass Sie pandas (
import pandas as pd
) haben oder damit einverstanden sind:quelle
Es gibt eine Einschränkung, wenn Sie das Histogramm aus einem 2D-Numpy-Array zeichnen möchten. Sie müssen die 2 Achsen tauschen.
quelle
Diese Frage wurde bereits zuvor beantwortet, wollte jedoch eine weitere schnelle und einfache Problemumgehung hinzufügen, die anderen Besuchern bei dieser Frage helfen könnte.
Einige hilfreiche Beispiele sind hier für kde vs Histogramm Vergleich.
quelle
Inspiriert von Solomons Antwort, aber um bei der Frage zu bleiben, die sich auf das Histogramm bezieht, ist eine saubere Lösung:
Stellen Sie sicher, dass Sie zuerst das größere zeichnen, da Sie sonst plt.ylim (0,0.45) einstellen müssen, damit das größere Histogramm nicht abgeschnitten wird.
quelle
Auch eine Option, die Joaquin Antwort ziemlich ähnlich ist:
Gibt die folgende Ausgabe:
quelle