# 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)
Şimdiye kadar yaptığımız tüm görselleştirmeler, ne kadar harika olsalar da, statik bir tuval üzerindeydiler. Peki ya verilerimizi yaşayan, nefes alan, kullanıcının keşfedebileceği bir dünya haritası üzerine taşıyabilseydik?
İşte leaflet paketi tam olarak bunu yapıyor. leaflet, R’ın gücünü, en popüler açık kaynaklı interaktif harita kütüphanelerinden biri olan Leaflet.js ile birleştiren bir köprüdür. Bu paket sayesinde, sadece birkaç satır kodla, kullanıcıların yakınlaşıp uzaklaşabileceği, üzerine tıklayarak bilgi alabileceği, farklı katmanlar ekleyebileceği dinamik haritalar oluşturabiliriz.
leaflet’in mantığı, ggplot2’dan biraz farklıdır. ggplot2’da katmanları + operatörü ile eklerken, leaflet’te bu işi “pipe” operatörü (%>%) ile, adeta bir boru hattı döşer gibi yaparız.
Her zamanki gibi, önce aletimizi tezgâhımıza yerleştirelim.
# Eğer yüklü değilse, bu komut ile paketi yükleyebilirsiniz.
install.packages("leaflet")
# Gerekli kütüphaneleri çağıralım
library(tidyverse)
library(leaflet) # Kahramanımız sahnede!
leaflet ile harita oluşturmak iki temel adımdan oluşur:
1.leaflet() fonksiyonu ile boş bir harita tuvali oluşturmak. 2.addTiles() katmanı ile bu tuvalin üzerine bildiğimiz o dünya haritasını (genellikle OpenStreetMap) eklemek.
leaflet() %>%
addTiles()
İşte bu kadar! Sadece iki komutla, R Markdown dosyanızın içinde tamamen interaktif, kaydırılabilir ve yakınlaştırılabilir bir dünya haritası oluşturdunuz. Bu, leaflet’in temel iskeletidir. Şimdi bu iskeletin üzerine verilerimizi ekleyerek onu canlandırmaya başlayacağız.
Haritaları anlamlı kılan şey, üzerlerindeki ilgi çekici noktalardır. leaflet’te bu noktaları* addMarkers() fonksiyonu ile ekleriz.
Örnek olarak, Türkiye’nin en büyük üç şehrinin koordinatlarını kullanarak haritamıza işaretçiler ekleyelim.
# Şehirler ve koordinatları için küçük bir veri çerçevesi oluşturalım.
sehirler <- tibble(
isim = c("İstanbul", "Ankara", "İzmir"),
enlem = c(41.0082, 39.9334, 38.4237),
boylam = c(28.9784, 32.8597, 27.1428)
)
leaflet(data = sehirler) %>%
addTiles() %>%
# İşaretçileri ekleyelim
addMarkers(
lng = ~boylam, # Boylam sütunu (longitude)
lat = ~enlem, # Enlem sütunu (latitude)
popup = ~isim # İşaretçiye tıklandığında açılacak metin
)
Harika! Şimdi haritanızın üzerinde üç tane işaretçi belirdi. Bu işaretçilerden herhangi birine tıkladığınızda, o şehrin ismini gösteren küçük bir pencere (popup) açılacaktır.
Ustalık İpucu:
addMarkers() içindeki ~ (tilde) işaretini fark ettiniz mi? Bu, leaflet’in “Bu değeri doğrudan değil, leaflet() fonksiyonunda belirttiğim veri çerçevesinin içindeki ilgili sütundan al” deme şeklidir. Bu sayede yüzlerce noktayı tek bir komutla haritaya ekleyebiliriz.
Ustalık Dokunuşu: Daireler, Renkler ve Lejantlar
Bazen basit bir işaretçi yeterli olmaz. Bir noktanın sadece konumunu değil, aynı zamanda bir büyüklüğü (nüfus, gelir, vb.) ve bir kategoriyi (bölge, grup, vb.) de göstermek isteyebiliriz.
Bunun için addCircleMarkers() fonksiyonu imdadımıza yetişir. Bu fonksiyon, yarıçapı (radius), rengi (color) ve diğer estetik özellikleri verimizdeki sütunlara bağlamamıza olanak tanır.
Örnek olarak, G20 veri setimizi kullanarak ülkelerin başkentlerini haritada gösterelim. Dairelerin büyüklüğü ülkenin nüfusunu, rengi ise bulunduğu kıtayı temsil etsin.
# Bu kod bloğunun başlığındaki `eval=knitr::is_html_output()` komutu,
# bu bloğun SADECE HTML çıktısı alınırken çalışmasını sağlar.
# Gerekli Kütüphaneler
library(tidyverse)
library(leaflet)
# Veriyi Hazırlama ve Türkçeleştirme
g20_turkce <- G20 %>%
mutate(
Kita = case_when(
region == "Africa" ~ "Afrika", region == "Asia" ~ "Asya",
region == "Eurasia" ~ "Avrasya", region == "Europe" ~ "Avrupa",
region == "Middle East" ~ "Orta Doğu", region == "North America" ~ "Kuzey Amerika",
region == "Oceania" ~ "Okyanusya", region == "South America" ~ "Güney Amerika",
TRUE ~ region
),
Ulke = case_when(
country == "United States" ~ "ABD", country == "China" ~ "Çin",
country == "Germany" ~ "Almanya", country == "Brazil" ~ "Brezilya",
country == "India" ~ "Hindistan", country == "Australia" ~ "Avustralya",
country == "South Africa" ~ "Güney Afrika",
TRUE ~ country
),
EkonomikSinif = case_when(
econ_classification == "Advanced" ~ "Gelişmiş",
econ_classification == "Developing" ~ "Gelişmekte Olan",
TRUE ~ econ_classification
)
)
# Koordinatları Ekleme
g20_koordinatli <- g20_turkce %>%
filter(Ulke %in%
c("ABD", "Çin", "Almanya", "Brezilya", "Hindistan", "Avustralya", "Güney Afrika")) %>%
mutate(
enlem = case_when(
Ulke == "ABD" ~ 38.9072, Ulke == "Çin" ~ 39.9042, Ulke == "Almanya" ~ 52.5200,
Ulke == "Brezilya" ~ -15.8267, Ulke == "Hindistan" ~ 28.6139, Ulke == "Avustralya" ~ -35.2809,
Ulke == "Güney Afrika" ~ -25.7479
),
boylam = case_when(
Ulke == "ABD" ~ -77.0369, Ulke == "Çin" ~ 116.4074, Ulke == "Almanya" ~ 13.4050,
Ulke == "Brezilya" ~ -47.9218, Ulke == "Hindistan" ~ 77.2090, Ulke == "Avustralya" ~ 149.1300,
Ulke == "Güney Afrika" ~ 28.2293
)
)
# Renk Paleti ve Harita
renk_paleti <- colorFactor(palette = "viridis", domain = g20_koordinatli$Kita)
leaflet(data = g20_koordinatli) %>%
addProviderTiles(providers$CartoDB.Positron) %>%
addCircleMarkers(
lng = ~boylam, lat = ~enlem, radius = ~hdi * 30, color = ~renk_paleti(Kita),
stroke = FALSE, fillOpacity = 0.8,
popup = paste(
"<b>Ülke:</b>", g20_koordinatli$Ulke, "<br>",
"<b>Ekonomik Sınıflandırma:</b>", g20_koordinatli$EkonomikSinif, "<br>",
"<b>Nüfus (milyon):</b>", g20_koordinatli$population_mil, "<br>",
"<b>GSYİH (milyar $):</b>", round(g20_koordinatli$gdp_mil_usd / 1000, 1), "<br>",
"<b>İGE:</b>", g20_koordinatli$hdi
)
) %>%
addLegend(pal = renk_paleti, values = ~Kita, opacity = 1, title = "Kıta", position = "bottomright")
İşte bu! Artık sadece bir haritamız yok; üzerinde keşfedilecek bir hikaye var. Kullanıcılar artık dairelerin büyüklüğüne bakarak ülkelerin insani gelişmişlik seviyelerini, renklerine bakarak kıtalarını ve üzerine tıklayarak detaylı ekonomik bilgilerini görebilirler.
leaflet ile statik verileri, yaşayan ve keşfe davet eden coğrafi hikayelere dönüştürmenin ilk adımını attık. Şimdi atölyemizin son tezgahlarına doğru ilerleyerek, bu interaktiviteyi tüm ggplot grafiklerimize nasıl uygulayacağımızı öğreneceğiz.