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.

In [1]:
import matplotlib.pyplot as plt
import random
In [2]:
list1 = range(5)
In [3]:
plt.plot(list1)
Out[3]:
[<matplotlib.lines.Line2D at 0x11ed45d90>]
No description has been provided for this image
In [4]:
list2 = [random.random() for _ in range(5)]
print(list2)
[0.18160715871718314, 0.2425525257060298, 0.860979843005525, 0.6651847422948441, 0.9979706565506974]
In [5]:
plt.plot(list1, list2)
Out[5]:
[<matplotlib.lines.Line2D at 0x11edc00b0>]
No description has been provided for this image
In [6]:
plt.plot(list1, list2, 's') # 'r^' 'gs' 'k--' 'b:' 'ro-'
Out[6]:
[<matplotlib.lines.Line2D at 0x11edbd6a0>]
No description has been provided for this image
In [7]:
plt.scatter(list1, list2)
Out[7]:
<matplotlib.collections.PathCollection at 0x11ed89700>
No description has been provided for this image
In [8]:
plt.bar(list1, list2, .5)
Out[8]:
<BarContainer object of 5 artists>
No description has been provided for this image
In [9]:
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)]
In [10]:
plt.plot(t, t2)
Out[10]:
[<matplotlib.lines.Line2D at 0x11efe8d10>]
No description has been provided for this image
In [11]:
plt.plot(t, t2, 'r', t, t3, 'g')
Out[11]:
[<matplotlib.lines.Line2D at 0x11ef604a0>,
 <matplotlib.lines.Line2D at 0x11f07dac0>]
No description has been provided for this image
In [12]:
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()
No description has been provided for this image
In [13]:
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()
No description has been provided for this image

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:

In [14]:
import math

math.factorial(5)
Out[14]:
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):

In [15]:
def comb(n, m):
    return math.factorial(n)//math.factorial(m)//math.factorial(n-m)
In [16]:
comb(25, 10)
Out[16]:
3268760
In [17]:
math.exp(1), math.exp(2) # the e^x function
Out[17]:
(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!

In [18]:
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)
In [19]:
binomial_dist, poison_dist
Out[19]:
(0.2907100492017224, 0.2623272261632803)
In [ ]: