User Tools

Site Tools


tanszek:oktatas:muszaki_informatika:matplotlib_ii._toebb_plot_stilus_feliratok

Matplotlib II – subplotok, több grafikon egy ábrán, grid, stílus, layout

Subplot alapok

Egy ábrán több grafikon megjelenítése:

<sxh python> 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, x2) plt.title(“y = x^2”) plt.tight_layout() plt.show() #Magyarázat: subplot(sorok, oszlopok, pozíció) </sxh> ==== Objektumorientált (OO) megközelítés ==== Komplexebb ábrák esetén strukturáltabb és tisztább. Példa <sxh python> fig, axes = plt.subplots(1, 2) axes[0].plot(x, x) axes[0].set_title(“y = x”) axes[1].plot(x, x2) axes[1].set_title(“y = x^2”)

plt.tight_layout() plt.show() </sxh>

Feladat: Készíts 2×2 subplot elrendezést. Ábrázold:

  • x
  • sqrt(x)

<sxh python> 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, x2) axes[0, 1].set_title(“x^2”) axes[1, 0].plot(x, x3) 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() </sxh>

Ábraméret és grid

Ábraméret <sxh python> plt.figure(figsize=(8, 4)) plt.plot(x, x2) plt.show() </sxh> Rácsvonal <sxh python> plt.plot(x, x2) plt.grid(True) plt.show() </sxh>

OO módszerrel: <sxh python> fig, ax = plt.subplots() ax.plot(x, x2) ax.grid(True) plt.show() </sxh> ==== Kombinált vizualizáció ==== Feladat: * Egy cég havi bevétele 3 évre (NumPy mátrix): * Felső grafikon: évenkénti összbevétel (bar) * Alsó grafikon: havi átlagbevétel (line) <sxh python> 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() </sxh> ==== Stílus és olvashatóság ==== Fontos alapelvek * Ne használj túl sok görbét egy grafikonon * Ha összehasonlítás a cél → subplot * Használj gridet trendekhez * Az ábra válaszoljon egy konkrét kérdésre ==== Összefoglaló feladatok ==== 1. Feladat: * Generálj 200 véletlen pontot. * Bal oldalon scatter plot * Jobb oldalon ugyanaz, de négyzetre emelt y értékkel <sxh python> 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, y2) axes[1].set_title(“Transzformált”)

plt.tight_layout() plt.show() </sxh>

2. Feladat – Több függvény összehasonlítása 2×2 subplot rácsban

  1. Generálj 0–10 intervallumon 300 pontot.
  2. Ábrázold 2×2-es subplot elrendezésben:
    • y = x
    • y = x^2
    • y = sqrt(x)
    • y = sin(x)
  3. Minden grafikon kapjon külön címet.
  4. Használj egységes stílust.
  5. Alkalmazz tight_layout()-ot.

<sxh python> 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, x2) 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() </sxh> 3. Feladat – Bevételi dashboard (2×1 layout) - Generálj 12×3 bevételi adatot. - Felső subplot: vonaldiagram havi bevételről üzletenként. - Alsó subplot: oszlopdiagram az éves összbevételről. - Használj grid-et. - Igazítsd a layout-ot. <sxh python> 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() </sxh> 4. Feladat – Scatter és eloszlás egy ábrán (1×2 layout) - Generálj 500 darab (x,y) normál eloszlású pontot. - Bal oldalon scatter plot. - Jobb oldalon hisztogram az y értékekről. - Használj közös stílust. - Adj címeket és rácsvonalat. <sxh python> 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() </sxh> 5. Feladat – Hőtérkép és vonaldiagram kombináció - Generálj 20×20-as mátrixot. - Bal subplot: imshow() hőtérkép. - Jobb subplot: az oszlopátlagok vonaldiagramja. - Adj colorbar-t. - Használj layout optimalizálást. <sxh python> 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() </sxh> 6. Feladat – Komplex 2×2 adatvizualizációs panel**

  1. Generálj 1000 normál eloszlású adatot.
  2. Készíts 2×2 panelt:
  3. Hisztogram
  4. Dobozdiagram (boxplot)
  5. Kumulatív összeg grafikon
  6. Szórásablakos (rolling std) grafikon
  7. Használj egységes stílust és layout optimalizálást.

<sxh python> 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() </sxh>

tanszek/oktatas/muszaki_informatika/matplotlib_ii._toebb_plot_stilus_feliratok.txt · Last modified: 2026/02/27 08:29 by szabom