Plotting/Graftegning

Vi kan plotte/tegne grafer i Python for å lage programmer som gir grafiske framstillinger.

For å plotte i Python, trenger vi å importere biblioteket matplotlib.pyplot, og det gjør vi slik:

from matplotlib.pyplot import *

Her er en oversikt over noen av de vanligste funksjonene:

Kommando Beskrivelse

plot(x, y) Plotter verdiene i x og y mot hverandre med strek mellom hvert punkt

scatter(x, y) Plotter verdiene i x og y mot hverandre uten strek mellom hvert punkt

bar(x, y) Plotter verdiene i x og y mot hverandre som søylediagram

color='fargenavn' Angir farge, og skrives inn i plot()  eller scatter() (kan bruke nesten alle engelske fargenavn)​

label='merknad' Angir navn på elementene i grafen, og skrives inn i plot(), scatter() eller bar()

title('Tittel')​ Setter inn tittelen på grafen øverst i vinduet (skriv tittelen i parentesen)​

xlabel('Aksenavn')​ Setter inn navn på x-aksen (skriv aksenavnet i parentesen)​

ylabel('Aksenavn') Setter inn navn på y-aksen (skriv aksenavnet i parentesen)​

xlim(a, b) Gir a som nedre og b som øvre grense for x-aksen​

ylim(a, b) Gir a som nedre og b som øvre grense for y-aksen​

grid()​ Tegner rutenett​ (trenger ikke skrive noe i parentesen)

axvline()​ Lager vertikal linje x = 0

axvline(a) Lager vertikal linje x = a

axhline() Lager horisontal linje y = 0

axhline(b) Lager horisontal linje y = b

show() Viser grafen​, må være med til slutt (trenger ikke skrive noe i parentesen)

Tegning av grafer

Vi ser først på et eksempel der vi plotter funksjonen f(x) = x2 for noen verdier av x. Det kan være du må trykke på "Run"-knappen to ganger for å se grafen.

Merk at listene x og y har like mange elementer - det er viktig, for ellers kan de ikke plottes mot hverandre!

Her er et nytt plott med flere detaljer, der vi bruker flere av funksjonene i tabellen over:

Litt om arrayer

Vi kan også bruke arrayer i plotting. En array er på mange måter lik ei liste, men det er noen vesentlige forskjeller. Det er for eksempel enklere å endre alle verdiene i en array enn i ei liste, så arrayer passer ofte bedre når vi skal tegne grafer til funksjoner.

Vi bruker en funksjon som kalles linspace() fra biblioteket  numpy når vi jobber med arrayer. Hvis vi skriver

from numpy import *

x = linspace(a, b, n)

vil vi lage en array x, som er en array med n elementer fra og med a til og med b.

Her plotter vi andregradsfunksjonen igjen, men med en glattere kurve:

Plotting og sannsynlighet

Graftegning er en god måte å visualisere tilfeldige simuleringer. Det kan for eksempel brukes til å gi et bilde av "De store talls lov", altså det at jo flere tilfeller man har av en hendelse, jo nærmere vil man komme det forventede resultatet. 

Nå skal vi lage et program som simulerer terningkast med én terning og viser fordelingen på antall øyne i et søylediagram:

Oppgave: Søylediagramutvidelse

Ta utgangspunkt i koden over og lag et program som kaster to terninger, og lagrer summen av øynene i ei liste. Til slutt skal programmet lage et søylediagram som viser hvor mange ganger vi fikk hver sum.

Løsningsforslag

Utfordring: Hvordan ville du utvidet dette til sum av tre eller flere terninger?

Monty Hall-reprise

Vi kan også framstille Monty Hall-problemet grafisk. Vi vet at det er forventet at vi skal vinne 2/3 av gangene. Nå skal vi utvide simuleringa vår til å lage et program som for hver runde lagrer "vinnerandelen" (antall gunstige utfall i gang nummer x, delt på x), og så til slutt plotter dette mot forventningsverdien:

Ferdig program

Oppgave: Myntkast

Skriv et program som simulerer myntkast, og plotter andel av kastene vi fikk kron på. Du kan hente inspirasjon fra Monty Hall-programmet over.

Startkode

Løsningsforslag