Używam matplotlib do tworzenia histogramu.
Czy istnieje sposób, aby ręcznie ustawić rozmiar pojemników w przeciwieństwie do liczby pojemników?
python
matplotlib
histogram
Sam Creamer
źródło
źródło
(data.max() - data.min()) / number_of_bins_you_want
.+ binwidth
Można zmienić, aby po prostu1
zrobić to bardziej zrozumiałe przykładem.lw = 5, color = "white"
lub podobna wstawia białe przerwy między słupkamiW przypadku N pojemników krawędzie przedziału są określane za pomocą listy wartości N + 1, gdzie pierwsze N to dolne krawędzie, a +1 to górna krawędź ostatniego przedziału.
Kod:
Zauważ, że linspace tworzy tablicę od min_edge do max_edge podzieloną na wartości N + 1 lub N bins
źródło
Myślę, że najłatwiejszym sposobem byłoby obliczenie minimum i maksimum posiadanych danych, a następnie obliczenie
L = max - min
. Następnie dzieliszL
przez żądaną szerokość pojemnika (zakładam, że to właśnie masz na myśli przez rozmiar pojemnika) i wykorzystujesz górną granicę tej wartości jako liczbę pojemników.źródło
Lubię, gdy rzeczy dzieją się automatycznie, a pojemniki mają „ładne” wartości. Poniższe wydaje się działać całkiem dobrze.
Rezultatem są pojemniki w ładnych odstępach wielkości pojemnika.
źródło
desired_bin_size=0.05
,min_boundary=0.850
,max_boundary=2.05
obliczanien_bins
stajeint(23.999999999999993)
która skutkuje 23 zamiast 24, a zatem jeden bin zbyt mało. Zaokrąglenie przed konwersją liczb całkowitych zadziałało dla mnie:n_bins = int(round((max_boundary - min_boundary) / desired_bin_size, 0)) + 1
Używam kwantyli, aby zbiorniki były jednolite i dopasowane do próbki:
źródło
np.arange(0, 1.01, 0.5)
lubnp.linspace(0, 1, 21)
. Nie ma krawędzi, ale rozumiem, że pola mają równą powierzchnię, ale inną szerokość w osi X?Miałem ten sam problem co OP (chyba!), Ale nie mogłem sprawić, by działał w sposób określony przez Lastalda. Nie wiem, czy poprawnie zinterpretowałem pytanie, ale znalazłem inne rozwiązanie (ale prawdopodobnie jest to naprawdę zły sposób).
Tak to zrobiłem:
plt.hist([1,11,21,31,41], bins=[0,10,20,30,40,50], weights=[10,1,40,33,6]);
Który to tworzy:
Tak więc pierwszy parametr w zasadzie „inicjalizuje” pojemnik - specjalnie tworzę liczbę znajdującą się między zakresem, który ustawiłem w parametrze bins.
Aby to zademonstrować, spójrz na tablicę w pierwszym parametrze ([1,11,21,31,41]) i tablicę „bins” w drugim parametrze ([0,10,20,30,40,50]) :
Następnie używam parametru „wagi”, aby zdefiniować rozmiar każdego pojemnika. To jest tablica używana dla parametru wagi: [10,1,40,33,6].
Tak więc przedział od 0 do 10 otrzymuje wartość 10, przedział od 11 do 20 ma wartość 1, przedział 21 do 30 otrzymuje wartość 40 itd.
źródło
Dla histogramu z całkowitymi wartościami x, których użyłem
Przesunięcie o 0,5 wyśrodkowuje pojemniki na wartościach na osi X.
plt.xticks
Wezwanie dodaje kleszcza dla każdej liczby całkowitej.źródło