Matplotlib-Tutorial: Histogramme

A histogram in an artful way

Dieses Kapitel des Tutorials befasst sich mit Histogrammen. Es ist schwierig eine Zeitung oder ein Magazin zu finden, in der keine Histogramme zu finden sind die etwas über die Anzahl der Raucher einer bestimmten Altergruppe oder die Anzahl der Geburten pro Jahr aussagen. Es ist eine gute Möglichkeit Fakten ohne viele Worte wiederzugeben. Auf der anderen Seite jedoch können sie auch zur Manipulation von Statistiken werden.

Was ist ein Histogramm? Eine formale Definition könnte sein: Es ist eine grafische Repräsentation einer Verteilung von numerischen Daten. Rechtecke mit der gleichen Breite haben Höhen, die den zugehörigen Frquenzen entsprechen.

Wenn wir ein Histogramm konstruieren, beginnen wir mit der Verteilung des Bereichs der möglichen x-Werte in gewöhnlich gleich große und benachbarte Intervalle oder Bins.

Wir beginnen jetzt mit einem praktischen Python-Programm. Wir erstellen ein Histogramm mit Zufalls-Zahlen:

# the next "inline" statement is only needed,
# if you are working with "ipython notebook"
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
gaussian_numbers = np.random.normal(size=10000)
plt.hist(gaussian_numbers)
plt.title("Gaussian Histogram")
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.show()
n, bins, patches = plt.hist(gaussian_numbers)
print("n: ", n, sum(n))
print("bins: ", bins)
for i in range(len(bins)-1):
    print(bins[i+1] -bins[i])
print("patches: ", patches)
print(patches[1])
n:  [    9.    58.   377.  1343.  2713.  2992.  1781.   607.   105.    15.] 10000.0
bins:  [-4.05538301 -3.26925316 -2.48312332 -1.69699347 -0.91086362 -0.12473378
  0.66139607  1.44752592  2.23365576  3.01978561  3.80591546]
0.786129846749
0.786129846749
0.786129846749
0.786129846749
0.786129846749
0.786129846749
0.786129846749
0.786129846749
0.786129846749
0.786129846749
patches:  <a list of 10 Patch objects>
Rectangle(-3.26925,0;0.78613x58)

Wir erhöhen die Anzahl der Bins. 10 Bins sind nicht viel, wenn wir von 10.000 Zufalls-Zahlen sprechen. Wir setzen dafür den Schlüsselwort-Parameter bins auf 100:

plt.hist(gaussian_numbers, bins=100)
plt.show()

Ein weiterer wichtiger Schlüsselwort-Parameter von hist ist "normed". "normed" ist ein optional und der Default-Wert ist "False". Wenn dieser auf "True" gesetzt wird, normalisiert des erste Element des Rückgabe-Tupels die Zählungen um eine höhere Wahrscheinlichkeitsdichte zu bilden, d.h., "n/(len(x)`dbin)", ie the integral of the histogram will sum to 1. ???

plt.hist(gaussian_numbers, bins=100, normed=True)
plt.show()

Wenn beide Parameter "normed" und "stacked" auf "True" gesetzt werden, so wird die Summe des Histogramms auf 1 normalisiert.

plt.hist(gaussian_numbers, 
         bins=100, 
         normed=True, 
         stacked=True, 
         edgecolor="#6A9662",
         color="#DDFFDD")
plt.show()

Okay, Sie möchten eine Darstellung von kumulierten Werten sehen? Wir können eine kumulative Verteilungs-Funktion ebenfalls ausgeben, indem wir den Paremter "cumulative" setzen.

plt.hist(gaussian_numbers, 
         bins=100, 
         normed=True,
         stacked=True,
         cumulative=True)
plt.show()



Balken

bars = plt.bar([1,2,3,4], [1,4,9,16])
bars[0].set_color('green')
plt.show()
f=plt.figure()
ax=f.add_subplot(1,1,1)
ax.bar([1,2,3,4], [1,4,9,16])
children = ax.get_children()
children[3].set_color('g')
import matplotlib.pyplot as plt
import numpy as np
years = ('2010', '2011', '2012', '2013', '2014')
visitors = (1241, 50927, 162242, 222093, 296665 / 8 * 12)
index = np.arange(len(visitors))
bar_width = 1.0
plt.bar(index, visitors, bar_width,  color="green")
plt.xticks(index + bar_width / 2, years) # labels get centered
plt.show()
In [ ]: