# Eğer yüklü değilse, bu komut ile paketi yükleyebilirsiniz.
install.packages("treemapify")
# Gerekli kütüphaneleri çağıralım
library(tidyverse)
library(treemapify)
data(G20)

4. Grafiklere Hayat Vermek: plotly ile İnteraktivite

Şimdiye kadar ggplot2 ile oluşturduğumuz tüm o harika grafiklerin bir eksiği vardı: onlar birer fotoğraftı. Üzerine gelip detayları göremiyor, ilginizi çeken bir alanı yakınlaştıramıyordunuz.

İşte plotly paketi bu sorunu çözmek için var. plotly, ggplotly() adında sihirli bir fonksiyona sahiptir. Bu fonksiyon, oluşturduğunuz herhangi bir ggplot nesnesini alır ve onu tek bir komutla, tamamen interaktif bir web grafiğine dönüştürür.

A. Kurulum ve Hazırlık

install.packages("plotly")
library(tidyverse)
library(plotly)

# Örnek veri setimiz için gapminder'ı da çağıralım.
library(gapminder)

B. Sihirli Dönüşüm: ggplotly()

Önce, gapminder veri setini kullanarak basit bir ggplot grafiği oluşturalım. 2007 yılındaki ülkelerin kişi başına düşen gelir (gdpPercap) ve yaşam süresi (lifeExp) arasındaki ilişkiyi inceleyelim. Noktaların büyüklüğü de nüfusu (pop) temsil etsin.

# Gerekli kütüphaneleri çağıralım (eğer daha önce çağrılmadıysa)
library(tidyverse)
library(ggplot2)
library(gapminder)

# Statik ggplot grafiğimizi, lejant formatlaması eklenmiş haliyle oluşturalım
p_formatli <- ggplot(filter(gapminder, year == 2007), 
            aes(x = gdpPercap, y = lifeExp, color = continent, size = pop)) +
  geom_point(alpha = 0.7) +
  
  # X eksenini de tutarlılık için formatlayalım
  scale_x_log10(labels = scales::comma) +
  
  # --- İŞTE SİHİRLİ DOKUNUŞ BURADA ---
  # Boyut lejantındaki etiketleri virgüllü sayı formatına çeviriyoruz.
  scale_size_continuous(labels = scales::comma) +
  
  labs(
    title = "2007 Yılında Ülkelerin Yaşam Süresi ve GSYİH İlişkisi",
    x = "Kişi Başına Düşen GSYİH (Logaritmik Ölçek)",
    y = "Ortalama Yaşam Süresi",
    color = "Kıta",
    size = "Nüfus"
  ) +
  theme_minimal()

# Grafiğin son, mükemmel halini görelim
p_formatli

Şimdi sihri yapma zamanı. Tek bir komutla bu statik fotoğrafı, yaşayan bir nesneye dönüştürelim.

ggplotly(p_formatli, tooltip = c("x", "y", "color", "size"))

İşte bu kadar! Eğer bu raporu HTML olarak görüntülüyorsanız, artık grafiğin üzerine fareyle gelerek her bir noktanın tüm detaylarını (GSYİH, yaşam süresi, nüfus, kıta) görebilir, sağ üstteki araç çubuğuyla belirli bir alanı yakınlaştırabilir ve grafiği keşfe çıkabilirsiniz.

C. Ustalık Dokunuşu: Bilgi Pencerelerini Özelleştirmek

ggplotly otomatik olarak harika bilgi pencereleri (tooltips) oluşturur, ancak bazen bu bilgileri daha anlaşılır ve temiz bir formatta sunmak isteyebiliriz.

Bunu yapmak için, orijinal ggplot’umuza text adında özel bir estetik ekleyeceğiz. Bu text estetiği, plotly tarafından bilgi penceresi metni olarak kullanılacaktır.

p_ozel <- ggplot(filter(gapminder, year == 2007), 
                 aes(x = gdpPercap, y = lifeExp, color = continent, size = pop,
                     # --- Ustalık Dokunuşu Burada ---
                     # Her nokta için özel bir metin oluşturuyoruz.
                     text = paste("<b>Ülke:</b>", country,
                                  "<br><b>Nüfus:</b>", round(pop/1000000, 1), "milyon",
                                  "<br><b>Yaşam Süresi:</b>", round(lifeExp, 1), "yıl"))) +
  geom_point(alpha = 0.7) +
  scale_x_log10() +
  labs(title = "2007 Yılında Ülkelerin Yaşam Süresi ve GSYİH İlişkisi",
       x = "Kişi Başına Düşen GSYİH (Logaritmik Ölçek)", y = "Ortalama Yaşam Süresi") +
  theme_minimal() +
  theme(legend.position = "none") # Lejantı kapattık çünkü tüm bilgi tooltip'te

# ggplotly'e bu sefer özel "text" estetiğini kullanmasını söylüyoruz.
ggplotly(p_ozel, tooltip = "text")

Şimdi noktaların üzerine geldiğinizde, çok daha temiz, formatlanmış ve tam olarak sizin istediğiniz bilgileri içeren pencereler görüyorsunuz.