Ana içeriğe atla

R’de Highcharter ile Veri Görselleştirme

Highcharter kullanarak ilgi uyandıran görselleştirmeler oluşturmayı öğrenin.
Güncel 3 Eki 2026  · 12 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

Veri görselleştirme, bir veri kümesi üzerinde betimleyici ve analitik raporlamayı göstermek için en iyi teknik bence. Veri görselleştirmeyi seven biriyim. Tüm hikayeyi tek bir ekranda sunabilirsiniz; elbette bu, verinin karmaşıklığına da bağlıdır. Bu eğitimi okuyorsanız, analiz için harika grafikler üreten ancak dinamik özellikler bakımından bir miktar eksik kalan R’deki Ggplot2 paketine aşina olduğunuzu düşünüyorum.

Highcharter’a geri dönersek: Bu, HighCharts JavaScript kütüphanesinin ve modüllerinin bir R sarmalayıcısıdır.

Bu paketin başlıca özellikleri şunlardır:

  • Scatter, baloncuk, zaman serisi, ısı haritası, ağaç haritası, çubuk grafikler vb. gibi çeşitli grafik türlerini aynı stille oluşturabilirsiniz.
  • Çeşitli R nesnelerini destekler.
  • Highstocks grafikleri, koroplet haritaları destekler.
  • Tüm R kullanıcıları ve programcılarının sevdiği bir pipe tarzına sahiptir.
  • Harika görünümlere sahip geniş tema yelpazesi.

Haydi işe koyulalım ve yukarıda bahsedilen özellikleri izleyerek Highcharter ile bazı görselleştirmeler oluşturalım:

hchart Fonksiyonunu Kullanarak Temel Grafikler Oluşturma

hchart, bir nesne alıp bir highcharter nesnesi döndüren genel bir fonksiyondur. ggplot2 paketinin fonksiyonlarına benzer davranışları olan fonksiyonlar şunlardır:

  • hchart, ggplot2’nin qplot’u gibi çalışır.
  • hc_add_series, ggplot2’nin geom_S’i gibi çalışır.
  • hcaes, ggplot2’nin aes’i gibi çalışır.

Bir veri kümesi seçelim. Highcharter paketinde de sunulan Pokemon veri kümesini alacağım. Veriye hızlıca göz atalım.

glimpse(pokemon)
## Observations: 718
## Variables: 20
## $ id              <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,...
## $ pokemon         <chr> "bulbasaur", "ivysaur", "venusaur", "charmande...
## $ species_id      <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,...
## $ height          <int> 7, 10, 20, 6, 11, 17, 5, 10, 16, 3, 7, 11, 3, ...
## $ weight          <int> 69, 130, 1000, 85, 190, 905, 90, 225, 855, 29,...
## $ base_experience <int> 64, 142, 236, 62, 142, 240, 63, 142, 239, 39, ...
## $ type_1          <chr> "grass", "grass", "grass", "fire", "fire", "fi...
## $ type_2          <chr> "poison", "poison", "poison", NA, NA, "flying"...
## $ attack          <int> 49, 62, 82, 52, 64, 84, 48, 63, 83, 30, 20, 45...
## $ defense         <int> 49, 63, 83, 43, 58, 78, 65, 80, 100, 35, 55, 5...
## $ hp              <int> 45, 60, 80, 39, 58, 78, 44, 59, 79, 45, 50, 60...
## $ special_attack  <int> 65, 80, 100, 60, 80, 109, 50, 65, 85, 20, 25, ...
## $ special_defense <int> 65, 80, 100, 50, 65, 85, 64, 80, 105, 20, 25, ...
## $ speed           <int> 45, 60, 80, 65, 80, 100, 43, 58, 78, 45, 30, 7...
## $ color_1         <chr> "#78C850", "#78C850", "#78C850", "#F08030", "#...
## $ color_2         <chr> "#A040A0", "#A040A0", "#A040A0", NA, NA, "#A89...
## $ color_f         <chr> "#81A763", "#81A763", "#81A763", "#F08030", "#...
## $ egg_group_1     <chr> "monster", "monster", "monster", "monster", "m...
## $ egg_group_2     <chr> "plant", "plant", "plant", "dragon", "dragon",...
## $ url_image       <chr> "1.png", "2.png", "3.png", "4.png", "5.png", "...

