Tegne grafer med pyplot
Innledning
Vi skal bruke programmeringsspråket Python til å tegne grafen til funksjonen
for x-verdier mellom og 6.
Graftegning med modulen pyplot
Akkurat som når vi skal tegne en funksjon på papiret, trenger vi en ferdig utfylt verditabell med x-verdier og funksjonsverdier. Verditabellen til funksjonen f ser slik ut:
x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | ||
|---|---|---|---|---|---|---|---|---|---|
12 | 5 | 0 | 0 | 5 | 12 |
I Python tegner vi grafer med funksjonen plot(), som vi henter fra modulen matplotlib.pyplot. Funksjonen skal ha to argumenter. Det første argumentet skal være ei liste eller en numpy-tabell med x-verdiene fra verditabellen. Det andre argumentet skal være ei liste eller en numpy-tabell med de tilhørende funksjonsverdiene.
Lista med x-verdiene lager vi med funksjonen linspace(). Lista med funksjonsverdiene lager vi så direkte ut ifra lista med x-verdier. Deretter bruker vi kommandoen plot() til å lage grafen. Til slutt må vi bruke kommandoen show() for å sende den grafiske framstillingen til skjermen.
Oppgave – algoritme
Prøv ut ifra opplysningene ovenfor å skrive en algoritme til et program som skal tegne funksjonen f for oss.
Pythonprogrammet nedenfor fungerer etter algoritmen over. (NB: Det kan ta litt tid fra du trykker på avspillingsknappen til programmet blir kjørt.) Alternativt kan du kopiere koden inn i din egen programmeringseditor. Får du fram grafen til funksjonen? Legg merke til at tegnet hashtag (#) gjør at vi inne i programkoden kan legge inn tekst som blir ignorert og som derfor kan brukes til å legge til kommentarer i koden.
Forklaring til programkoden
Importering av tilleggsmoduler eller tilleggsbibliotek til Python
I linje 2 og 3 har vi importert modulen pyplot fra biblioteket matplotlib og modulen numpy. Det er fordi funksjonene vi bruker ikke finnes i standard Python. Vi har gitt modulene aliasene eller navnene plt og np for å slippe å skrive så mye lenger ned i koden.
Funksjonen linspace()
I linje 6 bruker vi funksjonen linspace(). Funksjonen linspace() finnes ikke i standard Python, men ligger innunder modulen numpy. Da må vi skrive np. foran for å markere hvor funksjonen kommer fra.
Variabelen x er derfor en numpy-tabell med 9 tall der det minste er . Funksjonen linspace() fordeler de 9 tallene jevnt i intervallet fra og med til og med 6. Tallene øker derfor jevnt med 1 fra helt opp til det største tallet, 6.
Tabellen f_av_x med funksjonsverdier
Siden variabelen x er en numpy-tabell, vil også variabelen f_av_x være det fordi f_av_x er definert ut ifra x i linje 7. Heldigvis kan vi lage tabellen f_av_x ved å sette lista x rett inn i funksjonen, slik linje 7 viser. Siden det første tallet i x er , vil det første tallet i f_av_x være
Spørsmål – koding
Hva er det siste tallet i lista f_av_x?
Funksjonen plot() – tegning av grafer
Kommandoen plt.plot(x, f_av_x) lager den grafiske framstillingen ved å tegne ei rett linje mellom punktene av samhørende verdier av x og f_av_x. Til slutt trenger vi kommandoen plt.show() for å få den grafiske framstillingen ut fra minnet til datamaskinen og over til skjermen. Begge disse funksjonene må vi skrive plt. foran for å informere om at de kommer fra modulen pyplot i biblioteket matplotlib.
Tegning av punkt
Vi har fra verditabellen til funksjonen ovenfor at
- nullpunktene er og
- bunnpunktet har koordinatene (2, –4)
Vi kan tegne nullpunktene og bunnpunktet (sammen med grafen i programmet over) ved å bruke funksjonen scatter(). Da må vi først lage ei liste av x-koordinatene til disse punktene og ei like lang liste med de tilsvarende y-koordinatene. Se siden "Lister" for mer om hvordan man definerer ei liste i Python.
Vi lager lista x_koord med x-koordinatene til de tre punktene ved å skrive kommandoen
x_koord = [0, 4, 2]
Spørsmål – koding
Hva blir rett kommando for å lage lista y_koord med de tilhørende y-koordinatene?
Til slutt tegner vi disse tre punktene ved å skrive
plt.scatter(x_koord, y_koord)
Skriv inn disse tre linjene i programmet ovenfor, og kontroller at de tre punktene kommer på riktig plass.

Pythonkode å lære seg
Arbeide med den grafiske framstillingen
I den interaktive programmeringseditoren kan du dra i linja som skiller kodedelen fra grafen for å få grafbildet litt større, om du vil.
Spørsmål – vurdering
Hva er innvendingene mot den grafiske framstillingen lagd med Python sammenlignet med hvordan vi vanligvis ville ha tegnet en slik graf?
Lage pent avrundet graf
Hvordan kan vi, ved å endre på ett av tallene i programkoden, få grafen til å bli jevnt avrundet og ikke hakkete?
Oppsummering
Skriv og prøv å forklare så nøyaktig som mulig hva funksjonene plot() og scatter() gjør, og hvordan vi bruker dem.
Det vi skriver om nedenfor, gjør du bare om du ikke er fornøyd med den grafiske framstillingen slik den er nå.
Tilleggsstoff: Finpussing på den grafiske framstillingen
Ved å ikke gi noen vilkår til den grafiske framstillingen lagd med pythonkode, vil vi få det oppsettet som er standard, slik vi har fått over. Det finnes veldig mange måter å justere på en grafisk framstilling i Python. Her viser vi bare noen få av dem.
Selve grafen til funksjonen vår ser rett ut slik den er nå, men for å få den grafiske framstillingen til å ligne mer på GeoGebra-bildet, må vi legge inn noen flere kommandoer. Prøv å kjøre koden nedenfor.
Legg merke til at tekstboksen med formelrepresentasjonen av funksjonen på utskriften ser nokså matematisk ut. Det er fordi vi på linje 10 har startet og avsluttet tekststrengen med dollartegnet $. Dette trikset slår på "matematisk" visning av teksten mellom dollartegnene (ved hjelp av noe som heter LaTeX).
Du trenger kanskje ikke lære deg disse nye funksjonene utenat. Det kan være verdt å vite at på linje 25 og 26 skriver vi inn koordinatene for hvor aksetitlene skal plasseres. NB: Dette koordinatsystemet følger ikke koordinatsystemet til funksjonen vi tegner, men et koordinatsystem der origo er i nedre venstre hjørne på den grafiske framstillingen. Øvre høyre hjørne har koordinatene (1, 1).
Plasseringen av tekstboksen med funksjonsuttrykket er funnet ved å prøve og feile med koordinatene til "bbox_to_anchor". Vi kan plassere tekstboksen med funksjonsuttrykket øverst til høyre ved å gi "bbox_to_anchor" verdien "(1, 1)".
Spørsmål – koding
Hva blir koordinatene til midtpunktet på den grafiske framstillingen med dette systemet?