====== Matplotlib I – alap plotok, tengelyek, címek, vizualizáció alapelvek ====== ==== Mi az adatvizualizáció? ==== A vizualizáció célja: * trendek felismerése * összehasonlítás * kiugró értékek azonosítása Használt könyvtár: * import matplotlib.pyplot as plt Példa: import matplotlib.pyplot as plt plt.plot([1, 2, 3, 4]) plt.show() ==== Alap vonaldiagram (line plot) ==== Példa import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 5) y = x ** 2 plt.plot(x, y) plt.show() Feladat? Hozz létre x = 0–10 közötti értékeket. Számold ki y = 2x + 1. Ábrázold. import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 11) y = 2 * x + 1 plt.plot(x, y) plt.show() ==== Címek és tengelyfeliratok ==== Példa: plt.title("Grafikon címe") plt.xlabel("X tengely") plt.ylabel("Y tengely") Feladat: Az előző grafikont egészítsd ki: * címmel * tengelyfeliratokkal plt.plot(x, y) plt.title("Lineáris függvény") plt.xlabel("x érték") plt.ylabel("y = 2x + 1") plt.show() ==== Több adat egy grafikonon ==== Példa x = np.arange(0, 10) plt.plot(x, x, label="y = x") plt.plot(x, x**2, label="y = x^2") plt.legend() plt.show() Feladat: * Ábrázold egy grafikonon: * y = x * y = x² * y = x³ * Adj legendát import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 10) plt.plot(x, x, label="x") plt.plot(x, x**2, label="x^2") plt.plot(x, x**3, label="x^3") plt.legend() plt.title("Hatványfüggvények") plt.show() ==== Pontdiagram (scatter plot) ==== Példa x = np.random.rand(50) y = np.random.rand(50) plt.scatter(x, y) plt.show() Feladat: Generálj 100 véletlen pontot. Ábrázold scatter plotként import numpy as np import matplotlib.pyplot as plt x = np.random.rand(100) y = np.random.rand(100) plt.scatter(x, y) plt.title("Véletlen pontok") plt.show() ==== Vizualizáció alapelvek ==== - Mindig adj címet - Jelöld a tengelyeket - Ne zsúfold túl a grafikont - A grafikon válaszoljon egy konkrét kérdésre ---- ==== Összefoglaló feladatok ==== **1.feladat: Készíts a bevétel mátrixot. Számold ki az évenkénti összbevételt. Ábrázold oszlopdiagramon** import numpy as np import matplotlib.pyplot as plt np.random.seed(0) bevetel = np.random.randint(100, 501, size=(3, 12)) ossz_bevetel = bevetel.sum(axis=1) evek = ["1. év", "2. év", "3. év"] plt.bar(evek, ossz_bevetel) plt.title("Évenkénti bevétel") plt.ylabel("Összeg") plt.show() **2. Feladat – Függvények összehasonlító ábrázolása** - Generálj 0 és 10 közötti 200 pontot. - Ábrázold egy grafikonon: * ​y = x^2 * y = ✔x - Adj címet az ábrának. - Jelöld a tengelyeket. - Adj jelmagyarázatot. - Használj különböző vonalstílust. import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 10, 200) y1 = x**2 y2 = np.sqrt(x) plt.figure(figsize=(8,5)) plt.plot(x, y1, label="y = x^2", linestyle="-") plt.plot(x, y2, label="y = sqrt(x)", linestyle="--") plt.title("Függvények összehasonlítása") plt.xlabel("X tengely") plt.ylabel("Y tengely") plt.legend() plt.grid(True) plt.show() **3. Feladat – Vizsgaeredmények vizualizálása** - Generálj egy 10×4-es pontszám mátrixot (0–100). - Számold ki tantárgyanként az átlagot. - Készíts oszlopdiagramot az átlagokról. - Állíts be: - címet - tengelyfeliratokat - rácsvonalat - Ábrázold az átlagértékeket a sávok felett. import numpy as np import matplotlib.pyplot as plt np.random.seed(0) pontok = np.random.randint(0, 101, (10, 4)) atlagok = np.mean(pontok, axis=0) tantargyak = ["Matek", "Fizika", "Info", "Töri"] plt.figure(figsize=(8,5)) bars = plt.bar(tantargyak, atlagok) plt.title("Tantárgyi átlagpontszámok") plt.xlabel("Tantárgy") plt.ylabel("Átlagpontszám") plt.grid(axis="y") for bar in bars: height = bar.get_height() plt.text(bar.get_x() + bar.get_width()/2, height, f"{height:.1f}", ha='center', va='bottom') plt.show() **4. Feladat – Idősor vizualizáció** - Generálj 365 napos hőmérséklet adatot. - Számíts 7 napos mozgóátlagot. - Ábrázold: - napi adatokat halvány vonallal - mozgóátlagot vastag vonallal - Adj címet és tengelyfeliratokat. - Emeld ki a 30°C feletti napokat külön jelöléssel. import numpy as np import matplotlib.pyplot as plt np.random.seed(1) napok = np.arange(365) homerseklet = np.random.normal(20, 10, 365) kernel = np.ones(7) / 7 mozgo_atlag = np.convolve(homerseklet, kernel, mode="valid") plt.figure(figsize=(10,5)) plt.plot(napok, homerseklet, alpha=0.4, label="Napi hőmérséklet") plt.plot(napok[6:], mozgo_atlag, linewidth=3, label="7 napos mozgóátlag") hot_days = homerseklet > 30 plt.scatter(napok[hot_days], homerseklet[hot_days], marker="o") plt.title("Éves hőmérséklet alakulása") plt.xlabel("Nap") plt.ylabel("Hőmérséklet (°C)") plt.legend() plt.grid(True) plt.show() **5. Feladat – Mátrix vizualizáció (hőtérkép alap)** - Generálj 20×20-as véletlen mátrixot. - Ábrázold imshow() segítségével. - Adj színskálát (colorbar). - Adj címet. - Jelöld a tengelyeket. import numpy as np import matplotlib.pyplot as plt np.random.seed(2) matrix = np.random.rand(20, 20) plt.figure(figsize=(6,6)) img = plt.imshow(matrix) plt.colorbar(img) plt.title("Véletlen mátrix hőtérkép") plt.xlabel("Oszlop index") plt.ylabel("Sor index") plt.show() **6. Feladat – Bevételi adatok több grafikonon** - Generálj 12 hónap × 3 üzlet bevételi adatot. - Ábrázold: - vonaldiagramon az üzletek havi bevételét - külön grafikonon az éves összbevételt oszlopdiagramként - Használj subplot()-ot. - Adj címeket és jelmagyarázatot. import numpy as np import matplotlib.pyplot as plt np.random.seed(3) bevetel = np.random.randint(1000, 5000, (12, 3)) honapok = np.arange(1, 13) plt.figure(figsize=(10,8)) #1. grafikon plt.subplot(2,1,1) plt.plot(honapok, bevetel[:,0], label="Üzlet 1") plt.plot(honapok, bevetel[:,1], label="Üzlet 2") plt.plot(honapok, bevetel[:,2], label="Üzlet 3") plt.title("Havi bevételek") plt.xlabel("Hónap") plt.ylabel("Bevétel") plt.legend() plt.grid(True) #2. grafikon plt.subplot(2,1,2) eves = np.sum(bevetel, axis=0) plt.bar(["Üzlet 1", "Üzlet 2", "Üzlet 3"], eves) plt.title("Éves bevétel üzletenként") plt.xlabel("Üzlet") plt.ylabel("Összes bevétel") plt.grid(axis="y") plt.tight_layout() plt.show()