Uke 12
Innlevering, og Krav for å bestå
- Du kan levere så mange ganger du vil. Siste innlevering teller.
- For å få bestått, må du få godkjent alle 3 oppgavene.
- Det blir lite autotesting den gangen, dere skal laste opp PNG-bildene som ble laget i tillegg
Generelt tips: les alltid gjennom kursnotatene før du begynner på lab’en!
- Oppgave 1: Utforske pyplot
- Oppgave 2: Plotting av kart over et land
- Oppgave 3: Oversikt over flyplasser i verden
Oppgave 1: Utforske pyplot
I denne oppgaven skal vi ta utgangspunk i den følgende koden:
import matplotlib.pyplot as plt
from math import sin
# liste med x-verdier
xs = [n / 10 for n in range(101)]
# 2 ulike lister med y-verdier
ys_1 = [sin(x) for x in xs]
ys_2 = [3 * sin(x) for x in xs]
plt.plot(xs, ys_1, "-.r")
plt.plot(xs, ys_2, "--b")
# savefig lagrer filene
plt.savefig("test.png")
plt.savefig("test.pdf")
# interaktivt vindu
plt.show() # Hva skjer om vi ikke har med den raden: plt.show()?
Denne koden produserer følgende plot:
![]() |
Del A
I filen uke_12_oppg_1a.py endre på koden i eksempelet ovenfor slik at grafene tegnes med tittel, navn på x-y-aksen,figure-lengend, og annen farge og stil. Du kan velge farge og stil selv. Filen du leverer er uke_12_oppg_1a.py, og du skal også laste opp png-filen med plotten, med filnavnet uke_12_oppg_1a.png.
Eksempel figure:
![]() |
Del B
I filen uke_12_oppg_1b.py, ta koden fra eksemplet overfor og endre koden slik at den viser en “stem”-plot i stedet for en “line”-plot. Finn frem stem()
i matplotlib-dokumentasjonen. Du kan velge farge og stil selv.
Filen du leverer skal hete uke_12_oppg_1b.py og du skal også laste opp png-filen med plotten, med filnavnet uke_12_oppg_1b.png.
Eksempel figure:
![]() |
Del C
I filen uke_12_oppg_1c.py,ta koden fra eksemplet overfor og legg til en pil til alle interseksjons-punktene etter (\(0,0\)) med kommentaren intersection
. Det kan gjøres manuelt, du trenger ikke regne ut hvor punktene er. Du kan velge farge og stil selv.
Husk å søke i matplotlib-dokumentasjonen, funksjonen heter annotate
. Lever også bildet i filen uke_12_oppg_1c.png.
Eksempel figure:
![]() |
Oppgave 2: Plotting av kart over et land
I filen uke_12_oppg_2.py skal du lage en funksjon map_plot(filepath)
som tar en filsti til en JSON-fil som input. Funksjonen skal bruke json
-biblioteket for å åpne filen og matplotlib.pyplot
-biblioteket for å plotte geografisk data i GeoJSON-format.
Lever også bildet i filen uke_12_oppg_2.png sammen med uke_12_oppg_2.py
filepath
inneholder geografisk data i GeoJSON-format som er lastet ned fra https://gadm.org/download_country.html. GeoJSON er en standard for å representere geografisk data i JSON-format, og data er organisert hierarkisk i ulike nivåer basert på kompleksitet.- Dataen som brukes i denne oppgaven er på Nivå 0, som representerer landegrenser. GeoJSON er organisert hierarkisk med mange objekter inni i hverandre. De viktigste objektene du trenger for å plotte er:
Objektet
features
, som inneholder en liste med objekter, og inni denne listen finnes objektetgeometry
, som inneholdercoordinates
.Objektet
coordinates
består av en samling av flerepolygoner
som beskriver et sammenhengende geografisk område.En enkelt polygon i coordinates består av en liste av lister med koordinatpar som representerer punktkoordinater på jordoverflaten, og disse koordinatparene skal plottes.
Når innholdet til json-filen ligger i variabelen
data
, kan du få tilgang til objektetcoordinates
ved å bruke følgende:
coordinates = data['features'][0]['geometry']['coordinates']
En testkjøring med filen norway.json skal produsere følgende kartet.
Avslutt med plt.savefig()
for å lagre bildet. Ikke ha med plt.show()
når du laster opp filen din, autotestene kan ikke kjøre den.
![]() |
Oppgave 3: Oversikt over flyplasser i verden
Filen airport-codes.csv er en CSV-fil som inneholder en oversikt over mange flyplasser i verden.
- Kolonne 1 (type) viser størrelse til flyplassen, enten medium_airport eller large_airport.
- Kolonne 9 (iata_code) viser 3-bokstavs IATA koden til flyplassen (f.eks BGO for Bergen).
- Kolonne 11 (coordinates) viser geografisk posisjon som en streng med et tall for nord-sør (breddegrad), et komma, et mellomrom, og et tall for øst-vest (lengdegrad).
I filen uke_12_oppg_3.py skal programmet ditt gjøre det følgende:
Les data fra filen inn i passende datastrukturer (list / dict / …). Vi trenger kun informasjonen fra de 3 kolonnene som er nevnt ovenfor. Det er nyttig å splitte koordinatene i lengde og bredde allerede her.
Bruk matplotlib for å plotte posisjonen til de ulike flyplassene på en kart. Bruk en liten prikk for de mellomstore flyplassene, og en større prikk for de store flyplassene. Velg en lys farge for prikkene.
Bruk matplotlib.annotate(iata_code, (lengde, bredde)) i en løkke over alle store flyplassene for å skrive IATA-navnet på bildet.
Sett inn en tittel og aksebeskrivelser.
Avslutt med
plt.savefig()
for å lagre bildet. Ikke ha medplt.show()
når du laster opp filen din, autotestene kan ikke kjøre den.
Lever også bildet i filen uke_12_oppg_3.png sammen med uke_12_oppg_3.py
Eksempelkjøring:
![]() |
Hvis det tar lang tid å kjøre koden, kan du bruke en mindre versjon av csv filen mens du tester.airport-codes-small.csv