Python'da grafik çizmek: matplotlib ve seaborn ile adım adım
Beceri rehberi

Python'da grafik çizmek: matplotlib ve seaborn ile adım adım

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 5 dk okuma

Python'da matplotlib ve seaborn ile grafik nasıl çizilir? Figure ve eksen mantığı, grafik türü seçimi, pandas ile kullanım, örnek kod akışı ve sık hatalar.

Python'da grafik çizmenin temel mantığı

Python'da grafik çizmek, veriyi bir çizim kütüphanesine vermek ve onu bir grafik nesnesine dönüştürmek demektir. En yaygın kütüphane matplotlib'dir; çizimin tüm yapı taşlarını (figür, eksen, çizgi, işaret, etiket) tek tek denetlemenize izin verir. Seaborn ise matplotlib'in üzerine kurulmuş, istatistiksel grafikleri daha az kodla ve daha okunur varsayılan görünümle üreten bir kütüphanedir. Plotly gibi kütüphaneler ise etkileşimli, web tabanlı grafikler için kullanılır.

Öğrenmeyi kolaylaştıran temel fikir şudur: matplotlib bir tuval ve araçlar sunar, seaborn ise veri tablosuna (pandas DataFrame) bakıp hangi grafiğin uygun olduğunu bilen kısayollar sağlar. Pratik çalışmalarda ikisi birlikte kullanılır: seaborn ile grafik üretilir, matplotlib ile başlık, etiket ve boyut gibi ayrıntılar düzenlenir.

Figure ve Axes: matplotlib'i anlamanın anahtarı

Matplotlib'de şu kavramlar her şeyi açıklar: figür ve eksen. Figure, tüm çizim alanını (kağıdı) temsil eder. Axes ise bu kağıt üzerindeki tek bir grafiği, yani eksenleri, çizgileri ve etiketleri taşıyan bölümü temsil eder. Bir figür içinde birden çok eksen olabilir; yan yana grafik karşılaştırmaları bu yapıyla yapılır.

Kullanım biçimi pyplot ya da nesne yönelimli olabilir. Hızlı denemelerde pyplot arayüzü kullanılır: import matplotlib.pyplot as plt satırından sonra plt.plot(x, y) ve plt.show() yeterlidir. Ancak başlık, etiket ve birden çok grafik gerektiğinde nesne yönelimli biçim daha düzenlidir: fig, ax = plt.subplots() ile figür ve eksen oluşturulur, ardından ax.plot(x, y), ax.set_title('Başlık'), ax.set_xlabel('X ekseni'), ax.set_ylabel('Y ekseni') gibi çağrılarla özelleştirilir. Bu biçim, kodun neyi hangi grafiğe uyguladığını net tutar ve karmaşık sayfalarda hata riskini azaltır.

Grafiği dosyaya kaydetmek için plt.savefig('grafik.png') kullanılır; yayına ya da sunuma gidecek çıktılarda çözünürlük ve boyut ayarlanır.

Hangi grafik türü hangi soruya cevap verir?

Grafik seçimi tekniğe değil, soruya bağlıdır.

  • Zaman içindeki değişim: çizgi grafiği (plt.plot ya da sns.lineplot)
  • Kategoriler arası karşılaştırma: çubuk grafiği (ax.bar ya da sns.barplot)
  • Tek bir değişkenin dağılımı: histogram (sns.histplot) ya da yoğunluk grafiği
  • Gruplar arası dağılım karşılaştırması ve aykırı değerler: kutu grafiği (sns.boxplot)
  • Sayısal değişkenler arasındaki ilişki: dağılım grafiği (sns.scatterplot)
  • Birçok değişken arasındaki ilişkiler: korelasyon matrisi ısı haritası (sns.heatmap)
  • Parçaların bütüne katkısı: istiflenmiş çubuk; pasta grafiği yalnızca az sayıda kategoride ve gerekirse

Bir çubuk grafikle zaman serisi göstermek ya da çok kategorili pasta grafiği çizmek, okuyucuyu yanlış yönlendirir. Önce 'bu grafik hangi soruyu cevaplıyor?' diye sormak, kütüphane ayrıntısından önemlidir.

Pandas ile birlikte çalışmak: örnek iş akışı

Gerçek çalışmada veri genellikle pandas DataFrame olarak gelir ve çizim bu tablodan yapılır. Tipik akış şöyledir:

  • Veriyi okumak (CSV, Excel, veri tabanı) ve ilk bakış: df.head(), df.info(), df.describe()
  • Veriyi hazırlamak: eksik değerleri ele almak, tarih sütununu tarih türüne çevirmek, gerekirse gruplayıp özetlemek (df.groupby)
  • Soruya uygun grafiği seçmek ve çizmek: sns.barplot(data=df, x='kategori', y='satis')
  • Okunabilir hale getirmek: başlık, eksen etiketi, uygun renk, gerekirse eksen etiketlerini döndürmek
  • Çıktıyı kaydetmek veya rapora koymak

Örneğin bir satış tablosunda ürün kategorilerinin satışını karşılaştırmak için önce kategori bazında toplama yapılır, sonra çubuk grafiği çizilir ve çubuklar büyükten küçüğe sıralanır. Aynı tabloda ay bazında trend için tarih sütunu sıralanıp çizgi grafiği kullanılır. Bu grafikler farklı sorulara cevap verir ve aynı veriden türer.

Seaborn'un önemli kolaylığı, 'hue' gibi parametrelerle bir kategoriye göre renklendirmeyi tek satırda yapmasıdır; aynı iş matplotlib'de döngü gerektirir.

Okunabilir ve dürüst grafik için özelleştirme

