Python ile Veri Görselleştirme: ggplot Benzeri Grafikler ve plotnine

Python ile etkileyici görselleştirmeler oluşturmak için ggplot yaklaşımını ve plotnine kütüphanesinin temel kullanımını ele alıyorum.

  • Veri Görselleştirme
  • Araçlar

Veri analizi yalnızca sayıları hesaplamakla bitmez. Bir analiz sonucunun anlaşılabilir, akılda kalıcı ve doğru yorumlanabilir olması için veriyi iyi görselleştirmek gerekir.

ggplot2'nin mantığını Python tarafına taşıyan plotnine, veri görselleştirmeyi sistematik bir yapıya dönüştürür. Grafik oluştururken tek tek çizim komutları vermek yerine, verinin hangi değişkeninin hangi görsel özelliği temsil edeceğini tanımlarız.

“İyi bir grafik sadece güzel görünmez; verinin içindeki hikâyeyi daha hızlı görmemizi sağlar.”

Python'da ggplot Mantığı Nedir?

ggplot yaklaşımı, R'daki ggplot2 paketiyle yaygınlaşan “Grammar of Graphics” fikrine dayanır. Bu yaklaşımda grafik; veri, estetik eşleştirmeler, geometrik katmanlar, ölçekler ve diğer bileşenlerin bir araya gelmesiyle oluşur. Python'da plotnine bu mantığı oldukça doğal bir sözdizimiyle uygular.

Python + plotnine ile ggplot mantığı
DataVeri seti
AesDeğişken ↔ görsel özellik
GeomGrafik türü
ThemeGörsel stil

1. İlk plotnine Grafiğini Oluşturmak

Başlangıç için üç temel parçayı bilmek yeterli: veri seti, aes() ile yapılan estetik eşleştirme ve grafik türünü belirleyen geom_* katmanı.

Python + plotnine ile temel kullanım
from plotnine import *

(
    ggplot(df, aes(x="tarih", y="satis"))
    + geom_line()
)

Bu örnekte tarih x eksenine, satış ise y eksenine bağlanıyor. geom_line() ise bu iki değişken arasındaki ilişkiyi çizgi grafik olarak gösteriyor. Python'da katmanları birleştiren ifadeyi parantez içine almak, satırları + ile rahatça alt alta yazmamızı sağlar.

2. aes() Neden Bu Kadar Önemli?

aes(), ggplot yaklaşımının merkezindeki kavramlardan biri. Değişkenleri eksenlere, renklere, büyüklüklere veya diğer görsel özelliklere bağlamamızı sağlar.

Birden fazla estetik eşleştirme
(
    ggplot(df, aes(
        x="kategori",
        y="satis",
        color="bolge",
        size="adet"
    ))
    + geom_point()
)

Böylece tek bir grafik üzerinde aynı anda birden fazla boyutu gösterebiliriz. Ancak her değişkeni grafiğe eklemek her zaman daha iyi bir sonuç vermez. Görselleştirmenin amacı karmaşıklığı artırmak değil, doğru bilgiyi daha hızlı aktarabilmektir.

3. En Çok Kullanılan Geom Katmanları

Dağılım

geom_point()

İki sayısal değişken arasındaki ilişkiyi noktalarla göstermek için kullanılır.

Trend

geom_line()

Zaman serileri ve sıralı gözlemlerde değişimi göstermek için idealdir.

Karşılaştırma

geom_col()

Kategoriler arasındaki değer farklarını çubuklarla karşılaştırmak için kullanılır.

Dağılım

geom_boxplot()

Grupların dağılımını, medyanını ve aykırı değerlerini incelemeye yardımcı olur.

4. Örnek: Zaman İçinde Satışları Görselleştirmek

Zaman serilerinde çizgi grafik çoğu zaman iyi bir başlangıç noktasıdır. Ama grafiğin sadece çalışması değil, mesajını hızlı vermesi de gerekir.

Örnek satış trendi
Başlık ve tema eklemek
(
    ggplot(df, aes(x="tarih", y="satis"))
    + geom_line(linewidth=1.2)
    + labs(
        title="Aylık Satış Trendi",
        x="Tarih",
        y="Satış"
    )
    + theme_minimal()
)

