Rajzolás (plotting) Pythonban¶
A Matplotlib
egy átfogó könyvtár statikus, animált és interaktív vizualizációk létrehozásához a Pythonban. Számtalan tutoriál hozzáférhető, amelyek az alaptól a profi szintig ismertetik a használatát. A matplotlib.pyplot
részmodul olyan függvények gyűjteménye, amelyek a matplotlib
-et úgy működtetik, mint a MATLAB. Minden pyplot
függvény változtat valamit az ábrán: például létrehoz egy ábrázolási területet, néhány vonalat rajzol, felcímkézi az ábra elemit, stb.
import matplotlib.pyplot as plt
import random
list1 = range(5)
plt.plot(list1)
[<matplotlib.lines.Line2D at 0x11ed45d90>]
list2 = [random.random() for _ in range(5)]
print(list2)
[0.18160715871718314, 0.2425525257060298, 0.860979843005525, 0.6651847422948441, 0.9979706565506974]
plt.plot(list1, list2)
[<matplotlib.lines.Line2D at 0x11edc00b0>]
plt.plot(list1, list2, 's') # 'r^' 'gs' 'k--' 'b:' 'ro-'
[<matplotlib.lines.Line2D at 0x11edbd6a0>]
plt.scatter(list1, list2)
<matplotlib.collections.PathCollection at 0x11ed89700>
plt.bar(list1, list2, .5)
<BarContainer object of 5 artists>
t = [i*0.01 for i in range(251)]
t2 = [(i*0.01)**2 for i in range(251)]
t3 = [(i*0.01)**3 for i in range(251)]
plt.plot(t, t2)
[<matplotlib.lines.Line2D at 0x11efe8d10>]
plt.plot(t, t2, 'r', t, t3, 'g')
[<matplotlib.lines.Line2D at 0x11ef604a0>, <matplotlib.lines.Line2D at 0x11f07dac0>]
plt.figure(figsize=(12, 3))
plt.subplot(131)
plt.bar(list1,list2)
plt.subplot(132)
plt.scatter(list1,list2)
plt.subplot(133)
plt.plot(list1,list2)
plt.suptitle('Functions')
plt.show()
plt.figure(figsize=(8, 12))
plt.subplot(311)
plt.bar(list1,list2)
plt.title("Bar")
plt.subplot(312)
plt.scatter(list1,list2)
plt.title("Scattered")
plt.subplot(313)
plt.plot(list1,list2)
plt.title("Plot")
plt.suptitle('Functions')
plt.tight_layout()
plt.show()
Feladat: Másoljuk az alábbi kódot egy 4test.py
nevű fájlba, majd futtassuk a python3 4test.py 4
paranccsal.
import matplotlib.pyplot as plt
import random
import sys
def my_plot():
"""
Plotting n random values.
n is read in from the terminal.
"""
n = int(sys.argv[1])
list1 = range(n)
list2 = [random.random() for _ in range(n)]
list3 = [i**2 for i in list2]
plt.subplot(311)
plt.bar(list1,list1)
plt.subplot(312)
plt.bar(list1,list2)
plt.subplot(313)
plt.bar(list1,list3)
plt.show()
def main():
my_plot()
if __name__ == "__main__":
main()
A math
modul¶
A faktoriális vagy az exponenciális függvény számításához használhatjuk a math
modult:
import math
math.factorial(5)
120
A binomiális együttható kiszámítására írjunk saját comb
függvényt (Python 3.8 vagy újabb esetén már létezik math.comb()
függvény is):
def comb(n, m):
return math.factorial(n)//math.factorial(m)//math.factorial(n-m)
comb(25, 10)
3268760
math.exp(1), math.exp(2) # the e^x function
(2.718281828459045, 7.38905609893065)
Feladat: Számítsuk ki annak valószínűségét, hogy 10-szer feldobva egy kockát, pontosan kétszer kapunk 6-ost, majd közelítsük meg ezt a valószínűséget Poisson-eloszlással számolva!
n = 10
p = 1/6
m = 2
l = n*p
binomial_dist = comb(n, m) * p**m * (1-p)**(n-m)
poison_dist = l**m * math.exp(-l) / math.factorial(m)
binomial_dist, poison_dist
(0.2907100492017224, 0.2623272261632803)