Tek bir "en iyi" Python grafik kütüphanesi yoktur ve size aksini söyleyen herkes bir şey satmaya çalışıyordur. Dürüst cevap şu: alan, her biri belirli bir işi en iyi yapan bir avuç araca bölünür: yayın kalitesinde statik bir grafik, tek satırlık istatistiksel bir çizim, etkileşimli bir gösterge paneli, sürüm kontrolüne alabileceğiniz bildirimsel bir tanım ya da yüz milyon noktayı kaldırması gereken bir grafik. Bu inceleme, önemli olan kütüphaneleri, her birinin gerçekten neyde iyi olduğunu, nerede tıkandığını ve — bu site Python ile piyasalar için geliştirme yapmaya odaklandığından — mum grafiklerini ve büyük zaman serilerini nasıl ele aldıklarını gezecek.
Aşağıdaki her yıldız sayısı, indirme rakamı ve lisans, 2026 ortasında birincil kaynaklara (GitHub, PyPI, resmi dokümanlar) karşı doğrulandı. Bir rakam, satıcının kendi bildirdiği en iyi durumsa, bu şekilde işaretlenmiştir.

Zihinsel model: statik mi, etkileşimli mi
İlk ayrım, çıktının bir statik görüntü (PNG/SVG/PDF, bir kez render edilen) mi yoksa bir etkileşimli figür (HTML/JS, tarayıcıda kaydır-yakınlaştır-üzerine gel) mi olduğudur.
- Statik: Matplotlib, Seaborn, Plotnine — bir de etkileşimliye yakın SVG üreten Pygal.
- Etkileşimli: Plotly, Bokeh, Altair.
Yalnızca verileriniz büyüdüğünde devreye giren ikinci ayrım ise noktaların nerede çizildiğidir: tarayıcıda (istemci tarafı, WebGL) mı yoksa sunucuda önceden toplulaştırılıp bir görüntüye mi dönüştürülür. Bu ayrım, aşağıdaki "ölçek katmanı"nın tüm hikâyesidir ve çoğu incelemenin atladığı kısımdır.
Matplotlib — her şeyin üzerinde durduğu temel
Matplotlib Python çizimlerinin sağlam zeminidir. Yalnızca bir kütüphane değil; Seaborn'ün, Plotnine'in varsayılanlarının, mplfinance'in ve bir düzine başkasının üzerine inşa edildiği render motorudur. Lisansı izin vericidir — resmî olarak "PSF lisansına dayalı" ve BSD ile uyumludur, böylece onu tescilli bir ürüne hiç düşünmeden koyup satabilirsiniz (lisans dokümanları).
Güçlü yanları. Tam kontrol. 2D bir tuval üzerinde bir işaret tarif edebiliyorsanız, Matplotlib onu çizebilir ve baskı için net vektör PDF/SVG dışa aktarır. Her yere kurulmuştur ve karşılaşacağınız her hatanın zaten bir Stack Overflow cevabı vardır.
Zayıf yanları. API'si meşhur biçimde iki başlıdır — MATLAB tarzı durum tutan bir pyplot arayüzü ve nesne yönelimli bir Figure/Axes arayüzü — ve eğitimler bunları gelişigüzel karıştırır; "matplotlib'den neden nefret ediyorsunuz" başlığının başlı başına bir tür olmasının sebebi tam da budur. Varsayılanlar eskimiştir ve bir grafiği modern gösterecek şekilde biçimlendirmek hatırı sayılır satır kod gerektirir.
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(10, 4))
ax.plot(df.index, df["close"], lw=1.2)
ax.set_title("BTC-USD daily close")
fig.savefig("btc.png", dpi=150, bbox_inches="tight")

Şu durumda kullanın: statik, baskıya hazır bir figüre ihtiyacınız olduğunda ya da daha üst düzey bir araç geliştiriyor ve tamamen kontrol ettiğiniz bir tuval istediğinizde.
Seaborn — gereksiz kalıp kod olmadan istatistiksel grafikler
Seaborn Matplotlib üzerine ince, görüşlü bir katmandır (BSD-3-Clause) ve eksenlerle uğraşan on satırı tek satıra dönüştürür. "Çekici istatistiksel grafikler çizmek için yüksek seviyeli bir arayüz sağlar" ve pandas ile sıkı sıkıya bütünleşir — dağılımlar, regresyonlar, ısı haritaları ve fasetlenmiş küçük çoklu grafikler hep tek çağrıdır.
import seaborn as sns
sns.set_theme()
sns.lineplot(data=returns, x="date", y="ret", hue="symbol")

