Teikne grafar med pyplot
Vi skal bruke programmeringsspråket Python til å teikne grafen til funksjonen
for -verdiar mellom og .
Akkurat som når vi skal teikne ein funksjon på papiret, treng vi ein ferdig utfylt verditabell med -verdiar og funksjonsverdiar. Verditabellen til funksjonen ser slik ut:
–2 | –1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | |
---|---|---|---|---|---|---|---|---|---|
12 | 5 | 0 | –3 | –4 | –3 | 0 | 5 | 12 |
I Python teiknar vi grafar med funksjonen plot(). Funksjonen skal ha to argument. Det første argumentet skal vere ei liste med -verdiane frå verditabellen. Det andre argumentet skal vere ei liste med dei tilhøyrande funksjonsverdiane.
Lista med -verdiane lagar vi med funksjonen linspace(). Lista med funksjonsverdiane lagar vi så direkte ut ifrå lista med -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 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.
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.
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 numpy.
framfor for å markere kvar funksjonen kjem frå.
Variabelen x
er derfor ei liste med tal der det minste er . Funksjonen linspace fordeler dei tala jamt i intervallet frå og med til og med . Tala aukar derfor jamt med frå heilt opp til det største talet, .
Lista f_av_x med funksjonsverdiar
Sidan variabelen x
er ei liste, vil òg variabelen f_av_x
vere det fordi f_av_x
er definert ut ifrå x
i linje 7. Heldigvis kan vi lage lista f_av_x
ved å setje lista 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 lista f_av_x
?
Funksjonen plot() – teikning av grafar
Kommandoen 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 show()
for å få den grafiske framstillinga ut frå minnet til datamaskina og over til skjermen. Begge desse funksjonane må vi skrive matplotlib.pyplot.
framfor for å informere om at dei kjem frå modulen pyplot i biblioteket matplotlib.
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) ved å bruke funksjonen scatter(). Då må vi først lage ei liste av -koordinatane til punkta og ei like lang liste med dei tilsvarande -koordinatane. Sjå sida "Lister" for meir om korleis ein definerer ei liste i Python.
Vi lagar lista x_koord
med -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 -koordinatane?
Til slutt teiknar vi desse tre punkta ved å skrive
matplotlib.pyplot.scatter(x_koord, y_koord)
Skriv inn desse tre linjene i programmet ovanfor, og kontroller at dei tre punkta kjem på rett plass.
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. Vi viser òg eit triks for å spare tastetrykk.
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.
Ved å skrive ...as plt
og ...as np
i linjene 2 og 3 lagar vi forkortingar som gjer at vi ikkje treng å skrive heile adressa til modulane når vi skal bruke funksjonar frå dei. I staden for å skrive matplotlib.pyplot.
framfor alle funksjonane vi bruker frå dette biblioteket, held det no å skrive plt.
.
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?