Ridgeline Plot Nasıl Oluşturulur?

Veri görselleştirme ile ilgili kanal ve siteleri takip ediyorsanız, bu özel yoğunluk grafiğine bir şekilde rastlamışsınızdır. Popülaritesi gittikçe artan bu gösterimde, farklı kategorik parametrelere ait dağılım grafikleri üstüste eklenerek, kısmi bir 3 boyutlu grafik oluşturulabiliyor.

Bu gösterim yöntemine ilk başta Joyplot adı verilse de, adı sonrada ilginç bir sebeple değiştiriliyor. Yöntemin ilk uygulandığı zamanlarda, Joy Division adlı müzik grubunun 1979 yılında çıkardığı Unknown Pleasures adlı albümün kapağına benzerliği üzerine Joyplot adı verilen grafik, sonradan isim değiştirmek zorunda kalıyor. “Joy Division” adlı grubun adının, aslında Nazi kamplarında köle olarak çalıştırılan yahudi kadınlara verilen isim olduğunu sonradan farkedilmesi.* Bu sebeple artık, joyplot yerine ridgeline plot olarak adlandırılıyor.

Kurulum:

Ridgeline Plot paketi, ggplot ile birlikte çalıştığı için beraberinde ggplot2 paketinin de kurulu olması gerekiyor.

> install.packages("ggridges")
> library(ggridges)

Uygulama:

Önce temel bir grafik oluşturalım. Bunun için R’ın dahili verisetlerinden iris‘i kullanacağız. Bu veriseti, 3 farklı bitki türüne (setosa, versicolor, virginica) ait yaprakların boyut bilgilerini içeriyor. Önce verisetimize kısaca göz atalım.

> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5.1          3.5         1.4          0.2         setosa
4.9          3.0         1.4          0.2         setosa
4.7          3.2         1.3          0.2         setosa
4.6          3.1         1.5          0.2         setosa
5.0          3.6         1.4          0.2         setosa
5.4          3.9         1.7          0.4         setosa

3 türün Sepal.Length değerine göre dağılımlarını, ridgeline ile görmek için basit bir şekilde başlayalım. Beraberinde kullandığımız ggplot paketi hakkında daha fazla bilgiye ggplot ile Veri Görselleştirme yazımızdan göz atabilirsiniz.

Aşağıdaki örnekte, önce ggplot() fonksiyonunu çağırıyoruz. Ardından data parametresi ile analiz yapacağımız data.frame’i belirliyoruz. x ekseninde dağılımını görmek istediğimiz sayısal değeri, y ekseninde ise gruplandırma yapacağımız kategorik değeri belirtiyoruz. Son olarak, ridgeline katmanını geom_density_ridges() ile ekliyoruz.

# Örnek 1: Basit Yoğunluk Dağılımı
> ggplot(data = iris, aes(x=Sepal.Width, y=Species)) +
    geom_density_ridges()

Grafik şimdiden güzel gözükse de birkaç görsel değişiklik yapmakta fayda var. Grafiğin kenar kısımlarında gereksiz boşluklar yer alıyor. Ve arkada klasik gri arkaplan var. Bunlardan kurtulalım.

Paket ile birlikte ön ayarlı bir tema da geliyor. Bu tema, ridgeline grafikleri için optimize edilmiş, görselleştirme özelliklerini (beyaz arkaplan vs.) içinde barındırıyor. theme_ridges() kodu ile tema katmanını ekliyoruz. Bunu eklediğinizde otomatik olarak arkaplan kaldırılıyor ve çok sayıda görsel düzeltme yapılıyor.

Boşlukları azaltmak için scale_y_discrete ve  scale_x_continuous komutlarını kullanıyoruz. Esasında bu iki komut, eksenlerin sınırlarını belirlemek için kullanılıyor. Örneğin scale_x_continuous(limits = c(2, 6)) dediğinizde x eksenindeki 2 ve 6 arası değerler yer alıyor. Biz ise expand parametresi ile eksen sınırlarının ölçülen değerlere yakın olmasını istiyoruz. expand = c(0.01, 0) komutu şunu ifade ediyor: Eksenin sınırlarını, grafik değerlerinin 0.01 katı uzaklığı + 0 birim kadar geniş tut.

