Giris

Bu calisma, Beck ve ark. (2018) tarafindan guncellenen Koppen-Geiger iklim siniflandirmasi verisini kullanarak Italya’nin iklim bolgelerini haritalamaktadir. 1 km cozunurluklu kuresel raster veri, Italya sinirlarına gore kirpilarak siniflandirilmis ve gorsellestirilmistir.

Koppen-Geiger sistemi; sicaklik, yagis ve mevsimsellik kriterlerine gore iklimi 5 ana grup ve 30 alt sinif altinda kategorize etmektedir:

  • A – Tropikal iklimler: Tum aylarda sicaklik > 18°C
  • B – Kurak iklimler: Yagis buharlasmadan az
  • C – Iliman iklimler: En soguk ay -3°C ile 18°C arasi
  • D – Karasal iklimler: En soguk ay < -3°C
  • E – Kutup iklimleri: En sicak ay < 10°C

Kullanilan Paketler ve Veri

library(terra)
library(ggplot2)
library(tidyterra)
library(ggspatial)
library(rnaturalearth)
library(rnaturalearthdata)
library(dplyr)
library(sf)
library(knitr)
library(kableExtra)

Veri kaynagi: Koppen-Geiger iklim siniflandirmasi raster verisi (.tif formatinda, 1 km cozunurluk).

koppen_global <- rast("C:/Users/Izoly/Desktop/koppen.tif")

italy_sf   <- ne_countries(scale = "medium", country = "Italy", returnclass = "sf")
italy_vect <- vect(italy_sf)

koppen_italy <- crop(koppen_global, italy_vect)
koppen_italy <- mask(koppen_italy, italy_vect)

vals <- sort(unique(values(koppen_italy, na.rm = TRUE)))

Koppen Sinif Tanimlari

val_vec  <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30)
lab_vec  <- c("Af","Am","Aw","BWh","BWk","BSh","BSk",
              "Csa","Csb","Csc","Cwa","Cwb","Cwc",
              "Cfa","Cfb","Cfc","Dsa","Dsb","Dsc","Dsd",
              "Dwa","Dwb","Dwc","Dwd","Dfa","Dfb","Dfc","Dfd",
              "ET","EF")
desc_vec <- c("Tropikal Yagmur Ormani","Tropikal Muson","Tropikal Savana",
              "Sicak Col","Soguk Col","Sicak Yari Kurak","Soguk Yari Kurak",
              "Akdeniz - Sicak Yaz","Akdeniz - Ilik Yaz","Akdeniz - Serin Yaz",
              "Subtropikal - Kis Kurak Sicak Yaz","Subtropikal - Kis Kurak Ilik Yaz","Subtropikal - Kis Kurak Serin Yaz",
              "Subtropikal - Sicak Yaz","Okyanus - Ilik Yaz","Okyanus - Serin Yaz",
              "Karasal Akd - Sicak Yaz","Karasal Akd - Ilik Yaz","Karasal Akd - Serin Yaz","Karasal Akd - Cok Serin Yaz",
              "Karasal - Kis Kurak Sicak Yaz","Karasal - Kis Kurak Ilik Yaz","Karasal - Kis Kurak Serin Yaz","Karasal - Kis Kurak Cok Serin",
              "Karasal Nemli Sicak Yaz","Karasal Nemli Ilik Yaz","Karasal Nemli Serin Yaz","Karasal Nemli Cok Serin",
              "Tundra","Buz Ortusu")
col_vec  <- c("#0000FF","#0078FF","#46AAFA",
              "#FF0000","#FF9696",
              "#F5A500","#FFDB63",
              "#FFFF00","#C6C700","#969600",
              "#96FF96","#63C763","#329632",
              "#C8FF50","#64FF50","#32C800",
              "#FF00FF","#C800C8","#963296","#640064",
              "#FF6EFF","#C71585","#8B008B","#4B0082",
              "#00FFFF","#37C8FF","#007D7D","#00465F",
              "#B2B2B2","#686868")
