Utforskning: pyplot
- Basic plot
- Flere grafer ved siden av hverandre
- Flere datapunkter, høyere oppløsning
- Utforskningsspørsmål
Les også: utforsking om tidevann
Matplotlib er et bibliotek du må installere før du kan bruke det. Se kursnotater om eksterne pakker.
Basic plot
Du kan bruke matplotlib til å visualisere data. Slik som de fleste python-biblioteker, har matplotlib en veldig god dokumentasjon på nettet. Her skal vi bare se på noen enkle bruk av biblioteken.
Les gjennom intro to pyplot. De bruker et annet eksternt bibliotek, numpy, i noen av eksemplene for å lage lister med verdier, men vi skal i INF100 dette semesteret bare bruke vanlige lister.
Om du er interessert kan du finne flere eksempler til bruk av matplotlib på plot types.
Her er et enkelt eksempel på pyplot:
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()
Koden over produserer følgende plot:
Hva skjer om vi ikke har med den siste raden: plt.show()
?
Flere grafer ved siden av hverandre
import matplotlib.pyplot as plt
from math import sin
xs = [n / 10 for n in range(101)]
ys = [sin(x) for x in xs]
plt.subplot(221)
plt.plot(xs, ys, "-.r")
plt.ylabel("y")
plt.subplot(222)
plt.plot(xs, [3 * y for y in ys], "--y")
plt.subplot(223)
plt.plot(xs, ys, "-.k")
plt.xlabel("x")
plt.subplot(224)
plt.plot(xs, [3 * y for y in ys], "--b")
plt.suptitle("Several plots")
plt.show()
Koden over produserer følgende:
Flere datapunkter, høyere oppløsning
Jo flere datapunkter du bruker, desto høyere oppløsning får grafen din. Her er et eksempel på dette
import matplotlib.pyplot as plt
from math import sin
def square_wave(x):
return ( # bruker parentes her slik at vi kan formatere over flere linjer
sin(x)
+ 1 / 3 * sin(3 * x)
+ 1 / 5 * sin(5 * x)
+ 1 / 7 * sin(7 * x)
+ 1 / 9 * sin(9 * x)
)
# Lower resolution
xs = [n / 5 for n in range(51)]
ys = [square_wave(x) for x in xs]
plt.plot(xs, ys, label="51 points")
# Higher resolution
xs = [n / 100 for n in range(1001)]
ys = [square_wave(x) for x in xs]
plt.plot(xs, ys, label="1001 points")
# plot labels
plt.title("Resolution example")
plt.xlabel("x")
plt.ylabel("y")
plt.legend()
plt.show()
Koden over produserer følgende:
Utforskningsspørsmål
Svar på følgende spørsmål om pyplot:
- Hvordan lager du en plot?
- Hvordan får du etiketter på x- og y-aksen i din plot?
- Hvordan får du en titel høyest opp på din plot?
- Hvordan bestemmer du farge og mønstre på grafen?
- Hvordan får du flere grafer oppå hverandre?
- Hvordan får du flere grafer ved siden av hverandre?