Matplotlib, Python programlama dili için geliştirilmiş en eski ve en yaygın kullanılan veri görselleştirme kütüphanelerinden biridir. Grafikler, çizgi grafikler, çubuk grafikler, pasta grafikler, histogramlar, scatter plotlar ve daha fazlasını oluşturmak için kullanılır.
Tarihçesi
Matplotlib, 2003 yılında John D. Hunter tarafından geliştirilmeye başlandı. Bilimsel verileri görselleştirmek isteyen Hunter, MATLAB'e benzer bir grafik aracı oluşturmak amacıyla bu kütüphaneyi yazdı. Zamanla akademik çevrelerde yaygınlaştı ve Python’un bilimsel ekosisteminin temel taşlarından biri hâline geldi.
John Hunter’ın 2012’de vefatından sonra geliştirici topluluğu projeye sahip çıkarak geliştirmeye devam etti.
Temel Özellikleri
- 2D ve sınırlı olarak 3D grafik çizimi
- Etkileşimli grafikler
- Yüksek özelleştirme imkanı (renkler, yazı tipleri, çizgi stilleri vb.)
- Çeşitli çıktı formatları (PNG, SVG, PDF, EPS)
- GUI entegrasyonları (Tkinter, PyQt, wxPython vb.)
- MATLAB benzeri API: Pyplot
Kullanım Alanları
- Veri analizi ve görselleştirme
- Bilimsel raporlama
- Makine öğrenmesi ve AI çıktılarının gösterimi
- Finansal ve ekonomik grafikler
- Mühendislik ve simülasyon uygulamaları
Kurulum
pip install matplotlib
Temel Kullanım
1) Çizgi Grafiği Örnekleri
Farklı Renk ve Stil
import matplotlib.pyplot as plt x = [0, 1, 2, 3, 4, 5] y1 = [0, 1, 4, 9, 16, 25] y2 = [0, 1, 2, 3, 4, 5] plt.plot(x, y1, color='red', linestyle='--', marker='o', label='Kare') plt.plot(x, y2, color='blue', linestyle='-', marker='s', label='Doğrusal') plt.title("İki Farklı Fonksiyon") plt.xlabel("X Ekseni") plt.ylabel("Y Ekseni") plt.legend() plt.grid(True) plt.show()
Tarih Bazlı Grafik
import matplotlib.dates as mdates import datetime tarihler = [datetime.datetime(2023, 1, i+1) for i in range(10)] veriler = [i**0.5 for i in range(10)] plt.plot(tarihler, veriler) plt.gcf().autofmt_xdate() plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%d-%m')) plt.title("Tarihe Göre Veri Değişimi") plt.show()
2) Çubuk Grafik (Bar Plot) Örnekleri
Yatay Çubuk Grafiği
kategoriler = ['A', 'B', 'C', 'D'] degerler = [10, 20, 5, 15] plt.barh(kategoriler, degerler, color='green') plt.title("Yatay Bar Grafiği") plt.show()
Gruplandırılmış Çubuk Grafik
import numpy as np kategoriler = ['2021', '2022', '2023'] erkek = [30, 35, 40] kadin = [25, 30, 38] x = np.arange(len(kategoriler)) genislik = 0.4 plt.bar(x - genislik/2, erkek, width=genislik, label='Erkek', color='blue') plt.bar(x + genislik/2, kadin, width=genislik, label='Kadın', color='pink') plt.xticks(x, kategoriler) plt.ylabel("Katılım Sayısı") plt.title("Yıllara Göre Katılım") plt.legend() plt.show()
3) Histogram Örnekleri
Normal Dağılım Histogramı
veri = np.random.normal(0, 1, 1000) plt.hist(veri, bins=30, color='skyblue', edgecolor='black') plt.title("Normal Dağılım Histogramı") plt.xlabel("Değer") plt.ylabel("Frekans") plt.show()
Histogram + Yoğunluk Eğrisi
import seaborn as sns veri = np.random.normal(0, 1, 1000) sns.histplot(veri, kde=True, color="orange") plt.title("Histogram + KDE") plt.show()
4) Pasta Grafiği (Pie Chart) Örnekleri
Dilim Ayırmalı Pasta Grafiği
etiketler = ['Python', 'C++', 'Java', 'Rust'] oranlar = [40, 25, 20, 15] patlat = [0.1, 0, 0, 0] plt.pie(oranlar, labels=etiketler, autopct='%1.1f%%', explode=patlat) plt.title("Dillerin Kullanım Yüzdesi") plt.show()
5) Scatter (Saçılım) Grafikleri
Renkli ve Boyutlu Noktalar
x = np.random.rand(100) y = np.random.rand(100) renk = np.random.rand(100) boyut = 1000 * np.random.rand(100) plt.scatter(x, y, c=renk, s=boyut, alpha=0.5, cmap='viridis') plt.colorbar() plt.title("Gelişmiş Scatter Plot") plt.show()
6) 3D Grafik Örneği
from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = fig.add_subplot(111, projection='3d') x = np.linspace(-5, 5, 100) y = np.linspace(-5, 5, 100) X, Y = np.meshgrid(x, y) Z = np.sin(np.sqrt(X**2 + Y**2)) ax.plot_surface(X, Y, Z, cmap='plasma') ax.set_title("3D Yüzey Grafiği") plt.show()
7) Subplot ve Çoklu Grafikler
2x2 Subplot
fig, axs = plt.subplots(2, 2) axs[0, 0].plot([1, 2, 3], [1, 4, 9]) axs[0, 0].set_title("Çizgi") axs[0, 1].bar(['A', 'B', 'C'], [5, 7, 3]) axs[0, 1].set_title("Bar") axs[1, 0].hist(np.random.randn(100)) axs[1, 0].set_title("Histogram") axs[1, 1].scatter(np.random.rand(10), np.random.rand(10)) axs[1, 1].set_title("Scatter") plt.tight_layout() plt.show()
8) Matplotlib ile Gerçek-Zamanlı Grafik (Canlı Güncelleme)
import time x = [] y = [] plt.ion() # interaktif mod fig, ax = plt.subplots() for i in range(20): x.append(i) y.append(i ** 2) ax.clear() ax.plot(x, y, marker='o') ax.set_title("Canlı Güncellenen Grafik") plt.pause(0.5) plt.ioff() plt.show()
9) Matplotlib + Pandas Entegrasyonu
import pandas as pd df = pd.DataFrame({ "Yıl": [2020, 2021, 2022, 2023], "Satış": [100, 150, 180, 220] }) df.plot(x='Yıl', y='Satış', kind='line', marker='o', title='Yıllık Satış') plt.grid(True) plt.show()
Matplotlib’in Python Ekosistemindeki Yeri
- NumPy: Matplotlib genellikle NumPy dizileri ile birlikte çalışır.
- Pandas: Pandas veri çerçeveleri ile kolay grafik çizimi sağlar.
- Seaborn: Matplotlib üzerine inşa edilmiş, istatistiksel görselleştirmeye odaklı daha şık grafikler çizer.
- Jupyter Notebook: Grafiklerin interaktif şekilde gösterilmesini sağlar (%matplotlib inline).
Matplotlib, veri bilimi, yapay zeka ve mühendislik alanlarında Python'un görselleştirme standardı haline gelmiştir. Özellikle akademik yayınlarda ve bilimsel raporlamalarda sıklıkla tercih edilir.
Matplotlib, Python’un görselleştirme dünyasının temel yapı taşlarından biridir. Özelleştirilebilir yapısı, geniş kullanım alanı ve diğer kütüphanelerle olan entegrasyonu sayesinde hem yeni başlayanlar hem de uzmanlar için vazgeçilmezdir.