{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Rajzolás (plotting) Pythonban\n", "A [`Matplotlib`](https://matplotlib.org/) egy átfogó könyvtár statikus, animált és interaktív vizualizációk létrehozásához a Pythonban. Számtalan [tutoriál](https://matplotlib.org/tutorials/index.html) 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." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import random" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "list1 = range(5)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.plot(list1)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "list2 = [random.random() for _ in range(5)]\n", "print(list2)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.plot(list1, list2)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.plot(list1, list2, 's') # 'r^' 'gs' 'k--' 'b:' 'ro-'" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.scatter(list1, list2)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.bar(list1, list2, .5)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "t = [i*0.01 for i in range(251)]\n", "t2 = [(i*0.01)**2 for i in range(251)]\n", "t3 = [(i*0.01)**3 for i in range(251)]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.plot(t, t2)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.plot(t, t2, 'r', t, t3, 'g')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.figure(figsize=(12, 3))\n", "\n", "plt.subplot(131)\n", "plt.bar(list1,list2)\n", "\n", "plt.subplot(132)\n", "plt.scatter(list1,list2)\n", "\n", "plt.subplot(133)\n", "plt.plot(list1,list2)\n", "\n", "plt.suptitle('Functions')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.figure(figsize=(8, 12))\n", "\n", "plt.subplot(311)\n", "plt.bar(list1,list2)\n", "plt.title(\"Bar\")\n", "\n", "plt.subplot(312)\n", "plt.scatter(list1,list2)\n", "plt.title(\"Scattered\")\n", "\n", "plt.subplot(313)\n", "plt.plot(list1,list2)\n", "plt.title(\"Plot\")\n", "\n", "plt.suptitle('Functions')\n", "\n", "plt.tight_layout() \n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***Feladat:*** Másoljuk az alábbi kódot egy `4test.py` nevű fájlba, majd futtassuk a `python3 4test.py 4` paranccsal.\n", "\n", "\n", "```Python\n", "import matplotlib.pyplot as plt\n", "import random\n", "import sys\n", "\n", "def my_plot():\n", " \"\"\"\n", " Plotting n random values.\n", " n is read in from the terminal.\n", " \"\"\"\n", " \n", " n = int(sys.argv[1])\n", " \n", " list1 = range(n)\n", " list2 = [random.random() for _ in range(n)]\n", " list3 = [i**2 for i in list2]\n", " \n", " plt.subplot(311)\n", " plt.bar(list1,list1)\n", " plt.subplot(312)\n", " plt.bar(list1,list2)\n", " plt.subplot(313)\n", " plt.bar(list1,list3)\n", " plt.show()\n", "\n", "def main():\n", " my_plot()\n", "\n", "if __name__ == \"__main__\":\n", " main()\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## A `math` modul\n", "A faktoriális vagy az exponenciális függvény számításához használhatjuk a `math` modult: " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import math\n", "\n", "math.factorial(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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):" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def comb(n, m):\n", " return math.factorial(n)//math.factorial(m)//math.factorial(n-m)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "comb(25, 10)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "math.exp(1), math.exp(2) # the e^x function" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***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!" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "n = 10\n", "p = 1/6\n", "m = 2\n", "l = n*p\n", "\n", "binomial_dist = comb(n, m) * p**m * (1-p)**(n-m)\n", "poison_dist = l**m * math.exp(-l) / math.factorial(m)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "binomial_dist, poison_dist" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.3" } }, "nbformat": 4, "nbformat_minor": 4 }