Table of Contents
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: <sxh python> import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4]) plt.show() </sxh>
Alap vonaldiagram (line plot)
Példa <sxh python> import numpy as np import matplotlib.pyplot as plt
x = np.arange(0, 5) y = x 2 plt.plot(x, y) plt.show() </sxh> Feladat? Hozz létre x = 0–10 közötti értékeket. Számold ki y = 2x + 1. Ábrázold. <sxh python> import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 11) y = 2 * x + 1 plt.plot(x, y) plt.show() </sxh> ==== Címek és tengelyfeliratok ==== Példa: <sxh python> plt.title(“Grafikon címe”) plt.xlabel(“X tengely”) plt.ylabel(“Y tengely”) </sxh> Feladat: Az előző grafikont egészítsd ki: * címmel * tengelyfeliratokkal <sxh python> plt.plot(x, y) plt.title(“Lineáris függvény”) plt.xlabel(“x érték”) plt.ylabel(“y = 2x + 1”) plt.show() </sxh> ==== Több adat egy grafikonon ==== Példa <sxh python> x = np.arange(0, 10) plt.plot(x, x, label=“y = x”) plt.plot(x, x2, label=“y = x^2”)
plt.legend() plt.show() </sxh>
Feladat:
- Ábrázold egy grafikonon:
- y = x
- y = x²
- y = x³
- Adj legendát
<sxh python> import numpy as np import matplotlib.pyplot as plt
x = np.arange(0, 10)
plt.plot(x, x, label=“x”) plt.plot(x, x2, label=“x^2”) plt.plot(x, x3, label=“x^3”)
plt.legend() plt.title(“Hatványfüggvények”) plt.show() </sxh>
Pontdiagram (scatter plot)
Példa <sxh python> x = np.random.rand(50) y = np.random.rand(50) plt.scatter(x, y) plt.show() </sxh>
Feladat: Generálj 100 véletlen pontot. Ábrázold scatter plotként <sxh python> 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() </sxh>
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
<sxh python> 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() </sxh>
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.
<sxh python> import numpy as np import matplotlib.pyplot as plt
x = np.linspace(0, 10, 200)
y1 = x2 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() </sxh> 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. <sxh python> 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() </sxh> 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. <sxh python> 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() </sxh> 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. <sxh python> 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() </sxh> 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.
<sxh python> 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() </sxh>