5. Renkleri Doğru Kullanmak

Renk, veri görselleştirmede güçlü ama dikkat edilmesi gereken bir araçtır. Kategorileri ayırmak için kullanılabilir; fakat anlamsız şekilde fazla renk kullanmak grafiğin okunabilirliğini azaltabilir.

İhtiyaçYaklaşım
Kategorileri ayırmakAz ve anlamlı renk paleti
Bir büyüklüğü göstermekSürekli renk skalası
Önemli bir noktayı vurgulamakTek vurgu rengi
Sunum / rapor tutarlılığıKurumsal renk paleti
Pratik öneri: Bir grafikte “hangi renk neden var?” sorusuna cevap veremiyorsanız, muhtemelen fazla renk kullanıyorsunuzdur.

6. Facet ile Veriyi Küçük Grafiklere Ayırmak

Bazen tek bir grafik çok fazla bilgi taşır. Bu durumda facet_wrap() veya facet_grid() kullanarak veriyi alt grafiklere ayırabiliriz.

Python + plotnine ile facet örneği
(
    ggplot(df, aes(x="tarih", y="satis", color="kanal"))
    + geom_line()
    + facet_wrap("~bolge")
    + theme_minimal()
)

Böyle bir yaklaşım, özellikle bölge, ürün, kanal veya müşteri segmenti gibi kategoriler arasında karşılaştırma yaparken oldukça kullanışlıdır.

7. Grafik Sadece Kod Değildir

Teknik olarak çalışan bir grafik, iyi bir veri görselleştirmesi olmak zorunda değil. Başlık, eksen adları, sayı formatları, açıklamalar, boşluklar ve renk seçimleri de analizin bir parçasıdır.

01

Mesajı belirle

Grafikten okuyucunun hangi sonuca ulaşmasını istediğini netleştir.

02

Doğru grafik türünü seç

Trend için çizgi, karşılaştırma için çubuk, ilişki için saçılım grafiği düşün.

03

Gereksiz süslemeyi azalt

Grafiğin amacı tasarım yarışması kazanmak değil, bilgiyi aktarmaktır.

04

Okunabilirliği test et

Grafiğe birkaç saniye baktığında ana mesaj anlaşılabiliyor mu?

plotnine Öğrenirken Benim İçin En Önemli Yaklaşım

plotnine ile ggplot mantığını öğrenirken komutları tek tek ezberlemek yerine grafiklerin nasıl katmanlardan oluştuğunu anlamak çok daha faydalı. Önce veriyi seçmek, sonra estetik eşleştirmeleri tanımlamak, ardından uygun geom'u eklemek ve son olarak grafiği okunabilir hale getirmek daha sürdürülebilir bir çalışma biçimi.

“ggplot yaklaşımının gücü, tek bir grafik komutunda değil; küçük ve anlaşılır katmanları bir araya getirebilmesinde.”

Sonuç

plotnine, Python ile ggplot tarzı veri görselleştirmeye başlamak için güçlü ve esnek bir araç. Temel mantığını kavradığınızda çizgi grafiklerden dağılım grafiklerine, kategorik karşılaştırmalardan çoklu panellere kadar oldukça geniş bir görselleştirme dünyasına geçiş yapabilirsiniz.

Fakat en iyi grafik, en fazla kod yazılan grafik değildir. En iyi grafik, verinin içindeki önemli bilgiyi en anlaşılır biçimde ortaya çıkaran grafiktir.

Data analysis does not end with calculating numbers. For the result of an analysis to be understandable, memorable and correctly interpreted, the data has to be visualized well.

plotnine, which brings the logic of ggplot2 to Python, turns data visualization into a systematic structure. Instead of issuing drawing commands one by one, we define which variable of the data should represent which visual property.

“A good chart doesn’t just look nice; it helps us see the story in the data faster.”

What Is the ggplot Approach in Python?