Güçlü yanları. Sınıfının en iyisi istatistiksel varsayılanlar; kutudan çıktığı gibi göz alıcı; keşifsel veri analizi için akla gelen ilk seçenek.
Zayıf yanları. Matplotlib'in statik doğasını miras alır (etkileşim yok) ve bir fonksiyonunun bulunmadığı bir grafiğe ihtiyaç duyduğunuzda yine ham Matplotlib'e geri dönersiniz. Bir kolaylık katmanıdır, motordan kaçış değil.
Şu durumda kullanın: bir DataFrame üzerinde EDA yapıyor ve korelasyon ısı haritaları, dağılımlar veya regresyon grafiklerini hızlıca istiyorsanız.
Plotly — etkileşimli varsayılan
Plotly.py en yaygın benimsenen etkileşimli seçenektir. MIT lisanslıdır, plotly.js üzerine inşa edilmiştir ve rakamlar yakın bile değildir: kabaca 18,6k GitHub yıldızı ve tüm zamanlar boyunca yaklaşık 1,24 milyar PyPI indirmesi — son 30 günde 61 milyon indirme mertebesinde (PyPI · indirme istatistikleri). Üzerine gelme ipuçları, yakınlaştırma, kaydırma ve gösterge açıp kapama ücretsiz gelir ve aynı figür bir not defterinde, bir Dash uygulamasında ya da statik bir HTML dosyasında render edilir.
import plotly.graph_objects as go
fig = go.Figure(go.Candlestick(
x=df.index, open=df.open, high=df.high, low=df.low, close=df.close,
))
fig.update_layout(title="BTC-USDT", xaxis_rangeslider_visible=False)
fig.show()

