For at kunne plotte funktioner og grafer, skal vi have tilføjet nogle ekstra pakker til Python
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
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.
Prøv at gøre følgende ting og beskriv resultatet
Tegn følgende funktioner
TIP: Du skal lave to arange og plot - et for hver af intervallerne.
TIP: Da man ikke kan dividere med 0, skal du skille funktionen af i to intervaller [-∞;0] og [o;-∞].
https://matplotlib.org/users/pyplot_tutorial.html
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])
Farven sættes ved at tilføje parametren color="*farvenavn" eller blot c=*Farvenavn*. De tilgængelige farver er RGB + CMYK altså:
Alle farver kan dog anvendes. Se her: https://matplotlib.org/users/colors.html
Indtegn følgende tre funktioner i x = [-3;3]:
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")
Lav en graf med et kartesisk koordinatsystem.
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"
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
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()
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.
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()
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.pie.html
https://stackoverflow.com/questions/42435446/how-to-put-text-outside-python-plots
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.subplot.html