ana_grup <- c("A","A","A","B","B","B","B",
              "C","C","C","C","C","C","C","C","C",
              "D","D","D","D","D","D","D","D","D","D","D","D",
              "E","E")

koppen_full <- data.frame(
  value    = val_vec,
  label    = lab_vec,
  desc     = desc_vec,
  color    = col_vec,
  ana_grup = ana_grup,
  stringsAsFactors = FALSE
)

present <- koppen_full[koppen_full$value %in% vals, ]

Asagidaki tablo Italya’da gozlemlenen iklim siniflarini ve tanımlarini gostermektedir:

Tablo 1. Italya’da Gozlemlenen Koppen Iklim Siniflari
Sinif Kodu Aciklama Ana Grup Renk Kodu
6 BSh Sicak Yari Kurak B #F5A500
7 BSk Soguk Yari Kurak B #FFDB63
8 Csa Akdeniz - Sicak Yaz C #FFFF00
9 Csb Akdeniz - Ilik Yaz C #C6C700
14 Cfa Subtropikal - Sicak Yaz C #C8FF50
15 Cfb Okyanus - Ilik Yaz C #64FF50
18 Dsb Karasal Akd - Ilik Yaz D #C800C8
19 Dsc Karasal Akd - Serin Yaz D #963296
26 Dfb Karasal Nemli Ilik Yaz D #37C8FF
27 Dfc Karasal Nemli Serin Yaz D #007D7D
29 ET Tundra E #B2B2B2
30 EF Buz Ortusu E #686868

Italya Koppen Iklim Haritasi

levels(koppen_italy) <- data.frame(value = present$value, label = present$label)

color_values  <- setNames(present$color, present$label)
legend_labels <- setNames(paste0(present$label, "  -  ", present$desc), present$label)

neighbors <- ne_countries(
  scale   = "medium",
  country = c("France","Switzerland","Austria","Slovenia","Croatia","Tunisia","Malta"),
  returnclass = "sf"
)

bbox  <- ext(koppen_italy)
x_exp <- (bbox$xmax - bbox$xmin) * 0.08
y_exp <- (bbox$ymax - bbox$ymin) * 0.08
xlim  <- c(bbox$xmin - x_exp, bbox$xmax + x_exp)
ylim  <- c(bbox$ymin - y_exp, bbox$ymax + y_exp)

ggplot() +
  geom_sf(data = neighbors, fill = "#ECECEC", color = "#AAAAAA", linewidth = 0.3) +
  geom_spatraster(data = koppen_italy) +
  scale_fill_manual(
    values   = color_values,
    na.value = "transparent",
    name     = "Koppen\nIklim Sinifi",
    labels   = legend_labels,
    drop     = TRUE
  ) +
  geom_sf(data = italy_sf, fill = NA, color = "#222222", linewidth = 0.6) +
  coord_sf(xlim = xlim, ylim = ylim, expand = FALSE) +
  annotation_north_arrow(
    location    = "tl",
    which_north = "true",
    pad_x  = unit(0.4, "cm"),
    pad_y  = unit(0.4, "cm"),
    style  = north_arrow_fancy_orienteering(
      fill = c("white","#333333"), line_col = "#333333",
      text_col = "#333333", text_size = 9
    ),
    height = unit(1.5, "cm"),
    width  = unit(1.5, "cm")
  ) +
  annotation_scale(
    location   = "br",
    width_hint = 0.25,
    bar_cols   = c("#333333","white"),
    text_col   = "#333333",
    line_col   = "#333333",
    text_cex   = 0.75,
    pad_x = unit(0.5, "cm"),
    pad_y = unit(0.5, "cm")
  ) +
  labs(
    title    = "Italya - Koppen Iklim Siniflandirmasi",
    subtitle = "Beck ve ark. (2018) guncellenmis Koppen-Geiger siniflandirmasi",
    caption  = "Veri: Koppen-Geiger Iklim Siniflandirmasi (1 km cozunurluk)  |  Projeksiyon: WGS84 (EPSG:4326)"
  ) +
  theme(
    plot.background  = element_rect(fill = "#F0F4F8", color = NA),
    panel.background = element_rect(fill = "#D6E8F5", color = NA),
    panel.border     = element_rect(color = "#444444", fill = NA, linewidth = 0.8),
    panel.grid.major = element_line(color = "#B8CDD8", linewidth = 0.3, linetype = "dashed"),
    plot.title       = element_text(size = 16, face = "bold",   hjust = 0.5, color = "#1A1A2E", margin = margin(b=4)),
    plot.subtitle    = element_text(size = 11, face = "italic", hjust = 0.5, color = "#444466", margin = margin(b=8)),
    plot.caption     = element_text(size = 7.5, color = "#666688", hjust = 1, margin = margin(t=6)),
    legend.position      = "right",
    legend.title         = element_text(size = 10, face = "bold", color = "#1A1A2E"),
    legend.text          = element_text(size = 8.5,  color = "#222244"),
    legend.background    = element_rect(fill = "#FAFAFA", color = "#CCCCCC", linewidth = 0.4),
    legend.key           = element_rect(fill = NA),
    legend.key.size      = unit(0.55, "cm"),
    legend.margin        = margin(6,8,6,8),
    legend.box.margin    = margin(0,0,0,10),
    axis.text  = element_text(size = 7.5, color = "#333355"),
    axis.title = element_blank(),
    plot.margin = margin(14,10,12,10)
  )
