Graftegning med Matplotlib

Introduksjon til graftegning med matplotlib. Dette er henta frå Pyplot Tutorial

Det fins fleire bibliotek for plotting i Python, men det vanligaste er Matplotlib som vi skal bruka her. Den vanligaste funksjonen er plot som vi skal sjå på først.

Noko av det enklaste vi kan gjera er å servera plot to lister med x- og y-verdiar:

In [1]:
%matplotlib inline
import matplotlib.pyplot as plt
x = [1,2,3,4]
y = [1,4,9,16]
plt.plot(x,y)
plt.show()

Merk at vi aller først må importera matplotlib. Her gir vi det kortnavnet plt, og dermed kan vi referera til funksjonen plt.plot. For å visa grafen tar vi med plt.show. Resultatet er eit linjegraf mellom punkta (1,1) - (2,4) - (3,9) - (4,16). Det er faktisk mulig å bare gi inn y-verdiane. I såfall ville matplotlib brukt lista [0,1,2,3] for x. Men det er ein god vane å alltid gi x-lista.

Hvis vi heller vil ha eit punktplot, så har plot eit tredje argument som er ein streng som inneheld kommandoar i kortform. Denne angir farge og form på linjer eller punkt. Default format-streng (som vi altså ikkje treng skriva) er ‘b-‘, som angir ei blå heiltrukken linje. Hvis vi heller vil ha bare punkt med raud farge kan vi skriva 'ro':

In [2]:
plt.plot(x,y, 'ro')
plt.axis([0, 6, 0, 20])
plt.show()

Kommandoen axis angir her ei liste på formen [xmin, xmax, ymin, ymax] som gir oss vinduet vårt.

Vanlig praksis er å bruka numpy arrays i staden for lister. Og vi kan greit konvertera lister til numpy-arrays. (Merk at då må vi importera numpy):

In [3]:
import numpy as np
import matplotlib.pyplot as plt

x = np.array(x)

#Her tegnar vi som blå firkantar (s for square)
plt.plot(x, x**2, 'bs')
plt.axis([0, 6, 0, 20])
plt.show()

Men når vi først brukar numpy er det som regel like greit å laga arrays direkte. Med kommandoen t = np.arange(0., 5., 0.2) lagar vi eit array som går frå 0 til 5 med mellomrom på 0.2, dvs 0., 0.2, 0.4 osv. Ein fordel med slike arrays er at når vi har definert eit array t, så kan vi laga nye ved feks å skriva t**2, som gir oss 0., 0.04, 0.16 osv.

Nedanfor har vi brukt dette til å tegna funksjonane y = t, y = t**2 og y = t**3 i samme plottet. Dette gjer vi ved å gjentar dei tre parameterane for x-, y- og format for kvar av disse tre grafane.

In [4]:
import numpy as np
import matplotlib.pyplot as plt

t = np.arange(0., 5., 0.2)

# raude stipla, blå firkantar og grøne trekantar:
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
plt.show()

Å tegna fleire grafar i same koordinasystem kan fungera når aksane / enhetene og vinduet er det same for alle. Hvis ikkje kan vi tegna fleire plott som deler av same figur. Her skal vi ha to figurar over kvarandre. Den øverste viser dempa svingningar og den nederste viser udempa. Til dette bruker vi kommandoen subplot(). Denne kan ha fleire parameterar, men her angir vi posisjonen med tre tal. Det første er antal rader (2). Det neste er antal kolonner (1), og det siste er et løpenummer. Disse er sette til hhv. 2 og 1, og det betyr at det er det nederste i koden som kjem på topp.

In [5]:
import numpy as np
import matplotlib.pyplot as plt

def dempa(t):
    return np.exp(-t) * np.cos(2*np.pi*t)

def svingning(t):
    return np.cos(2*np.pi*t)

t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)

plt.figure(1)
plt.subplot(212)
plt.plot(t1, dempa(t1), 'bo', t2, dempa(t2), 'k')
plt.title('Dempa svingning')
plt.xlabel('tid [s]')
plt.ylabel('Utslag [m]')

plt.subplots_adjust(bottom=0.5, right=2.0, top=2.0, hspace = 0.4)

plt.subplot(211)
plt.plot(t2, svingning(t2), 'r--')
plt.title('Udempa svingning')
plt.xlabel('tid [s]')
plt.ylabel('Utslag [m]')
plt.show()

Dette er bare eit lite utvalg av dei mulighetene vi har i Matplotlib. Dette er eit stort bibliotek med mange andre graftypar, som histogram, kakediagram, konturplott, tredimensjonale plott med meir. Sjå eksempel her.

In [ ]: