matplotlib ile grafiğin anatomisi
Önkoşul:Keşifçi veri analizi (EDA) yöntemi
Kanca
Bu kursun her dersinde fig, ax = plt.subplots() yazdık, sonra ax.plot(...), ax.set_title(...) dedik. Neden plt.plot() yazmadık — internette gördüğün çoğu örnek tam olarak öyle yapıyor? İkisi de “çalışıyor”, ama biri seni ileride kurtarıyor.
Sezgi
Her matplotlib grafiğinde iki temel nesne vardır: Figure, tüm “tuval”dir (kağıdın kendisi, boyutu, arka planı) — Axes ise bu tuval üzerine çizim yaptığın “çerçeve”dir (eksenler, çizgiler, başlık burada yaşar). Bir Figure, birden fazla Axes içerebilir — plt.subplots(2, 3) dediğinde 6 ayrı Axes içeren tek bir Figure alırsın.
matplotlib’in iki kullanım biçimi bu ayrımdan doğar: pyplot biçimi (plt.plot(), plt.title()) o an “aktif” olan Axes’e sessizce işlem yapar — tek grafikte sorun değil. Nesne yönelimli biçim (ax.plot(), ax.set_title()) ise hangi Axes’e işlem yaptığını her zaman açıkça belirtir.
Mekanizma
Figure ve Axes nesnelerinin gerçekten ne olduğuna bakalım:
Figure ve Axes nesneleri
# Her matplotlib grafiğinde İKİ temel nesne vardır:
# Figure = tüm "tuval" (kağıt), Axes = üzerine çizim yaptığın "çerçeve" (bir tuvalde birden çok olabilir).
fig, ax = plt.subplots(figsize=(6, 4))
print(f"fig tipi: {type(fig).__name__}")
print(f"ax tipi: {type(ax).__name__}")
print("\nBir Figure, bir veya daha fazla Axes içerebilir — 'subplots' adı buradan gelir.")
plt.close(fig)fig tipi: Figure
ax tipi: Axes
Bir Figure, bir veya daha fazla Axes içerebilir — 'subplots' adı buradan gelir.plt.subplots() bize hem fig hem ax döndürdü — “subplots” adı buradan geliyor: birden fazla alt-grafik (sub-plot) barındırabilen bir Figure. Şimdi iki API biçimini karşılaştıralım:
pyplot vs nesne yönelimli
# matplotlib'in İKİ kullanım biçimi var: pyplot (durum tabanlı, plt.) ve nesne yönelimli (fig, ax).
# Tek grafikte ikisi de çalışır ama BİRDEN FAZLA grafik olunca nesne yönelimli olan çok daha güvenlidir.
gunler = np.arange(1, 8)
satis = rng.integers(80, 200, size=7)
# pyplot biçimi (basit ama hangi ekseni değiştirdiğin belirsizleşebilir)
plt.figure(figsize=(5, 3))
plt.plot(gunler, satis)
plt.title("pyplot biçimi")
plt.close()
# Nesne yönelimli biçim (hangi ekseni değiştirdiğin HER ZAMAN net)
fig2, ax2 = plt.subplots(figsize=(5, 3))
ax2.plot(gunler, satis)
ax2.set_title("Nesne yönelimli biçim")
plt.close(fig2)
print("İki biçim de aynı grafiği çizer — ama 2'den fazla panelde nesne yönelimli (ax.) tercih edilir.")İki biçim de aynı grafiği çizer — ama 2'den fazla panelde nesne yönelimli (ax.) tercih edilir.Tek grafikte ikisi de aynı sonucu verdi. Çoğu yeni başlayan “pyplot daha kısa, hep onu kullanayım” der. Değil, çünkü 2’den fazla panelli bir figürde (plt.subplots(2, 2) gibi) plt.title() HANGİ panele yazacağını bilemez — sadece “şu an aktif olan” panele yazar, ki bu genelde en son çizdiğin paneldir. ax.set_title() ise her zaman AÇIKÇA hangi paneli kastettiğini belirtir; bu kursun tüm çok-panelli figürlerinde nesne yönelimli API’yi kullanmamızın sebebi tam olarak bu.
Matematik
Bir grafiğin anatomi parçaları
| Parça | Kod karşılığı | Anlamı |
|---|---|---|
| Figure | fig | Tüm tuval — boyut, arka plan rengi burada ayarlanır |
| Axes | ax | Çizimin yapıldığı çerçeve — bir Figure’da birden fazla olabilir |
| Başlık | ax.set_title() | Axes’in üstündeki metin |
| Eksen etiketi | ax.set_xlabel(), ax.set_ylabel() | Eksenlerin ne temsil ettiğini açıklayan metin |
| Kenar çizgisi (spine) | ax.spines[...] | Axes’i çevreleyen dört kenar çizgisi |
| İşaret (tick) | ax.set_xticks() | Eksen üzerindeki değer işaretleri |
| Efsane (legend) | ax.legend() | Birden fazla seriyi ayırt eden açıklama kutusu |
Bu terimleri bilmek önemli çünkü matplotlib dokümantasyonu ve hata mesajları bu isimleri kullanır — “spine” veya “tick” gördüğünde ne olduğunu bileceksin.
Kod
Bu parçaları gerçek bir grafik üzerinde etiketleyelim:
Nerede işe yarar
Figure/Axes ayrımını anlamak, ileride karşılaşacağın her matplotlib kodunu okumayı kolaylaştırır:
- Çok panelli raporlar. Bir EDA raporunda 4-6 grafiği tek bir Figure’da yan yana göstermek (
plt.subplots(2, 3)). - Yeniden kullanılabilir grafik fonksiyonları. Bir
axnesnesini parametre olarak alan fonksiyonlar, farklı panellere aynı çizim mantığını uygulayabilir. - Kütüphaneler arası uyum. seaborn (14. ders) gibi kütüphaneler de
axparametresi kabul eder — matplotlib’in nesne yönelimli API’sini bilmek, bu kütüphaneleri de kontrol etmeni sağlar.
Bu 3 hatayı yaparsın:
- Çok panelli bir figürde
plt.title()kullanıp yanlış (veya en son çizilen) panele başlık eklemek. - Figure ve Axes’i aynı şey sanmak — biri tuval, diğeri çerçeve.
fig.savefig()yerineplt.savefig()kullanıp, çok figürlü bir ortamda yanlış figürü kaydetmek.
Kendini test et
1. Figure ile Axes arasındaki temel fark nedir?
- Aralarında fark yoktur
- Figure tüm tuvaldir, Axes ise üzerine çizim yapılan çerçevedir — bir Figure birden fazla Axes içerebilir (doğru cevap)
- Axes her zaman Figure'dan büyüktür
- Figure sadece başlık için kullanılır
Neden: Figure, grafiğin tamamını kapsayan tuvaldir; Axes ise üzerinde eksenlerin, çizgilerin ve etiketlerin bulunduğu çerçevedir — plt.subplots(2,3) gibi bir çağrı tek Figure'da 6 Axes üretir.
2. Neden çok panelli figürlerde nesne yönelimli API (ax.set_title()) pyplot API'sine (plt.title()) tercih edilir?
- Nesne yönelimli API daha yavaştır ama daha güzeldir
- plt.title() sadece "aktif" olan panele uygulanır, hangi panelin aktif olduğu karışabilir; ax.set_title() her zaman açıktır (doğru cevap)
- pyplot API artık desteklenmiyor
- Aralarında fark yoktur
Neden: pyplot fonksiyonları o an aktif olan Axes'e sessizce işlem yapar; birden fazla panel varken bu belirsizliğe yol açabilir. ax. çağrıları her zaman hangi panele işlem yapıldığını açıkça belirtir.
3. "Spine" terimi bir matplotlib grafiğinde neyi ifade eder?
- Grafiğin başlığını
- Axes'i çevreleyen kenar çizgilerini (doğru cevap)
- Efsaneyi (legend)
- Renk paletini
Neden: Spine (kenar çizgisi), bir Axes'in dört kenarını çevreleyen çizgilerdir — genelde üst ve sağ kenar çizgileri estetik amaçla gizlenir (academyou.mplstyle'da da böyle).
Özet
Özet
- Figure, tüm tuvaldir; Axes, üzerine çizim yapılan çerçevedir — bir Figure birden fazla Axes içerebilir.
- pyplot API (plt.) tek grafikte pratiktir ama çok panelli figürlerde hangi panele işlem yaptığı belirsizleşir.
- Nesne yönelimli API (ax.) her zaman hangi Axes'e işlem yapıldığını açıkça belirtir — bu kursta tercih ettiğimiz yol.
- Başlık, eksen etiketi, efsane, kenar çizgisi ve işaret, bir grafiğin standart parçalarıdır.
- Bu terimleri bilmek, matplotlib dokümantasyonunu ve seaborn gibi üzerine kurulu kütüphaneleri okumayı kolaylaştırır.