Bir çubuk grafik çizelim.

pokemon%>%
  count(type_1)%>%
  arrange(n)%>%
  hchart(type = "bar", hcaes(x = type_1, y = n))
bar chart

Böylece pokemonların birinci tür kategorisine ilişkin bir çubuk grafik elde ettiniz.

Diyelim ki bunun yerine bir sütun grafik istiyorsunuz; o zaman değiştirmeniz gereken tek değişken, type’ı column olarak ayarlamak.

pokemon%>%
  count(type_1)%>%
  arrange(n)%>%
  hchart(type = "column", hcaes(x = type_1, y = n))
bar chart 2

Ağaç Haritası (Treemap)

pokemon%>%
  count(type_1)%>%
  arrange(n)%>%
  hchart(type = "treemap", hcaes(x = type_1, value = n, color = n))
treemap

Grafiği çizmek için hc_add_series’i de kullanabiliriz. Bu fonksiyon, highchart nesnesine seri eklemek ve çıkarmak için kullanılır.

scatterplot

Saçılım Grafiği (Scatterplot)

highchart()%>%
  hc_add_series(pokemon, "scatter", hcaes(x = height, y = weight))

ggplot2’nin geom_ fonksiyonları ile hc_add_series arasındaki temel fark, ggplot2’de veriyi ve estetiği bir katmanda ekleyip aynı veri ve estetik üzerinde çalışan daha fazla geom ekleyebilmemize karşın, hc_add_series’te her fonksiyonda veriyi ve estetiği açıkça eklememiz gerekmesidir.

ggplot2 paketindeki diamond veri kümesi kullanılarak verilen doğru bir örnek aşağıdadır.

data(diamonds, package = "ggplot2")

set.seed(123)
data <- sample_n(diamonds, 300)

modlss <- loess(price ~ carat, data = data)
fit <- arrange(augment(modlss), carat)

highchart() %>%
  hc_add_series(data, type = "scatter",
                hcaes(x = carat, y = price, size = depth, group = cut)) %>%
  hc_add_series(fit, type = "line", hcaes(x = carat, y = .fitted),
                name = "Fit", id = "fit") %>%
  hc_add_series(fit, type = "arearange",
                hcaes(x = carat, low = .fitted - 2*.se.fit,
                      high = .fitted + 2*.se.fit),
                linkedTo = "fit")
scatterplot 2

Örnekte görüldüğü gibi grafik, saçılım, çizgi ve alan aralığından oluşan üç seriyle çizilmiştir.

hc_add_series kullanarak bir highchart JavaScript geliştirmesini R’de çoğaltalım.

highchart's javascript

highchart() %>%
  hc_chart(type = "area") %>%
  hc_title(text = "Historic and Estimated Worldwide Population Distribution by Region") %>%
  hc_subtitle(text = "Source: Wikipedia.org") %>%
  hc_xAxis(categories = c("1750", "1800", "1850", "1900", "1950", "1999", "2050"),
           tickmarkPlacement = "on",
           title = list(enabled = FALSE)) %>%
  hc_yAxis(title = list(text = "Percent")) %>%
  hc_tooltip(pointFormat = "<span style=\"color:{series.color}\">{series.name}</span>:
             <b>{point.percentage:.1f}%</b> ({point.y:,.0f} millions)<br/>",
             shared = TRUE) %>%
  hc_plotOptions(area = list(
     stacking = "percent",
     lineColor = "#ffffff",
     lineWidth = 1,
     marker = list(
       lineWidth = 1,
       lineColor = "#ffffff"
       ))
     ) %>%
  hc_add_series(name = "Asia", data = c(502, 635, 809, 947, 1402, 3634, 5268)) %>%
  hc_add_series(name = "Africa", data = c(106, 107, 111, 133, 221, 767, 1766)) %>%
  hc_add_series(name = "Europe", data = c(163, 203, 276, 408, 547, 729, 628)) %>%
  hc_add_series(name = "America", data = c(18, 31, 54, 156, 339, 818, 1201)) %>%
  hc_add_series(name = "Oceania", data = c(2, 2, 2, 6, 13, 30, 46))
