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.

Enkelt linjediagram

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

In [2]:
import matplotlib.pyplot as plt

x = [1,2,3,4]
y = [1,4,9,16]

plt.plot(x,y)
plt.show()

Aller først importerer vi matplotlib. Vi gir det kortnavnet plt, slik at vi kan referera til funksjonen plt.plot. NB! For å visa grafen må vi ha med plt.show. Resultatet er eit linjediagram 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).

Punktdiagram

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 [3]:
import matplotlib.pyplot as plt

x = [1,2,3,4]
y = [1,4,9,16]

plt.plot(x,y, 'ro')
plt.axis([0, 5, 0, 20])
plt.show()

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

Plotting med numpy-arrays

Vanlig praksis er å bruka numpy arrays i staden for lister. I det neste eksempelet konverterer vi lista x til eit numpy-array. Merk at vi no må importera numpy. Merk også at i staden for å gi plot eit array y (som vi kunne ha gjort), så gir vi den eit array x^2. Det betyr at kvar y-verdi er x opphøyd i andre, dvs. 1, 4, 9 osv. Her har vi også endra til blå firkantar i staden for linjediagram.

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

x = [1,2,3,4]
x = np.array(x)

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

Bruk av numpy.arange + fleire grafar i samme plott

Men når vi først brukar numpy er det som regel like greit å laga arrays direkte. Med kommandoen x = 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.

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

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

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

# raude stipla, blå firkantar og grøne trekantar:
plt.plot(x, x, 'r--', x, x**2, 'bs', x, x**3, 'g^')
plt.axis([0, 5, 0, 50])
plt.show()

Subplot

Å tegna fleire grafar i same koordinasystem, slik vi har gjort her, kan fungera når aksane / enhetene og vinduet er det same for alle. Hvis ikkje bør 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 [6]:
import matplotlib.pyplot as plt
import numpy as np

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

def udempa(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.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, udempa(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.