Egy ábrán több grafikon megjelenítése:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10)
plt.subplot(1, 2, 1)
plt.plot(x, x)
plt.title("y = x")
plt.subplot(1, 2, 2)
plt.plot(x, x**2)
plt.title("y = x^2")
plt.tight_layout()
plt.show()
#Magyarázat: subplot(sorok, oszlopok, pozíció)
Komplexebb ábrák esetén strukturáltabb és tisztább.
Példa
fig, axes = plt.subplots(1, 2)
axes[0].plot(x, x)
axes[0].set_title("y = x")
axes[1].plot(x, x**2)
axes[1].set_title("y = x^2")
plt.tight_layout()
plt.show()
Feladat: Készíts 2×2 subplot elrendezést. Ábrázold:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1, 11)
fig, axes = plt.subplots(2, 2)
axes[0, 0].plot(x, x)
axes[0, 0].set_title("x")
axes[0, 1].plot(x, x**2)
axes[0, 1].set_title("x^2")
axes[1, 0].plot(x, x**3)
axes[1, 0].set_title("x^3")
axes[1, 1].plot(x, np.sqrt(x))
axes[1, 1].set_title("sqrt(x)")
plt.tight_layout()
plt.show()
Ábraméret
plt.figure(figsize=(8, 4)) plt.plot(x, x**2) plt.show()
Rácsvonal
plt.plot(x, x**2) plt.grid(True) plt.show()
OO módszerrel:
fig, ax = plt.subplots() ax.plot(x, x**2) ax.grid(True) plt.show()
Feladat:
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(1)
bevetel = np.random.randint(100, 501, size=(3, 12))
ossz = bevetel.sum(axis=1)
havi_atlag = bevetel.mean(axis=0)
fig, axes = plt.subplots(2, 1, figsize=(8, 6))
axes[0].bar(["1. év", "2. év", "3. év"], ossz)
axes[0].set_title("Évenkénti bevétel")
axes[1].plot(havi_atlag)
axes[1].set_title("Havi átlagbevétel")
axes[1].grid(True)
plt.tight_layout()
plt.show()
Fontos alapelvek
1. Feladat:
import numpy as np
import matplotlib.pyplot as plt
x = np.random.rand(200)
y = np.random.rand(200)
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
axes[0].scatter(x, y)
axes[0].set_title("Eredeti")
axes[1].scatter(x, y**2)
axes[1].set_title("Transzformált")
plt.tight_layout()
plt.show()
2. Feladat – Több függvény összehasonlítása 2×2 subplot rácsban
import numpy as np import matplotlib.pyplot as plt
plt.style.use("seaborn-v0_8")
x = np.linspace(0, 10, 300)
fig, axs = plt.subplots(2, 2, figsize=(10,8))
axs[0,0].plot(x, x)
axs[0,0].set_title("y = x")
axs[0,0].grid(True)
axs[0,1].plot(x, x**2)
axs[0,1].set_title("y = x^2")
axs[0,1].grid(True)
axs[1,0].plot(x, np.sqrt(x))
axs[1,0].set_title("y = sqrt(x)")
axs[1,0].grid(True)
axs[1,1].plot(x, np.sin(x))
axs[1,1].set_title("y = sin(x)")
axs[1,1].grid(True)
plt.tight_layout()
plt.show()
3. Feladat – Bevételi dashboard (2×1 layout)
import numpy as np import matplotlib.pyplot as plt
np.random.seed(0)
bevetel = np.random.randint(1000, 5000, (12, 3))
honapok = np.arange(1, 13)
fig, axs = plt.subplots(2, 1, figsize=(10,8))
#Felső grafikon
axs[0].plot(honapok, bevetel[:,0], label="Üzlet 1")
axs[0].plot(honapok, bevetel[:,1], label="Üzlet 2")
axs[0].plot(honapok, bevetel[:,2], label="Üzlet 3")
axs[0].set_title("Havi bevételek")
axs[0].set_xlabel("Hónap")
axs[0].set_ylabel("Bevétel")
axs[0].legend()
axs[0].grid(True)
#Alsó grafikon
eves = np.sum(bevetel, axis=0)
axs[1].bar(["Üzlet 1", "Üzlet 2", "Üzlet 3"], eves)
axs[1].set_title("Éves összbevétel")
axs[1].set_ylabel("Bevétel")
axs[1].grid(axis="y")
plt.tight_layout()
plt.show()
4. Feladat – Scatter és eloszlás egy ábrán (1×2 layout)
import numpy as np import matplotlib.pyplot as plt
plt.style.use("ggplot")
np.random.seed(1)
x = np.random.randn(500)
y = np.random.randn(500)
fig, axs = plt.subplots(1, 2, figsize=(12,5))
axs[0].scatter(x, y, alpha=0.6)
axs[0].set_title("Scatter plot")
axs[0].set_xlabel("X")
axs[0].set_ylabel("Y")
axs[0].grid(True)
axs[1].hist(y, bins=30)
axs[1].set_title("Y eloszlása")
axs[1].set_xlabel("Y")
axs[1].set_ylabel("Gyakoriság")
axs[1].grid(True)
plt.tight_layout()
plt.show()
5. Feladat – Hőtérkép és vonaldiagram kombináció
import numpy as np import matplotlib.pyplot as plt
np.random.seed(2)
matrix = np.random.rand(20, 20)
fig, axs = plt.subplots(1, 2, figsize=(12,5))
img = axs[0].imshow(matrix)
axs[0].set_title("Hőtérkép")
axs[0].set_xlabel("Oszlop")
axs[0].set_ylabel("Sor")
plt.colorbar(img, ax=axs[0])
col_mean = np.mean(matrix, axis=0)
axs[1].plot(col_mean)
axs[1].set_title("Oszlopátlagok")
axs[1].set_xlabel("Oszlop index")
axs[1].set_ylabel("Átlag")
axs[1].grid(True)
plt.tight_layout()
plt.show()
6. Feladat – Komplex 2×2 adatvizualizációs panel
import numpy as np import matplotlib.pyplot as plt
plt.style.use("bmh")
np.random.seed(3)
data = np.random.randn(1000)
fig, axs = plt.subplots(2, 2, figsize=(10,8))
#Hisztogram
axs[0,0].hist(data, bins=30)
axs[0,0].set_title("Hisztogram")
axs[0,0].grid(True)
#Boxplot
axs[0,1].boxplot(data)
axs[0,1].set_title("Boxplot")
axs[0,1].grid(True)
#Kumulatív összeg
cumsum = np.cumsum(data)
axs[1,0].plot(cumsum)
axs[1,0].set_title("Kumulatív összeg")
axs[1,0].grid(True)
#Rolling std (ablak=50)
window = 50
rolling_std = [np.std(data[i:i+window]) for i in range(len(data)-window)]
axs[1,1].plot(rolling_std)
axs[1,1].set_title("Rolling szórás (50)")
axs[1,1].grid(True)
plt.tight_layout()
plt.show()