Stworzyłem wykres histogramu na podstawie danych z pliku i nie ma problemu. Teraz chciałem nałożyć dane z innego pliku na tym samym histogramie, więc robię coś takiego
n,bins,patchs = ax.hist(mydata1,100)
n,bins,patchs = ax.hist(mydata2,100)
ale problem polega na tym, że dla każdego przedziału pojawia się tylko pasek o najwyższej wartości, a drugi jest ukryty. Zastanawiam się, jak mogę wykreślić oba histogramy jednocześnie z różnymi kolorami.
python
matplotlib
plot
histogram
Otwórz drogę
źródło
źródło
pyplot.hold(True)
przed spiskowaniem, na wszelki wypadek?None
domyślnie. Jeśli chcesz mieć taki sam projekt, jak pokazano na wykresie, możesz ustawićedgecolor
parametr w obu na przykład nak
(czarny). Procedura jest podobna w przypadku legendy.pyplot.hist([x, y], bins, alpha=0.5, label=['x', 'y'])
.Zaakceptowane odpowiedzi zawierają kod histogramu z nakładającymi się słupkami, ale jeśli chcesz, aby każdy słupek był obok siebie (tak jak ja), wypróbuj poniższą odmianę:
Odniesienie: http://matplotlib.org/examples/statistics/histogram_demo_multihist.html
EDYCJA [2018/03/16]: Zaktualizowano, aby umożliwić drukowanie tablic o różnych rozmiarach, zgodnie z sugestią @stochastic_zeitgeist
źródło
plt.hist
aby utworzyć jeden plik pdf dla każdego histogramu? Załadowałem swoje dane,pandas.read_csv
a plik ma 36 kolumn i 100 wierszy. Więc chciałbym 100 plików pdf.x=np.array(df.a)
iy=np.array(df.b.dropna())
po prostu tak się skończyłoplt.hist([x, y], weights=[np.ones_like(x)/len(x), np.ones_like(y)/len(y)])
W przypadku różnych wielkości próby porównanie rozkładów z pojedynczą osią Y może być trudne. Na przykład:
W takim przypadku możesz wykreślić dwa zestawy danych na różnych osiach. Aby to zrobić, możesz uzyskać dane histogramu za pomocą matplotlib, wyczyścić oś, a następnie ponownie wydrukować ją na dwóch osobnych osiach (przesuwając krawędzie bin, aby się nie nakładały):
źródło
Jako uzupełnienie odpowiedzi Gustavo Bezerry :
Jeśli chcesz znormalizować każdy histogram (
normed
dla mpl <= 2.1 idensity
dla mpl> = 3.1 ) nie możesz po prostu użyćnormed/density=True
, musisz zamiast tego ustawić wagi dla każdej wartości:Dla porównania, dokładnie to samo
x
iy
wektory z domyślnymi wagami orazdensity=True
:źródło
Należy użyć
bins
wartości zwróconych przezhist
:źródło
Oto prosta metoda wykreślenia dwóch histogramów, z pasami obok siebie, na tym samym wykresie, gdy dane mają różne rozmiary:
źródło
Wygląda na to, że potrzebujesz tylko wykresu słupkowego:
Alternatywnie możesz użyć podplotów.
źródło
Na wypadek, gdybyś miał pandy (
import pandas as pd
) lub był w porządku z jego użyciem:źródło
Jest jedno zastrzeżenie, gdy chcesz wykreślić histogram z dwuwymiarowej tablicy numpy. Musisz zamienić 2 osie.
źródło
Na to pytanie już udzielono odpowiedzi, ale chciałem dodać inne szybkie / łatwe obejście, które może pomóc innym odwiedzającym to pytanie.
Kilka cennych przykładami są tutaj dla KDE vs porównaniu histogramu.
źródło
Zainspirowany odpowiedzią Salomona, ale aby pozostać przy pytaniu dotyczącym histogramu, czyste rozwiązanie to:
Pamiętaj, aby najpierw wykreślić wyższą, w przeciwnym razie musisz ustawić plt.ylim (0,0,45), aby wyższy histogram nie został odcięty.
źródło
Również opcja, która jest dość podobna do odpowiedzi Joaquin:
Daje następujące dane wyjściowe:
źródło