Histogrammer
4.4. Histogrammer#
For at lave et histogram med python bruger vi matplotlibs funktion plt.hist()
. Den skal egentlig bare have et datasæt, men der er mange indstillinger man kan ændre for at få det perfekte histogram frem.
Først et eksempel.
import matplotlib.pyplot as plt
import numpy as np
N = 100000
Data = np.random.normal(1,0.01,N)
plt.hist(Data)
plt.xlabel('Længde af meter linealer i meklab [m]')
plt.ylabel('Antal linealer')
plt.show()
Som sådan er dette et histogram, men det har et dårligt antal bins, da der er rigtig mange tilfælde i hver bin. Et godt gæt på antallet af bins plejer at være \(\sqrt{N}\) hvor \(N\) er antallet af målinger. Man skal dog huske at kalde int(np.sqrt(N))
, da det skal være et heltal.
plt.hist(Data, bins = int(np.sqrt(N)))
plt.xlabel('Længde af meter linealer i meklab [m]')
plt.ylabel('Antal linealer')
plt.show()
Det ser meget bedre ud. Det er også muligt at sætte specifikke bins, hvis man har noget data, man ved skal falde på nogle diskrete værdier.
Her er et eksempel på det med udgangspunkt i karakterer.
####### Tag jer ikke af dette det er blot for at lave en karakterfordeling
karakterskala = np.array([-3,0,2,4,7,10,12])
prop = np.array([0.05,0.1,0.1,0.2,0.25,0.2,0.1])
karaktere = np.random.choice(karakterskala, size = 130, p = prop)
# Herfra skal i forstå
BINS = [-3.5, -2.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 6.5, 7.5, 9.5, 10.5, 11.5, 12.5]
plt.hist(karaktere, bins= BINS) # Laver histogrammet
plt.xticks(karakterskala) # Sætter ticks på x aksen
plt.xlabel('Karakter')
plt.ylabel('Antal studerende')
plt.show()
En sidste ting man kunne være interesseret i, er at normalisere sit histogram. Dette gøres let ved keyword-argumentet (kwarg) density
. Det gør at arelet (integralet) af histogrammet bliver 1. Dette kan især være brugbart, hvis man skal lave anden statistisk analyse af sit histogram.
bins = plt.hist(Data, bins = int(np.sqrt(N)), density= True)
plt.xlabel('Længde af meter linealer i meklab [m]')
plt.ylabel('Antal linealer per ' + str(np.round(bins[1][2] - bins[1][1],5)) + 'cm' )
plt.show()