linechart

Karşılaştırırken, JavaScript kodunun her bloğunun birbirine bağlanan R fonksiyonlarına dönüştüğünü görebilirsiniz. hctooltip’in pointFormat gibi bazı argümanlara, JavaScript kodundakiyle aynı formatta dikkat edebiliriz; ayrıntılar için buraya bakabilirsiniz.

Highstocks

Highstocks, finansal ve zaman serisi analizi için grafiklerdir; quamtmod kütüphanesiyle iyi çalışır, sembolleri grafiklemek kolaydır ve ardından hc_add_series kullanarak daha fazla seri ekleyebilirsiniz.

x <- getSymbols("GOOG", auto.assign = FALSE)

hchart(x)
highstocks

Grafikte görüldüğü gibi ek bir koda ihtiyaç duymuyoruz; hchart, xts nesnesiyle son derece verimli şekilde çalışarak verinin dinamik bir anlık görüntüsünü sunuyor. Yakınlaştırma işlevini kullanarak daha iyi analiz için veriyi daha küçük parçalara indirebilirsiniz.

hc_add_series kullanalım.

y <- getSymbols("AMZN", auto.assign = FALSE)

highchart(type = "stock") %>%
  hc_add_series(x) %>%
  hc_add_series(y, type = "ohlc")
highstocks 2

Gördüğünüz gibi, görselleştirme büyük hacimli veriye oldukça verimli şekilde uyum sağlıyor.

Farklı xts nesneleriyle stok grafikleri denemeyi unutmayın.

Highmaps

Highcharter ile harita çizmenin en kolay yolu, hcmap fonksiyonunu kullanmaktır. Highmaps koleksiyonundan bir URL seçin ve bu URL’yi hcmap fonksiyonunda harita olarak kullanın. Bu işlem haritayı indirir ve mapdata argümanı olarak kullanılacak bir nesne oluşturur.

Hindistan’ın haritasını çizelim.

hcmap("https://code.highcharts.com/mapdata/countries/in/in-all.js")%>%
  hc_title(text = "India")
highmap

Bu, düz bir harita; peki ya bunu koroplet haritaya dönüştürsek?

Highcharts harita koleksiyonundan indirilen her harita verisinde, veriyi birleştirmek için kullanılacak anahtarlar bulunur. Harita ve veriyi nasıl birleştireceğinizi anlamak için bölgelerin nasıl kodlandığını görmeye yardımcı iki fonksiyon vardır:

  • download_map_data: GeoJSON verisini highcharts koleksiyonundan indirir.
  • get_data_from_map: Haritadaki her bölgenin özelliklerini, yani harita verisindeki anahtarları alır.
mapdata <- get_data_from_map(download_map_data("https://code.highcharts.com/mapdata/countries/in/in-all.js"))

glimpse(mapdata)
## Observations: 34
## Variables: 20
## $ `hc-group`    <chr> "admin1", "admin1", "admin1", "admin1", "admin1"...
## $ `hc-middle-x` <dbl> 0.65, 0.59, 0.50, 0.56, 0.46, 0.46, 0.51, 0.59, ...
## $ `hc-middle-y` <dbl> 0.81, 0.63, 0.74, 0.38, 0.64, 0.51, 0.34, 0.41, ...
## $ `hc-key`      <chr> "in-py", "in-ld", "in-wb", "in-or", "in-br", "in...
## $ `hc-a2`       <chr> "PY", "LD", "WB", "OR", "BR", "SK", "CT", "TN", ...
## $ labelrank     <chr> "2", "2", "2", "2", "2", "2", "2", "2", "2", "2"...
## $ hasc          <chr> "IN.PY", "IN.LD", "IN.WB", "IN.OR", "IN.BR", "IN...
## $ `alt-name`    <chr> "Pondicherry|Puduchcheri|Pondichéry", "Ã\u008dl...
## $ `woe-id`      <chr> "20070459", "2345748", "2345761", "2345755", "23...
## $ fips          <chr> "IN22", "IN14", "IN28", "IN21", "IN34", "IN29", ...
## $ `postal-code` <chr> "PY", "LD", "WB", "OR", "BR", "SK", "CT", "TN", ...
## $ name          <chr> "Puducherry", "Lakshadweep", "West Bengal", "Ori...
## $ country       <chr> "India", "India", "India", "India", "India", "In...
## $ `type-en`     <chr> "Union Territory", "Union Territory", "State", "...
## $ region        <chr> "South", "South", "East", "East", "East", "East"...
## $ longitude     <chr> "79.7758", "72.7811", "87.7289", "84.4341", "85....
## $ `woe-name`    <chr> "Puducherry", "Lakshadweep", "West Bengal", "Ori...
## $ latitude      <chr> "10.9224", "11.2249", "23.0523", "20.625", "25.6...
## $ `woe-label`   <chr> "Puducherry, IN, India", "Lakshadweep, IN, India...
## $ type          <chr> "Union Territor", "Union Territor", "State", "St...
#population state wise
pop = as.data.frame(c(84673556, 1382611, 31169272, 103804637, 1055450, 25540196, 342853, 242911, 18980000, 1457723, 60383628, 25353081, 6864602,
12548926, 32966238, 61130704, 33387677, 64429, 72597565, 112372972, 2721756, 2964007, 1091014, 1980602, 41947358, 1244464,
27704236, 68621012, 607688, 72138958, 3671032, 207281477, 10116752,91347736))

