Plot af funktion med Python

For at kunne plotte funktioner og grafer, skal vi have tilføjet nogle ekstra pakker til Python

  • Numpy
  • Matplotlib

Du skal først sikre dig at du har den nyeste version af pip og derefter installere numpy og matplotlib.

På Windows

python -m pip install --user --upgrade pip
python -m pip install --user numpy  matplotlib

Mac/Linux

python3 -m pip install --user --upgrade pip
python3 -m pip install --user numpy  matplotlib

Når du skal plotte skal du huske at importere pakker i starten af koden:

import numpy as np
import matplotlib.pyplot as plt

Mit første plot

Herunder plotter vi funktionen \( 2x-7 \). Efter koden bliver koden gennemgået mere konkret.

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-10,10,0.01)
plt.plot(x, 2*x-7)

plt.grid(True)

plt.title(r"$f(x) = 2x^2-7$")
plt.xlabel("x-akse (Definitionsmængde)")
plt.ylabel("y-akse (Værdimængde)")

plt.show()  
_

Gennemgang af koden

import numpy as np
import matplotlib.pyplot as plt	

Pakkerne der er nødvendige for at plotte importeres

x = np.arange(-10,10.0.01)

Her beskrives for hvilke værdier (x-aksen) at plottet skal beregnes, og hvor stort springet skal være mellem hver beregning.

Vi plotter i intervallet \( x = [ -10 ; 10 ] \) og springer med 0,01 hver gang.

plt.plot(x, 2*x-7)

Her beskriver vi funktionen der skal plottes. Når programmet kører, så vil Python først indsætte -10, og herefter -9.99 osv. og så huske resultatet

plt.grid(True)

Vi fortæller Python, at der skal være et gitter

De næste 3 linier laver tekst på vores udskrift. Den første linie laver overskriften

plt.title(r"$f(x) = 2x-7$")

Indholdet i parentesen skal være omkranset af r"$ og $". Når vi gør det bliver tegn vist korrekt med et formateringsprog der hedder Latex. Så bliver x^2 til \( x^2 \) og \sqrt 8 bliver til \( \sqrt 8 \)

Du kan læse mere om Latex her: mat_notation.html

plt.xlabel("x-akse (Definitionsmængde)")
plt.ylabel("y-akse (Værdimængde)")

Her laves teksten til x- og y-aksen

plt.show()

Kommandoen gør at selve plottet bliver tegnet.

Øvelser

Prøv at gøre følgende ting og beskriv resultatet

  • ændr funktionen til \( \frac{1}{7}x - 2 \)
  • Ændr teksten på x- og y-aksen

Øvelser

Tegn følgende funktioner

$$ a) ~~~0,1 \cdot 0,65^x ~~for ~~ x=[ -1 ; 7 ]$$
Løsninger a)
_
$$ b)~~~\frac{ 1 }{ 2 } x^2 ~~for ~~ x=[ -5 ; 5 ]$$
Løsning b)
_
$$ c)~~-30x+4~~for~~x=[-5;0]~~ \wedge~~ 3x^2+4~~for ~~ x = [0;5] $$

TIP: Du skal lave to arange og plot - et for hver af intervallerne.

Løsning c)
_
$$ d)~~~\frac{ 1 }{ x } ~for~~x=[-1;1] $$

TIP: Da man ikke kan dividere med 0, skal du skille funktionen af i to intervaller [-∞;0] og [o;-∞].

Løsning d)
_

Indstillinger

Guides

https://matplotlib.org/users/pyplot_tutorial.html

Størrelse

Hvis du ikke vil lade Python bestemme y-aksen kan du tilføje størrelsen. Her har jeg sat y-aksen til at gå fra -20 til 20.

plt.axis([-15, 15, -20, 20])	

Farve

Farven sættes ved at tilføje parametren color="*farvenavn" eller blot c=*Farvenavn*. De tilgængelige farver er RGB + CMYK altså:

r (rød)
   
g (grøn)
   
b (blå)
   
c (cyan)
   
m (magenta)
   
y (gul)
   
k (sort/key)
   
w (hvid)
   

Alle farver kan dog anvendes. Se her: https://matplotlib.org/users/colors.html

Øvelse

Indtegn følgende tre funktioner i x = [-3;3]:

$$ 100x^2-400 ~~ (rød)$$
$$ 2 \cdot 0.2^x ~~(grøn) $$
$$ 100x+25 ~~(blå) $$
Løsning
_

Vandret/lodret linie

Hvis du vil have en lodret og en vandret linje, som i det kartesiske koordinatsystem, kan du lave det på følgende måde:

# Horisontal linie
plt.axhline(y=0, color="k")

# Lodret linie
plt.axvline(x=0, color="k")

Øvelse

Lav en graf med et kartesisk koordinatsystem.

Løsning
_
_

Grunden til at vi tegner vores korst når vi laver grafer i et hæfte er for at vise hvor 0 er.

Udskriften fra Python angiver værdierne så de er lette at aflæse, så det er spildt arbejde at tegne "korset"

Punkter/tegn

Hvis man gerne vil markere punkter kan man gøre det på følgende måde. Herunder er der indsat 3 rækker af 5 forskellige punkter

	import numpy as np
import matplotlib.pyplot as plt

plt.axis([-10,10,-10,10])

# Alle er tegnet med rød
plt.plot(-8,4,"rv", markersize = 15)
plt.plot(-4,4,"r<", markersize = 15)	
plt.plot(0,4,"r>", markersize = 15)	
plt.plot(4,4,"r*", markersize = 15)	
plt.plot(8,4,"r.", markersize = 15)

# Alle er tegnet med grøn
plt.plot(-8,0,"go", markersize = 15)	
plt.plot(-4,0,"gx", markersize = 15)
plt.plot(0,0,"g^", markersize = 15)
plt.plot(4,0,"gs", markersize = 15)
plt.plot(8,0,"g+", markersize = 15)

# Python bestemmer farven
plt.plot(-8,-4,"D", markersize = 15)	
plt.plot(-4,-4,"d", markersize = 15)
plt.plot(0,-4,"p", markersize = 15)
plt.plot(4,-4,"h", markersize = 15)
plt.plot(8,-4,"H", markersize = 15)

plt.title('Punkter')
plt.show()	
_

Du kan finde en liste med forskellige muligheder her: https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.plot

Forskellige linietyper

Du kan også vælge at tegne forskellige linietyper. Den simpleste er at anvende streger (- - - -) eller prikker, som du laver med punktummer (. . . . ). Du kan endda blande dem

Hvis farver ikke er nok kan man også vælge at anvende linier der dannes af tegn. De simpleste at anvende er - - - - - - (streg streg streg ...) og - · - · - · (streg punktum streg punktum ...) da pyplot selv kan placere dem i korrekt afstand.

Farven sættes ligesom ovenfor ved punkter/tegn.

	import numpy as np
import matplotlib.pyplot as plt

plt.axis([-10,10,-10,10])
x = np.arange(-10,10,0.01)

plt.plot(x, x,"r--")
plt.plot(x, -x,"g-.")
plt.plot(x,-pow(x,2)+4,"b--")

plt.grid(True)
plt.title('Linier med tegn 1')

plt.show()	
_

Man kan også bruge alle tegnene ovenfra, men her skal man selv korrigere afstanden mellem punkterne (markeret med rødt)

	import numpy as np
import matplotlib.pyplot as plt

plt.axis([-10,10,-10,10])
x = np.arange(-10,10,.5) ## Her sættes afstanden mellem hver enkelt tegn

plt.plot(x, x,"rh")
plt.plot(x, -x,"g+")
plt.plot(x,pow(x,2)-5,"bd")

plt.grid(True)
plt.title('Linier med tegn 2')

plt.show()	
_

Søjle diagramm

	import numpy as np
import matplotlib.pyplot as plt

kategorier = ["gruppe a", "gruppe b", "gruppe c", "gruppe d"]
værdier = [5, 24, 17, 12]

plt.bar(kategorier, værdier, width=0.8)
plt.title('Søjle diagram')
plt.show()	
_
_

Læg mærke til at her bliver værdierne indsat ved hjælp af lister både for x og y's vedkommende.

Prik diagram

	import numpy as np
import matplotlib.pyplot as plt

kategorier = ["gruppe a", "gruppe b", "gruppe c", "gruppe d"]
værdier = [5, 20, 17, 12]

plt.plot(kategorier, værdier, "ro", markersize=5)
plt.title('Prik diagram')
plt.show()	
_
_

Cirkeldiagrammer

https://matplotlib.org/api/_as_gen/matplotlib.pyplot.pie.html

Tekst ved plots

https://stackoverflow.com/questions/42435446/how-to-put-text-outside-python-plots

https://stackoverflow.com/questions/332289/how-do-you-change-the-size-of-figures-drawn-with-matplotlib

https://matplotlib.org/api/_as_gen/matplotlib.pyplot.subplot.html

Supplots

https://matplotlib.org/tutorials/intermediate/gridspec.html