Güçlü yanları. Sıfır JavaScript ile etkileşim; birinci sınıf finansal grafik türleri (go.Candlestick, go.Ohlc); tam bir gösterge paneline (Dash) giden yol kısadır.
Zayıf yanları. plotly.js paketi ağırdır — sayfa yükleme süresine duyarlı siteler için gerçek bir maliyet (paket süresi analizi). Ayrıca katı bir render sınırı vardır: WebGL izleriyle (go.Scattergl) ~1 milyon noktaya kadar temsil edebilirsiniz, ancak tarayıcılar sayfa başına yalnızca 8–16 WebGL bağlamına izin verir, dolayısıyla pratikte "Too many active WebGL contexts" hatasına çarpmadan önce 4–8 WebGL figürü elde edersiniz (Plotly performans dokümanları). Akıcı etkileşimli yakınlaştırma/kaydırma gerçekçi olarak ~100–200k noktaya kadar dayanır.
Şu durumda kullanın: etkileşimli grafikler veya gösterge panelleri, özellikle finansal olanları istiyorsanız ve serileriniz binlerle düşük milyonlar arası noktadaysa.
Bokeh — büyük ve akışlı veri için tasarlanmış etkileşim
Bokeh (BSD-3-Clause, ~20,4k yıldız / 4,3k çatallama) Plotly'nin başlıca etkileşimli rakibidir, fakat farklı bir ağırlık merkezine sahiptir: "modern web tarayıcıları için etkileşimli bir görselleştirme kütüphanesi" olup büyük ve akışlı veri kümelerine ve sunucu güdümlü uygulamalara yöneliktir (Bokeh sunucusu canlı güncellemeleri bir websocket üzerinden bir grafiğe iletebilir).
Pazarlamanın size vermeyeceği dürüst bir uyarı: "yüksek performans" kısmen kendini öyle tanımlamadır. Gerçek dünya raporları, ~50k nokta kadar küçük veri kümelerinde üzerine gelme/ipuçlarının yavaşladığını gösteriyor, dolayısıyla devasa veride otomatik olarak hızlı değildir — yine de toplulaştırmaya (aşağıda) başvurursunuz. Bokeh'in avantajını ham nokta sayısı değil, akış ve uygulama mimarisi olarak görün.
from bokeh.plotting import figure, show
p = figure(x_axis_type="datetime", title="BTC-USD", height=350)
p.line(df["date"], df["close"])
show(p)
Şu durumda kullanın: canlı güncellenen bir gösterge paneli ya da Python güdümlü bir veri uygulaması geliştiriyor ve etkileşim üzerinde sunucu tarafı kontrol istiyorsanız.
Altair — bildirimsel bir grafik dilbilgisi
Altair bildirimsel bir kütüphanedir: neyi kodlayacağınızı tarif edersiniz (bu sütun x'e, şu sütun renge) ve Vega-Lite motoru bunun nasıl çizileceğine karar verir. Grafikler JSON tanımlarıdır, bu da onları birleştirilebilir ve farkları kolayca görülebilir kılar.

Her yeni gelenin çarptığı engel: Altair varsayılan olarak 5.000 satırdan fazlasını çizmeyi reddeder ve bir MaxRowsError fırlatır. Bu, veriyi işleyememesi değil, kasıtlı bir korkuluktur (Altair veriyi tanımın içine JSON olarak gömer) — ve kaldırmak tek satırlıktır:
import altair as alt
alt.data_transformers.disable_max_rows() # or use the VegaFusion backend for ~100k+
alt.Chart(df).mark_line().encode(x="date:T", y="close:Q")
Bu, tekrarlayan bir hayal kırıklığı kaynağıdır, çünkü hata tam da "küçük" gibi hissettiren 35k satırlık bir çerçevede ortaya çıkar (büyük veri kümeleri dokümanları).
Şu durumda kullanın: özlü, bildirimsel, yeniden üretilebilir grafik tanımlarına değer veriyor ve veriniz mütevazıysa — ya da büyük çerçeveler için VegaFusion'ı bağlamaya istekliyseniz.
Plotnine ve Pygal — sahayı tamamlayanlar
- Plotnine, R'ın
ggplot2grafik dilbilgisinin neredeyse birebir bir aktarımıdır (MIT lisanslı). R'dan geldiyseniz ya daaes()+ katmanlıgeom_*ile düşünüyorsanız, bu listedeki en doğal API'dir. Matplotlib üzerinden render eder, dolayısıyla statiktir.
python
from plotnine import ggplot, aes, geom_line
(ggplot(df, aes("date", "close")) + geom_line())
- Pygal SVG grafikleri üretir — çözünürlükten bağımsız, CSS ile biçimlendirilebilir ve bir rapora ya da web sayfasına gömmek için minik. Niş bir tercihtir: bir web sayfasında temiz vektör grafikleri için harikadır, büyük veri ya da ağır etkileşim için tasarlanmamıştır.

Veriniz büyüdüğünde: ölçek katmanı
Naif tercihlerin çöktüğü yer burasıdır. Bir milyon noktayı aştığınızda, onları öylece tarayıcıya teslim edemezsiniz. (Bir efsane konusunda kesin olalım: tarayıcılar ~1 milyon WebGL noktasını temsil edebilir — bozulan, etkileşim akıcılığıdır, sert bir çökme değil.) Bunu çözen iki strateji vardır:
1. Sunucu tarafı rasterleştirme — Datashader. Datashader (BSD-3-Clause), noktaları tarayıcıya göndermek yerine onları sabit boyutlu 2D bir ızgaraya kovalar ve bu ızgarayı, "verinin dağılımını sadakatle koruyarak" bir görüntü olarak render eder. Öne çıkan rakamı: 16 GB'lık bir dizüstü bilgisayarda yaklaşık bir saniyede bir milyar nokta, Dask aracılığıyla bellek dışına ve GPU'ya ölçeklenerek (giriş · HoloViews büyük veri kılavuzu). Saniyede milyar nokta rakamını satıcının en iyi durumu olarak görün — ama yaklaşımın kendisi (her yakınlaştırma/kaydırmada yeniden kovalamak) yoğun veri için gerçekten doğru olandır.
import datashader as ds, datashader.transfer_functions as tf
cvs = ds.Canvas(plot_width=900, plot_height=400)
agg = cvs.points(df, "t", "price") # df can be a Dask frame larger than RAM
img = tf.shade(agg)
2. Görünüme bağlı alt örnekleme — plotly-resampler. Bu, Plotly'nin tam etkileşimini korur ama yalnızca gerçekten görebildiğiniz noktaları render eder. Varsayılan MinMaxLTTB toplulaştırması, her izi mevcut görünüm için ~1.000 çizilen noktaya indirger, ardından siz yakınlaştırdıkça yeniden getirir — demo, bu yöntemle 110 milyondan fazla veri noktasını görselleştirir (makale).
from plotly_resampler import FigureResampler
import plotly.graph_objects as go
fig = FigureResampler(go.Figure())
fig.add_trace(go.Scattergl(name="price"), hf_x=ts, hf_y=price) # 100M+ points
fig.show_dash()
Pratik kural: milyonlarca noktanın yoğun dağılım/ısı haritası → Datashader; uzun etkileşimli zaman serisi → plotly-resampler.
Piyasa verisi grafikleri: mum grafikleri ve OHLC
Ticarete odaklı bir iş akışı için öne çıkan mplfinance — Matplotlib organizasyonunun finansal grafik paketidir. Bir DatetimeIndex ve Open/High/Low/Close sütunları içeren bir pandas DataFrame'i alır ve mum, OHLC, çizgi, Renko ve Point & Figure grafikleri çizer; hareketli ortalamalar ve hacim de gömülüdür:
import mplfinance as mpf
mpf.plot(df, type="candle", mav=(20, 50), volume=True, style="charles")
mplfinance'in ötesinde:
- Etkileşimli mum grafikleri: Plotly'nin
go.Candlestick'i, geçmişiniz uzadığındaplotly-resamplerile sarmalanmış. - Canlı/akışlı grafikler: Bokeh'in sunucu modeli ya da tam o ticaret terminali görünümünü istediğinizde
lightweight-charts-python(TradingView'in lightweight-charts'ı üzerine bir bağlama) gibi adanmış sarmalayıcılar. - Statik raporlar/geriye dönük testler: mplfinance doğrudan PNG'ye.
Bir bakışta karşılaştırma
| Kütüphane | Tür | Lisans | Etkileşimli | En iyi olduğu | Dikkat edilecek |
|---|---|---|---|---|---|
| Matplotlib | Statik | PSF/BSD uyumlu | Hayır | Tam kontrol, baskı/PDF | Söz dizimi uzun, varsayılanları eski |
| Seaborn | Statik | BSD-3 | Hayır | İstatistiksel EDA | Sıra dışı için Matplotlib'e düşer |
| Plotly | Etkileşimli | MIT | Evet | Gösterge panelleri, finans grafikleri | Ağır paket; ~1M noktalık WebGL sınırı |
| Bokeh | Etkileşimli | BSD-3 | Evet | Akış / veri uygulamaları | Büyük veride otomatik hızlı değil |
| Altair | Etkileşimli | BSD-3 | Evet | Bildirimsel, yeniden üretilebilir tanımlar | Varsayılan 5.000 satır sınırı |
| Plotnine | Statik | MIT | Hayır | ggplot2 kas hafızası | Yalnızca statik |
| Pygal | SVG | Açık kaynak (LGPL) | Hafif | Web'de temiz vektör grafikleri | Niş; büyük veri için değil |
| Datashader | Sunucu rasteri | BSD-3 | HoloViews üzerinden | 10⁶–10⁹ nokta | Bir görüntü, vektör işaret değil |
| mplfinance | Statik | BSD tarzı (mpl org) | Hayır | Mum grafiği / OHLC | Statik; etkileşim için Plotly ile eşleştirin |
Popülerlik rakamları 2026 ortasında doğrulandı: Plotly ≈18,6k yıldız / ≈1,24 milyar indirme; Bokeh ≈20,4k yıldız / 4,3k çatallama. Yıldız ve indirme sayıları sürekli değişir — onları anlık görüntüler olarak ele alın ve ham PyPI indirmelerinin CI ve aynaları içerdiğini, dolayısıyla insan benimsemesini olduğundan fazla gösterdiğini unutmayın.
Tek nefeste nasıl seçilir
- Bir not defterinde hızlı statik çizim → Matplotlib.
- Bir DataFrame üzerinde istatistiksel EDA → Seaborn.
- Etkileşimli grafikler ya da bir gösterge paneli → Plotly (ya da akış / uygulama biçimindeyse Bokeh).
- Özlü, sürüm kontrolüne alınabilir tanımlar → Altair (5k satır sınırına dikkat).
- ggplot2 ile düşünüyorsanız → Plotnine.
- Bir web sayfası ya da rapor için temiz SVG → Pygal.
- Milyonlardan milyarlara noktalar → Datashader (yoğun) ya da plotly-resampler (uzun zaman serileri).
- Mum grafikleri ve piyasa verisi → statik için mplfinance, etkileşim için Plotly.
En çok yıldıza sahip olanı değil, işe uyanı seçin. Çoğu gerçek proje, bunlardan iki ya da üçünü birlikte kullanır — keşif için Seaborn, gösterge paneli için Plotly, geriye dönük test raporu için mplfinance — ve bu, standartlaştırmada bir başarısızlık değil, doğru sonuçtur.
Yöntem: Bu incelemedeki iddialar birincil kaynaklara (proje GitHub depoları, PyPI ve resmi dokümanlar) karşı çapraz doğrulandı ve çekişmeli biçimde teyit edildi; rakamlar 2026 ortası anlık görüntüleridir. Satıcı rakamı olarak işaretlenen performans sayıları (Datashader'ın milyar noktası, plotly-resampler'ın 110M'i) yeniden üretilebilir en iyi durumlardır, bağımsız kıyaslamalar değildir.