====== 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()