Histogram Matplotlib

Więc mam mały problem. Mam zestaw danych w scipy, który jest już w formacie histogramu, więc mam środek pojemników i liczbę zdarzeń na pojemnik. Jak mogę teraz wykres jest jako histogram. I tried just doing

bins, n=hist()
Ale nie podobało mi się to. Jakieś zalecenia?
Author: Hooked, 2011-03-16

5 answers

import matplotlib.pyplot as plt
import numpy as np

mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
hist, bins = np.histogram(x, bins=50)
width = 0.7 * (bins[1] - bins[0])
center = (bins[:-1] + bins[1:]) / 2
plt.bar(center, hist, align='center', width=width)
plt.show()

Tutaj wpisz opis obrazka

Interfejs obiektowy jest również prosty:

fig, ax = plt.subplots()
ax.bar(center, hist, align='center', width=width)
fig.savefig("1.png")

Jeśli używasz niestandardowych (niestałych) pojemników, możesz przekazać Szerokość za pomocą np.diff, przekazać szerokość do ax.bar i użyć ax.set_xticks do oznaczenia krawędzi pojemnika:

import matplotlib.pyplot as plt
import numpy as np

mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
bins = [0, 40, 60, 75, 90, 110, 125, 140, 160, 200]
hist, bins = np.histogram(x, bins=bins)
width = np.diff(bins)
center = (bins[:-1] + bins[1:]) / 2

fig, ax = plt.subplots(figsize=(8,3))
ax.bar(center, hist, align='center', width=width)
ax.set_xticks(bins)
fig.savefig("/tmp/out.png")

plt.show()

Tutaj wpisz opis obrazka

 213
Author: unutbu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-10 13:28:51

Jeśli nie chcesz barów możesz to wykreślić tak:

import numpy as np
import matplotlib.pyplot as plt

mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)

bins, edges = np.histogram(x, 50, normed=1)
left,right = edges[:-1],edges[1:]
X = np.array([left,right]).T.flatten()
Y = np.array([bins,bins]).T.flatten()

plt.plot(X,Y)
plt.show()

histogram

 18
Author: Matthias123,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-01 12:39:26

Wiem, że to nie odpowiada na twoje pytanie, ale zawsze kończę na tej stronie, gdy szukam rozwiązania matplotlib do histogramów, ponieważ prosty histogram_demo został usunięty ze strony galerii przykładowej matplotlib.

Oto rozwiązanie, które nie wymaga importowania numpy. Importuję tylko numpy, aby wygenerować dane x do wykreślenia. Opiera się na funkcji hist zamiast funkcji bar jak w odpowiedzi by @unutbu.

import numpy as np
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)

import matplotlib.pyplot as plt
plt.hist(x, bins=50)
plt.savefig('hist.png')

Tutaj wpisz opis obrazka

Zobacz również galerię matplotlib oraz przykłady matplotlib .
 9
Author: tommy.carstensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:55:10

Jeśli chcesz użyć pandas:

pandas.DataFrame({'x':hist[1][1:],'y':hist[0]}).plot(x='x',kind='bar')
 5
Author: Michael Malak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-27 07:28:07

Myślę, że to może się komuś przydać.

Funkcja histogramu Numpy, ku mojemu irytacji (chociaż doceniam, że jest ku temu dobry powód), zwraca z powrotem krawędzie każdego pojemnika, a nie wartość pojemnika. Podczas gdy ma to sens dla liczb zmiennoprzecinkowych, które mogą znajdować się w przedziale (tzn. wartość środka nie jest bardzo znacząca), nie jest to pożądane wyjście, gdy mamy do czynienia z wartościami dyskretnymi lub liczbami całkowitymi (0, 1, 2, itd.). W szczególności długość koszy powrót z np.histogram nie jest równy długości liczenia / gęstości.

Aby to obejść, użyłem np.digitalizacja w celu kwantyzacji danych wejściowych i zwrócenia dyskretnej liczby pojemników wraz z ułamkiem liczby dla każdego pojemnika. Możesz łatwo edytować, aby uzyskać liczbę całkowitą zliczeń.

def compute_PMF(data)
    import numpy as np
    from collections import Counter
    _, bins = np.histogram(data, bins='auto', range=(data.min(), data.max()), density=False)
    h = Counter(np.digitize(data,bins) - 1)
    weights = np.asarray(list(h.values())) 
    weights = weights / weights.sum()
    values = np.asarray(list(h.keys()))
    return weights, values
####

Refs:

[1] https://docs.scipy.org/doc/numpy/reference/generated/numpy.histogram.html

[2] https://docs.scipy.org/doc/numpy/reference/generated/numpy.digitize.html

 0
Author: sirgogo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-10 19:35:01