# Örnek 2: Basit Tema Değişiklikleri
> ggplot(data = iris, aes(y=Species, x=Sepal.Width)) +
    geom_density_ridges() +
    theme_ridges()+
    scale_y_discrete(expand = c(0.01, 0)) +
    scale_x_continuous(expand = c(0.01, 0))

Ridgeline gösterim şeklinin en karakteristik özelliği, üstüste binen dağılım grafikleri. Grafiklerin ne oranda üstüste bineceği (veya binmemesi) scale parametresi ile belirleniyor. Scale değeri ne kadar yüksekse o kadar büyük tepeler oluşturuluyor. Çoğu durumda, üstüste binen dağılımları daha güzel gözükmesi için  alpha parametresi ile biraz şeffaflık ekleyebiliriz.

# Örnek 3: İleri Tema Değişiklikleri
> ggplot(data = iris, aes(y=Species, x=Sepal.Width, fill=Species)) +
    geom_density_ridges(alpha=0.7, scale=2) +
    scale_y_discrete(expand = c(0.01, 0)) +
    scale_x_continuous(expand = c(0.01, 0)) +
    theme_ridges() +
    theme(legend.position = "none")

Yoğunluk grafiklerinin yanı sıra, çubuk formatında ardışık histogramlar da oluşturulabiliyor. Bunun için, stat parametresini “binline” olarak belirlemeniz yeterli. Çubuk sayısını da bins parametresi ile belirtebilirsiniz.

# Örnek 4: Çubuk Tipi Histogram Oluşturmak
ggplot(data = iris, aes(y=Species, x=Sepal.Width, fill=Species)) +
  geom_density_ridges(alpha=0.7, scale=1.2, stat = "binline",  bins=25) +
  scale_y_discrete(expand = c(0.01, 0)) +
  scale_x_continuous(expand = c(0.01, 0)) +
  theme_ridges(grid = F) +
  theme(legend.position = "none")

Şimdi paketi daha geniş bir veriseti ile deneyerek tüm potansiyelini gösterelim. Bunun için daha büyük bir veriseti paketi olan ggplot2movies‘i kuruyoruz. Bu paket, 1890’dan günümüze 58.788 filme ait süre, bütçe, yıl ve benzeri parametrelerini içeriyor.

# Örnek 5: Büyük Veri Seti ile Deneme
> install.packages("ggplot2movies") 
> library(ggplot2movies)

> ggplot(data = movies, aes(y=year, x=length, group=year, fill=year)) + 
    geom_density_ridges(alpha=0.5, scale=10) +
    scale_x_log10(limits=c(1,500),expand = c(0.01, 0)) + 
    scale_y_reverse(breaks=(seq(1900,2000,20))) ++
    theme_ridges() +
    theme(legend.position = "none") + 
    scale_fill_distiller(palette = "Spectral") +
    labs(title="Yıllara Göre Film Uzunluk Dağılımı",
         subtitle="Movies Veriseti, 2017",
         x="Süre (dk)",
         y="Yıl")

Grafikten de anlaşılacağı üzere, film sürelerinin zamanla standartlaşıp 100 dk’da sabitlendiğini; ayrıca son zamanlarda kısa filmlerin de popülerleşmeye başladığını görebiliyoruz.


Yakın zamanda ggplot ile ileri veri görselleştirme hakkında birkaç yazı daha paylaşacağım. Orada, bu gösterim şekline daha detaylı değineceğim. Şimdilik sadece paketi tanıtmış olayım.

Moleküler Biyolog ve Genetikçi.İstanbul Teknik Üniversitesi'nde doktora öğrencisi. 5 yıldır biyoinformatik ve yeni nesil dizileme üzerine çalışıyor. Genetik ve biyoinformatik üzerine Variant adlı blogda yazıyor.

Yorum bırakın:

Your email address will not be published.

Site Footer

Sliding Sidebar

Hakkımda

Hakkımda

Moleküler Biyolog ve Genetikçi. İstanbul Teknik Üniversitesi'nde doktora öğrencisi. 5 yıldır biyoinformatik ve yeni nesil dizileme üzerine çalışıyor.

Tweets

Please check your internet connection.