state= mapdata%>%
  select(`hc-a2`)%>%
  arrange(`hc-a2`)

State_pop = as.data.frame(c(state, pop))
names(State_pop)= c("State", "Population")

hcmap("https://code.highcharts.com/mapdata/countries/in/in-all.js", data = State_pop, value = "Population",
      joinBy = c("hc-a2", "State"), name = "Fake data",
      dataLabels = list(enabled = TRUE, format = '{point.name}'),
      borderColor = "#FAFAFA", borderWidth = 0.1,
      tooltip = list(valueDecimals = 0))
highmap 2

Haritalar ve koropletlerde hc_add_series ile bazı denemeler yapın. Bazı ayrıntılar ve örnekler için burayı ziyaret edin.

Eklentiler

Şimdi, highcharter’ın sağladığı gruplama, iç içe ayrıntı (drill-down), indirme, veriyi yazdırma ve harika temalar gibi bazı eklentileri deneyelim.

mpg veri kümesinin verilerini gruplandıralım; burada daha iyi görselleştirme için veriyi üreticiye göre kategorize eden bir liste oluşturduk.

data(mpg, package = "ggplot2")

mpgg <- mpg %>%
  filter(class %in% c("suv", "compact", "midsize")) %>%
  group_by(class, manufacturer) %>%
  summarize(count = n())

categories_grouped <- mpgg %>%
  group_by(name = class) %>%
  do(categories = .$manufacturer) %>%
  list_parse()

highchart() %>%
  hc_xAxis(categories = categories_grouped) %>%
  hc_add_series(data = mpgg, type = "bar", hcaes(y = count, color = manufacturer),
                showInLegend = FALSE)
chart

Daha iyi analiz için başka bir grafiğe inen (drill-down) bir grafik oluşturalım. R’de listeleri anlarsanız kodu çok daha verimli şekilde anlayabilirsiniz.

df <- data_frame(
  name = c("Animals", "Fruits", "Cars"),
  y = c(5, 2, 4),
  drilldown = tolower(name)
)


ds <- list_parse(df)
names(ds) <- NULL


hc <- highchart() %>%
  hc_chart(type = "column") %>%
  hc_title(text = "Basic drilldown") %>%
  hc_xAxis(type = "category") %>%
  hc_legend(enabled = FALSE) %>%
  hc_plotOptions(
    series = list(
      boderWidth = 0,
      dataLabels = list(enabled = TRUE)
    )
  ) %>%
  hc_add_series(
    name = "Things",
    colorByPoint = TRUE,
    data = ds
  )

dfan <- data_frame(
  name = c("Cats", "Dogs", "Cows", "Sheep", "Pigs"),
  value = c(4, 3, 1, 2, 1)
)

dffru <- data_frame(
  name = c("Apple", "Organes"),
  value = c(4, 2)
)

dfcar <- data_frame(
  name = c("Toyota", "Opel", "Volkswage"),
  value = c(4, 2, 2)
)