Çalışan bir grafik ile iletişim kuran bir grafik farklı şeylerdir. Başlık grafiğin ne gösterdiğini söylemeli, eksenler birim ve açıklama taşımalı, renkler anlamlı kullanılmalıdır. Renkler çok olunca gürültü olur; vurgulanacak seriyi koyu, diğerlerini sönük renkte göstermek dikkati yönlendirir. Renk körlüğüne uygun palet seçmek erişilebilirliği artırır.

Eksen ölçeği de önemlidir. Çubuk grafikte eksenin sıfırdan başlamaması farkları olduğundan büyük gösterir ve yanıltıcıdır. Logaritmik ölçek gerekçesi okuyucuya belirtilmeden kullanılmamalıdır. Gereksiz çerçeve, ızgara ve süslemeyi azaltmak veriyi öne çıkarır.

Seaborn'un tema ve palet ayarları (sns.set_theme gibi) tutarlı bir görünüm sağlar. Birden çok grafik içeren bir raporda aynı kategorinin aynı renkle gösterilmesi okumayı kolaylaştırır. Veri hikâyeciliği açısından her grafiğe tek bir ana mesaj yüklemek ve başlığı bu mesajla yazmak etkilidir.

Öğrenme yolu: başlangıçtan ileriye

İlk aşamada Python temelleri ve pandas ile veri okuma yeterlidir; ardından matplotlib'de çizgi, çubuk ve dağılım grafiklerini figür ve eksen mantığıyla çizmek öğrenilir. Sonraki aşamada seaborn ile dağılım, ilişki ve kategorik grafikleri, çok panelli sayfaları ve temaları kullanmak gelir. Ardından Plotly gibi kütüphanelerle etkileşimli grafikler ve basit pano tasarımları denenir. En ileri aşamada veri hikâyeciliği, kurumsal şablon ve otomatik rapor üretimi öne çıkar.

Mindset kataloğunda Python ile Veri Görselleştirme programının modülleri arasında Python görselleştirme ekosistemi ve matplotlib temelleri, seaborn ile istatistiksel görselleştirme, Plotly ile etkileşimli ve web tabanlı görselleştirme, veri hikâyeciliği ve etkili görsel tasarım, matplotlib ile ileri grafik özelleştirme yer alıyor. Python ile Veri Görselleştirme ve Üretken Tasarım programı ise etkileşimli ve dinamik görselleştirmelerin yanında veri sanatı ve algoritmik tasarım konularını kapsıyor.

Sık yapılan hatalar

Başlangıçta ve ileri düzeyde tekrar eden hatalar:

  • Soruyu belirlemeden grafik seçmek; veriye uyan her grafiği çizmek
  • plt.show() sonrasında figürün sıfırlandığını unutmak; aynı kodu çalıştırdıkça üst üste çizilen grafikler
  • Pyplot arayüzü ile nesne yönelimli arayüzü aynı kodda karıştırmak
  • Eksen etiketlerini, birimleri ve başlığı atlamak
  • Aşırı çok kategoriyi tek grafikte göstermek; okunmayan etiketler
  • Tarih sütununu metin olarak bırakıp zaman ekseninin yanlış sıralanması
  • Dağılım grafiğinde çok nokta olduğunda şeffaflık ve örnekleme kullanmamak
  • Renk paletini anlam taşımadan seçmek; ardışık veriye kategorik palet vermek

Bu hatalar genellikle kod bilgisinden çok grafik okuryazarlığıyla ilgilidir; iyi bir kontrol, grafiği ilk kez gören birinin ne anladığına bakmaktır.

İlgili Mindset programı

Python ile Veri Görselleştirme

Sık sorulanlar

Sık sorulan sorular

Matplotlib mi seaborn mı öğrenilmeli?

İkisi birbirine rakip değil, tamamlayıcıdır. Seaborn, matplotlib üzerine kurulduğu için özelleştirme sırasında matplotlib bilgisi gerekir. Önce matplotlib'in figür ve eksen mantığını kavramak, sonra seaborn ile istatistiksel grafikleri hızlı üretmek en sağlam yoldur.

Python'da grafik çizmek için pandas bilmek şart mı?

Şart değil ama pratikte çok işe yarar. Matplotlib listelerle de çalışır, ancak gerçek veri genellikle tablo halindedir ve pandas ile okunup özetlenir. Seaborn doğrudan DataFrame ile çalışacak biçimde tasarlandığından temel pandas bilgisi öğrenmeyi belirgin biçimde kolaylaştırır.

Etkileşimli grafik için hangi kütüphane kullanılır?

Etkileşimli, fareyle üzerine gelince bilgi gösteren veya web sayfasına gömülebilen grafikler için Plotly yaygın bir seçenektir. Matplotlib ve seaborn genellikle statik görüntü üretir. Rapor ve basılı çıktılarda statik grafik, pano ve web uygulamasında etkileşimli grafik daha uygun olur.

Grafiği nasıl kaydedip rapora koyarım?

Matplotlib'de plt.savefig ile grafik görüntü dosyası olarak kaydedilir; dosya adı ve biçim parametreyle belirtilir. Sunum ve baskı için çözünürlük yüksek tutulur, web için dosya boyutu dengelenir. Kaydetme komutu plt.show'dan önce çağrılmalıdır; aksi halde boş bir görüntü oluşabilir.

Grafik türünü nasıl seçerim?

Önce cevaplamak istediğiniz soruyu yazın. Zaman içindeki değişim için çizgi, kategorileri karşılaştırmak için çubuk, dağılımı görmek için histogram veya kutu grafiği, değişkenler arası ilişki için dağılım grafiği uygundur. Seçimi kütüphane değil, sorunun doğası belirler.

Python ile Grafik Çizme: Matplotlib ve Seaborn