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.

2026 ortası itibarıyla temel Python grafik kütüphaneleri için GitHub yıldızları — Matplotlib ~22,9k ile önde, Bokeh, Plotly ve Seaborn hemen arkasında.

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.

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")

Matplotlib çıktısı — 20 ve 50 günlük hareketli ortalamalar ile bir hacim paneli içeren örnek bir BTC fiyat serisi, eksen eksen çizilmiş.

Ş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")

Seaborn çıktısı — tek çağrıda bir varlık getiri korelasyonu ısı haritası; Seaborn'ün önemsiz hâle getirdiği türden bir istatistiksel grafik.

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()

Plotly çıktısı — 20 günlük hareketli ortalamalı etkileşimli bir mum grafiği; tarayıcı sürümünde kaydırma, yakınlaştırma ve üzerine gelme canlıdır.

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.

Altair çıktısı — aynı fiyat serisi, özlü bir Vega-Lite tanımından üretilmiş bildirimsel bir alan-artı-çizgi grafiği olarak.

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

python from plotnine import ggplot, aes, geom_line (ggplot(df, aes("date", "close")) + geom_line())

Plotnine çıktısı — aynı veri, ggplot2'nin grafik-dilbilgisi tarzında; R'dan gelen herkese anında tanıdık gelir.

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:

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

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.