Utforskning: pyplot
- Basic plot
- Flere grafer ved siden av hverandre
- Flere datapunkter, høyere oppløsning
- Utforskningsspørsmål
Les også: utforsking om tidevann. Fysikk-innholdet der er selvfølgelig ikke pensum, vi tok det med som et eksempel til et litt større prosjekt.
Matplotlib er et bibliotek du må installere før du kan bruke det. Se kursnotater om eksterne pakker.
Matplotlib: visualisering av data
Matplotlib er et stort bibliotek med utallige muligheter for å visualisere data på ulike måter. Under viser vi bare et helt enkelt eksempel;
import matplotlib.pyplot as plt
from math import sin, cos
# Eksempeldata som skal visualiseres
# 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 * cos(x) for x in xs]
# Opprette et plot
plt.plot(xs, ys_1, "r")
plt.plot(xs, ys_2, "b")
# savefig lagrer filene
plt.savefig("my_plot.svg") # SVG vektorgrafikk (bra format for figurer!)
plt.savefig("my_plot.pdf") # PDF
plt.savefig("my_plot.png") # PNG
# interaktivt vindu
plt.show()
Hva skjer om vi ikke har med den siste raden: plt.show()
?
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, vi skal se på numpy neste gang.
Om du er interessert kan du finne flere eksempler til bruk av matplotlib på plot types.
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?