Utforskning: pyplot

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:

Illustrasjon av koden over

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:

Illustrasjon av koden over

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:

Illustrasjon av koden over

Utforskningsspørsmål

Svar på følgende spørsmål om pyplot: