Teikne grafar med pyplot
Innleiing
Vi skal bruke programmeringsspråket Python til å teikne grafen til funksjonen
for x-verdiar mellom og 6.
Grafteikning med modulen pyplot
Akkurat som når vi skal teikne ein funksjon på papiret, treng vi ein ferdig utfylt verditabell med x-verdiar og funksjonsverdiar. Verditabellen til funksjonen f ser slik ut:
x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | ||
|---|---|---|---|---|---|---|---|---|---|
12 | 5 | 0 | 0 | 5 | 12 |
I Python teiknar vi grafar med funksjonen plot(), som vi hentar frå modulen matplotlib.pyplot. Funksjonen skal ha to argument. Det første argumentet skal vere ei liste eller ein numpy-tabell med x-verdiane frå verditabellen. Det andre argumentet skal vere ei liste eller ein numpy-tabell med dei tilhøyrande funksjonsverdiane.
Lista med x-verdiane lagar vi med funksjonen linspace(). Lista med funksjonsverdiane lagar vi så direkte ut ifrå lista med x-verdiar. Deretter bruker vi kommandoen plot() til å lage grafen. Til slutt må vi bruke kommandoen show() for å sende den grafiske framstillinga til skjermen.
Oppgåve – algoritme
Prøv ut ifrå opplysningane ovanfor å skrive ein algoritme til eit program som skal teikne funksjonen f for oss.
Pythonprogrammet nedanfor fungerer etter algoritmen over. (NB: Det kan ta litt tid frå du trykkjer på avspelingsknappen til programmet blir køyrt.) Alternativt kan du kopiere koden inn i din eigen programmeringseditor. Får du fram grafen til funksjonen? Legg merke til at teiknet hashtag (#) gjer at vi inne i programkoden kan leggje inn tekst som blir ignorert og som derfor kan brukast til å leggje til kommentarar i koden.
Forklaring til programkoden
Importering av tilleggsmodular eller tilleggsbibliotek til Python
I linje 2 og 3 har vi importert modulen pyplot frå biblioteket matplotlib og modulen numpy. Det er fordi funksjonane vi bruker ikkje finst i standard Python. Vi har gitt modulane aliasa eller namna plt og np for å sleppe å skrive så mykje lenger ned i koden.
Funksjonen linspace()
I linje 6 bruker vi funksjonen linspace(). Funksjonen linspace() finst ikkje i standard Python, men ligg innunder modulen numpy. Då må vi skrive np. framfor for å markere kvar funksjonen kjem frå.
Variabelen x er derfor ein numpy-tabell med 9 tal der det minste er . Funksjonen linspace() fordeler dei 9 tala jamt i intervallet frå og med til og med 6. Tala aukar derfor jamt med 1 frå heilt opp til det største talet, 6.
Tabellen f_av_x med funksjonsverdiar
Sidan variabelen x er ein numpy-tabell, vil òg variabelen f_av_x vere det fordi f_av_x er definert ut ifrå x i linje 7. Heldigvis kan vi lage tabellen f_av_x ved å setje tabellen x rett inn i funksjonen, slik linje 7 viser. Sidan det første talet i x er , vil det første talet i lista f_av_x vere
Spørsmål – koding
Kva er det siste talet i f_av_x?
Funksjonen plot() – teikning av grafar
Kommandoen plt.plot(x, f_av_x) lagar den grafiske framstillinga ved å teikne ei rett linje mellom punkta av samhøyrande verdiar av x og f_av_x. Til slutt treng vi kommandoen plt.show() for å få den grafiske framstillinga ut frå minnet til datamaskina og over til skjermen. Begge desse funksjonane må vi skrive plt. framfor for å informere om at dei kjem frå modulen pyplot i biblioteket matplotlib.
Teikning av punkt
Vi har frå verditabellen til funksjonen ovanfor at
- nullpunkta er og
- botnpunktet har koordinatane (2, –4)
Vi kan teikne nullpunkta og botnpunktet (saman med grafen i programmet over) ved å bruke funksjonen scatter(). Då må vi først lage ei liste av x-koordinatane til desse punkta og ei like lang liste med dei tilsvarande y-koordinatane. Sjå sida "Lister" for meir om korleis ein definerer ei liste i Python.
Vi lagar lista x_koord med x-koordinatane til dei tre punkta ved å skrive kommandoen
x_koord = [0, 4, 2]
Spørsmål – koding
Kva blir rett kommando for å lage lista y_koord med dei tilhøyrande y-koordinatane?
Til slutt teiknar vi desse tre punkta ved å skrive
plt.scatter(x_koord, y_koord)
Skriv inn desse tre linjene i programmet ovanfor, og kontroller at dei tre punkta kjem på rett plass.

Pythonkode å lære seg
Arbeide med den grafiske framstillinga
I den interaktive programmeringseditoren kan du dra i linja som skil kodedelen frå grafen for å få grafbiletet litt større, om du vil.
Spørsmål – vurdering
Kva er innvendingane mot den grafiske framstillinga laga med Python samanlikna med korleis vi vanlegvis ville ha teikna ein slik graf?
Lage pent avrunda graf
Korleis kan vi, ved å endre på eitt av tala i programkoden, få grafen til å bli jamt avrunda og ikkje hakkete?
Oppsummering
Skriv og prøv å forklare så nøyaktig som mogleg kva funksjonane plot() og scatter() gjer, og korleis vi bruker dei.
Det vi skriv om nedanfor, gjer du berre om du ikkje er nøgd med den grafiske framstillinga slik ho er no.
Tilleggsstoff: Finpussing på den grafiske framstillinga
Ved å ikkje gi nokon vilkår til den grafiske framstillinga laga med pythonkode, vil vi få det oppsettet som er standard, slik vi har fått over. Det finst veldig mange måtar å justere på ei grafisk framstilling i Python. Her viser vi berre nokre få av dei.
Sjølve grafen til funksjonen vår ser rett ut slik han er no, men for å få den grafiske framstillinga til å likne meir på GeoGebra-biletet, må vi leggje inn nokre fleire kommandoar. Prøv å køyre koden nedanfor.
Legg merke til at tekstboksen med formelrepresentasjonen av funksjonen på utskrifta ser nokså matematisk ut. Det er fordi vi på linje 10 har starta og avslutta tekststrengen med dollarteiknet $. Dette trikset slår på "matematisk" vising av teksten mellom dollarteikna (ved hjelp av noko som heiter LaTeX).
Du treng kanskje ikkje lære deg desse nye funksjonane utanåt. Det kan vere verdt å vite at på linje 25 og 26 skriv vi inn koordinatane for kvar aksetitlane skal plasserast. NB: Dette koordinatsystemet følgjer ikkje koordinatsystemet til funksjonen vi teiknar, men eit koordinatsystem der origo er i nedre venstre hjørne på den grafiske framstillinga. Øvre høgre hjørne har koordinatane (1, 1).
Plasseringa av tekstboksen med funksjonsuttrykket er funne ved å prøve og feile med koordinatane til "bbox_to_anchor". Vi kan plassere tekstboksen med funksjonsuttrykket øvst til høgre ved å gje "bbox_to_anchor" verdien "(1, 1)".
Spørsmål – koding
Kva blir koordinatane til midtpunktet på den grafiske framstillinga med dette systemet?