Chciałbym porównać dwa histogramy, ponieważ oś Y pokazuje procent każdej kolumny z ogólnego rozmiaru zbioru danych zamiast wartości bezwzględnej. Czy to jest możliwe? Używam Pand i matplotlib. DziękiCzy istnieje parametr w matplotlib/pandas, który ma oś Y histogramu w procentach?
Odpowiedz
W normed=True
Zwraca histogram dla których np.sum(pdf * np.diff(bins))
równa 1. Jeśli chcesz sumę histogramu być 1 można użyć histogramu NumPy użytkownika() i normalizacji wyników siebie.
x = np.random.randn(30)
fig, ax = plt.subplots(1,2, figsize=(10,4))
ax[0].hist(x, normed=True, color='grey')
hist, bins = np.histogram(x)
ax[1].bar(bins[:-1], hist.astype(np.float32)/hist.sum(), width=(bins[1]-bins[0]), color='grey')
ax[0].set_title('normed=True')
ax[1].set_title('hist = hist/hist.sum()')
Btw: Strange kreślenia usterki w pierwszym pojemniku z lewej działki.
Świetnie, dzięki! – d1337
Niesamowite (i taki dobry przykład, jak korzystać z subfigures) – grasshopper
Czy mógłbyś wyjaśnić, dlaczego pandy zachowują się w ten sposób? Jestem trochę zdezorientowany. Myślę, że większość ludzi wybierałaby sumę = 1 sposób. – cqcn1991
Wykreślanie pand można zaakceptować wszelkie dodatkowe argumenty słów kluczowych z odpowiedniej funkcji matplotlib. Tak pod względem kompletności z uwagami innych tutaj, to jak można by to zrobić:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(100,2), columns=list('AB'))
df.hist(normed=1)
również do bezpośredniego porównania może to być dobry sposób, a także:
df.plot(kind='hist', normed=1, bins=20, stacked=False, alpha=.5)
wygląda @ CarstenKönig found the right way:
df.hist(bins=20, weights=np.ones_like(df[df.columns[0]]) * 100./len(df))
można uprościć ważenia przy użyciu np.ones_like():
df["ColumnName"].plot.hist(weights = np.ones_like(df.index)/len(df.index))
- np.ones_like() jest w porządku ze strukturą df.index
- len (df.index) jest szybsza dla dużych DataFrames
- 1. Wykonaj oś skali dotplot, jak dla histogramu
- 2. uzyskać maksymalną wartość y histogramu
- 3. Oś Y w pasku słupkowym MATLAB jest ukryta
- 4. Jak utworzyć element, który ma parametr out w F #
- 5. Nakładanie oś y etykieta kleszcz i oś x etykieta kleszcz w matplotlib
- 6. Wyświetl oś y jako wartości procentowe?
- 7. Jak ustawić oś y w radianach na wykresie Pythona?
- 8. Czy istnieje macierz transformacji, która może skalować logarytmicznie oś X i/lub Y?
- 9. Zaktualizuj oś y wykresu obszaru szczotkowanego
- 10. Jak sprawdzić, czy istnieje parametr $ _GET, ale nie ma wartości?
- 11. PHP Array.length dla dwuwymiarowej tablicy (oś Y)
- 12. Czy można ustawić szerokość elementu w procentach?
- 13. Narzędzia wykresów Google obcinania oś y etykiet
- 14. gnuplot, przerwa oś y na dwie części
- 15. numer procentach w JavaScript
- 16. Jak wyrównać oś X na Y = 0 w R?
- 17. Jak ustawić oś Y na ustalony zakres w rikszy?
- 18. Tworzenie histogramu w Ruby
- 19. Czy można ustawić szerokość jQGrid w procentach?
- 20. Czy istnieje darmowy debuger Pythona, który ma punkty obserwacyjne?
- 21. Formatowanie w procentach
- 22. enable_if to Dodaj parametr funkcji, który ma domyślny argument?
- 23. Ukryj oś w Bokeh
- 24. x Oś i oś osi etykiety w pheatmap w R
- 25. Niejednolita oś imagesc() w Matlab
- 26. Liczby całkowite jako oś Y na wykresie liniowym morris.js
- 27. Zarys histogramu w Pythonie
- 28. Przekaż parametr typu, który ma być użyty jako argument EtykietyGeneric
- 29. Czy istnieje parametr, którego można użyć w Javie, który działa ze wszystkimi dla każdej pętli?
- 30. jak dodać osie do histogramu 3D (rgl)
Dodaj 'unormowanych = TRUE do' plt .hist() '. –
Dzięki! z jakiegoś powodu ta opcja nie jest udokumentowana na http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.hist.html#pandas.DataFrame.hist. Otrzymuję jednak wartości na osi Y równe i większe niż 1 (np. 1,4). Masz pomysł, jak to możliwe? Moją intuicją było to, że po znormalizowaniu wartości powinny wynosić od 0 do 1. – d1337
Po drugie ten problem! – robertevansanders