Ana içeriğe geç

Giriş12 dk

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çerebilirplt.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çaKod karşılığıAnlamı
FigurefigTüm tuval — boyut, arka plan rengi burada ayarlanır
AxesaxÇizimin yapıldığı çerçeve — bir Figure’da birden fazla olabilir
Başlıkax.set_title()Axes’in üstündeki metin
Eksen etiketiax.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:

sin(x) ve cos(x) eğrilerini gösteren bir grafik; başlık, eksen etiketleri, efsane, kenar çizgisi ve işaretler üzerlerinde etiketlerle işaretlenmiş.
Bu grafiğin kendisi, kendi parçalarını etiketliyor — Figure, Axes, başlık, eksen etiketi, efsane, kenar çizgisi ve işaret hepsi görünür.

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 ax nesnesini parametre olarak alan fonksiyonlar, farklı panellere aynı çizim mantığını uygulayabilir.
  • Kütüphaneler arası uyum. seaborn (14. ders) gibi kütüphaneler de ax parametresi kabul eder — matplotlib’in nesne yönelimli API’sini bilmek, bu kütüphaneleri de kontrol etmeni sağlar.

Bu 3 hatayı yaparsın:

  1. Çok panelli bir figürde plt.title() kullanıp yanlış (veya en son çizilen) panele başlık eklemek.
  2. Figure ve Axes’i aynı şey sanmak — biri tuval, diğeri çerçeve.
  3. fig.savefig() yerine plt.savefig() kullanıp, çok figürlü bir ortamda yanlış figürü kaydetmek.

Kendini test et

1. Figure ile Axes arasındaki temel fark nedir?
  1. Aralarında fark yoktur
  2. Figure tüm tuvaldir, Axes ise üzerine çizim yapılan çerçevedir — bir Figure birden fazla Axes içerebilir (doğru cevap)
  3. Axes her zaman Figure'dan büyüktür
  4. 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?
  1. Nesne yönelimli API daha yavaştır ama daha güzeldir
  2. 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)
  3. pyplot API artık desteklenmiyor
  4. 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?
  1. Grafiğin başlığını
  2. Axes'i çevreleyen kenar çizgilerini (doğru cevap)
  3. Efsaneyi (legend)
  4. 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.
Sonraki adım: seaborn: hangi grafik ne zaman →