Sekil 1. Italya Koppen-Geiger Iklim Siniflandirmasi (Beck ve ark., 2018)

Sekil 1. Italya Koppen-Geiger Iklim Siniflandirmasi (Beck ve ark., 2018)


Italya’daki Iklim Siniflarinin Dagilimi

pixel_counts <- as.data.frame(table(values(koppen_italy, na.rm = TRUE)))
colnames(pixel_counts) <- c("value","pixel")
pixel_counts$value <- as.integer(as.character(pixel_counts$value))
pixel_counts <- merge(pixel_counts, present[, c("value","label","color","ana_grup")], by = "value")
pixel_counts$alan_yuzde <- round(pixel_counts$pixel / sum(pixel_counts$pixel) * 100, 1)
pixel_counts <- pixel_counts[order(-pixel_counts$pixel), ]

ggplot(pixel_counts, aes(x = reorder(label, alan_yuzde), y = alan_yuzde, fill = label)) +
  geom_col(width = 0.7, show.legend = FALSE) +
  geom_text(aes(label = paste0(alan_yuzde, "%")),
            hjust = -0.15, size = 3.5, color = "#333333") +
  scale_fill_manual(values = setNames(pixel_counts$color, pixel_counts$label)) +
  coord_flip(clip = "off") +
  scale_y_continuous(expand = expansion(mult = c(0, 0.12))) +
  labs(
    title   = "Italya - Iklim Siniflarinin Alansal Dagilimi",
    x       = "Koppen Sinifi",
    y       = "Alan Yuzdesi (%)",
    caption = "Kaynak: Beck ve ark. (2018)"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title       = element_text(face = "bold", hjust = 0.5, color = "#1A1A2E"),
    panel.grid.major.y = element_blank(),
    panel.grid.minor   = element_blank(),
    axis.text.y      = element_text(face = "bold"),
    plot.caption     = element_text(color = "#888888", size = 8),
    plot.margin      = margin(10, 30, 10, 10)
  )
Sekil 2. Italya'daki Koppen iklim siniflarinin alansal dagilimi

Sekil 2. Italya’daki Koppen iklim siniflarinin alansal dagilimi


Kaynakca

Beck, H.E., Zimmermann, N.E., McVicar, T.R., Vergopolan, N., Berg, A., & Wood, E.F. (2018). Present and future Koppen-Geiger climate classification maps at 1-km resolution. Scientific Data, 5, 180214. https://doi.org/10.1038/sdata.2018.214


Bu rapor R Markdown ile uretilmistir. Kod bloklari “Code” butonlari ile goruntulenebilir.