The ggplot approach is based on the “Grammar of Graphics” idea popularized by R’s ggplot2 package. In this approach, a chart is built by combining data, aesthetic mappings, geometric layers, scales and other components. In Python, plotnine implements this logic with a very natural syntax.

The ggplot logic with Python + plotnine
DataData set
AesVariable ↔ visual property
GeomChart type
ThemeVisual style

1. Creating Your First plotnine Chart

To get started, you only need three basic pieces: a data set, an aesthetic mapping defined with aes() and a geom_* layer that sets the chart type.

Basic usage with Python + plotnine
from plotnine import *

(
    ggplot(df, aes(x="date", y="sales"))
    + geom_line()
)

In this example, date is mapped to the x axis and sales to the y axis. geom_line() then shows the relationship between these two variables as a line chart. Wrapping the expression in parentheses lets us write each layer on its own line with + in Python.

2. Why Is aes() So Important?

aes() is one of the central concepts of the ggplot approach. It lets us map variables to axes, colors, sizes or other visual properties.

Multiple aesthetic mappings
(
    ggplot(df, aes(
        x="category",
        y="sales",
        color="region",
        size="quantity"
    ))
    + geom_point()
)

This way we can show several dimensions on a single chart at the same time. But adding every variable to a chart does not always give a better result. The goal of visualization is not to add complexity, but to convey the right information faster.

3. The Most Common Geom Layers

Distribution

geom_point()

Shows the relationship between two numeric variables with points.

Trend

geom_line()

Ideal for showing change in time series and ordered observations.

Comparison

geom_col()

Compares value differences between categories with bars.

Distribution

geom_boxplot()

Helps examine group distributions, medians and outliers.

4. Example: Visualizing Sales over Time

For time series, a line chart is often a good starting point. But a chart should not only work; it should also get its message across quickly.

Example sales trend
Adding a title and a theme
(
    ggplot(df, aes(x="date", y="sales"))
    + geom_line(linewidth=1.2)
    + labs(
        title="Monthly Sales Trend",
        x="Date",
        y="Sales"
    )
    + theme_minimal()
)

5. Using Color Well

Color is a powerful tool in data visualization, but it has to be used with care. It can separate categories, yet using too many colors without a reason makes a chart harder to read.

NeedApproach
Separating categoriesA small, meaningful color palette
Showing a magnitudeA continuous color scale
Highlighting a key pointA single accent color
Consistency in presentations / reportsA corporate color palette
Practical tip: If you cannot answer “why is this color here?” for a chart, you are probably using too many colors.

6. Splitting Data into Small Charts with Facets

Sometimes a single chart carries too much information. In that case we can split the data into sub-charts with facet_wrap() or facet_grid().

Facet example with Python + plotnine
(
    ggplot(df, aes(x="date", y="sales", color="channel"))
    + geom_line()
    + facet_wrap("~region")
    + theme_minimal()
)

This approach is especially useful when comparing categories such as regions, products, channels or customer segments.

7. A Chart Is Not Just Code

A chart that works technically is not necessarily a good data visualization. Titles, axis names, number formats, annotations, spacing and color choices are all part of the analysis.

01

Define the message

Be clear about the conclusion you want the reader to reach from the chart.

02

Choose the right chart type

Think lines for trends, bars for comparisons and scatter plots for relationships.

03

Cut unnecessary decoration

The goal of a chart is to convey information, not to win a design contest.

04

Test readability

Can the main message be understood after looking at the chart for a few seconds?

The Approach That Helped Me Most While Learning plotnine

When learning the ggplot logic with plotnine, understanding how charts are built from layers is far more useful than memorizing commands one by one. Choosing the data first, then defining the aesthetic mappings, adding the right geom and finally making the chart readable is a much more sustainable way of working.

“The power of the ggplot approach is not in a single chart command, but in combining small, understandable layers.”

Conclusion

plotnine is a powerful and flexible tool for getting started with ggplot-style data visualization in Python. Once you grasp its core logic, you can move into a wide world of visualization, from line and scatter charts to categorical comparisons and multi-panel plots.

But the best chart is not the one with the most code. The best chart is the one that brings out the important information in the data most clearly.