second_el_to_numeric <- function(ls){

  map(ls, function(x){
    x[[2]] <- as.numeric(x[[2]])
    x
  })

}

dsan <- second_el_to_numeric(list_parse2(dfan))

dsfru <- second_el_to_numeric(list_parse2(dffru))

dscar <- second_el_to_numeric(list_parse2(dfcar))

hc %>%
  hc_drilldown(
    allowPointDrilldown = TRUE,
    series = list(
      list(
        id = "animals",
        data = dsan
      ),
      list(
        id = "fruits",
        data = dsfru
      ),
      list(
        id = "cars",
        data = dscar
      )
    )
  )
chart 2

Drill-down’ı diğer grafiklere de uygulayalım.

tm <- pokemon %>%
  mutate(type_2 = ifelse(is.na(type_2), paste("only", type_1), type_2),
         type_1 = type_1) %>%
  group_by(type_1, type_2) %>%
  summarise(n = n()) %>%
  ungroup() %>%
  treemap::treemap(index = c("type_1", "type_2"),
                   vSize = "n", vColor = "type_1")
.chart 3
tm$tm <- tm$tm %>%
  tbl_df() %>%
  left_join(pokemon %>% select(type_1, type_2, color_f) %>% distinct(), by = c("type_1", "type_2")) %>%
  left_join(pokemon %>% select(type_1, color_1) %>% distinct(), by = c("type_1")) %>%
  mutate(type_1 = paste0("Main ", type_1),
         color = ifelse(is.na(color_f), color_1, color_f))

highchart() %>%
  hc_add_series_treemap(tm, allowDrillToNode = TRUE,
                        layoutAlgorithm = "squarified")
chart 4

Veri dışa aktarma işlevini ekleyelim.

pokemon%>%
  count(type_1)%>%
  arrange(n)%>%
  hchart(type = "bar", hcaes(x = type_1, y = n, color = type_1))%>%
  hc_exporting(enabled = TRUE)
chart 5 Son olarak birkaç tema ekleyelim.
pokemon%>%
  count(type_1)%>%
  arrange(n)%>%
  hchart(type = "bar", hcaes(x = type_1, y = n, color = type_1))%>%
  hc_exporting(enabled = TRUE)%>%
hc_add_theme(hc_theme_chalk())
chart 6

Buradan çok şey öğrenebilirsiniz; bu, Highcharter için eksiksiz bir kütüphanedir. Ayrıca, weather veri kümesi üzerinde oluşturduğum favori grafiklerimden birini paylaşıyorum; burada ilginç argümanlardan biri olan polar kullanılıyor; TRUE olarak ayarlandığında tüm hikâye dönüşüyor.

data("weather")

x <- c("Min", "Mean", "Max")
y <- sprintf("{point.%s}", c("min_temperaturec", "mean_temperaturec", "max_temperaturec"))
tltip <- tooltip_table(x, y)

hchart(weather, type = "columnrange",
       hcaes(x = date, low = min_temperaturec, high = max_temperaturec,
             color = mean_temperaturec)) %>%
  hc_chart(polar = TRUE) %>%
  hc_yAxis( max = 30, min = -10, labels = list(format = "{value} C"),
            showFirstLabel = FALSE) %>%
  hc_xAxis(
    title = list(text = ""), gridLineWidth = 0.5,
    labels = list(format = "{value: %b}")) %>%
  hc_tooltip(useHTML = TRUE, pointFormat = tltip,
             headerFormat = as.character(tags$small("{point.x:%d %B, %Y}")))
chart 7

R’de Veri Görselleştirme hakkında daha fazla bilgi edinmek isterseniz, DataCamp’in ggplot2 ile Veri Görselleştirme (Bölüm 1) kursunu alın ve R Formül Eğitimimize göz atın.

Konular
Veri Görselleştirme
Veri Bilimi
R

R ve Veri Görselleştirme hakkında daha fazlasını öğrenin

Kurs

ggplot2 ile Veri Görselleştirmeye Giriş

4 sa
190.6K
Grafiklerin dilbilgisini anlayarak ggplot2 ile anlamlı ve güzel veri görselleştirmeleri üretmeyi öğrenin.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Devamını GörDevamını Gör