Lewati ke konten utama

Visualisasi Data dengan Highcharter di R

Pelajari cara menggunakan Highcharter untuk membuat visualisasi yang mengundang perhatian.
Diperbarui 28 Sep 2026  · 12 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Menurut saya, visualisasi data adalah teknik terbaik untuk menampilkan pelaporan deskriptif dan analitik pada sekumpulan data. Saya termasuk orang yang menyukai visualisasi data. Anda bisa menyajikan keseluruhan cerita dalam satu layar—meski ini juga bergantung pada kompleksitas datanya. Jika Anda membaca tutorial ini, saya berasumsi Anda sudah mengenal paket Ggplot2 di R yang digunakan untuk menghasilkan berbagai grafik yang menarik untuk analisis, namun agak kurang dalam hal sifat dinamis.

Kembali ke Highcharter, ini adalah pembungkus (wrapper) R untuk library javascript HighCharts beserta modulnya.

Fitur utama paket ini antara lain:

  • Anda dapat membuat berbagai bagan dengan gaya yang sama seperti scatter, bubble, time series, heatmap, treemap, bagan batang, dan lainnya.
  • Mendukung berbagai objek R.
  • Mendukung Highstocks Charts, Choropleth.
  • Memiliki gaya piping yang disukai semua pengguna dan programmer R.
  • Beragam tema dengan tampilan yang memukau.

Mari langsung praktik dan membuat beberapa visualisasi dengan Highcharter mengikuti fitur-fitur di atas:

Membuat Beberapa Grafik Dasar Menggunakan Fungsi hchart

hchart adalah fungsi generik yang menerima sebuah objek dan mengembalikan objek highcharter. Ada fungsi-fungsi yang perilakunya mirip dengan fungsi pada paket ggplot2 seperti:

  • hchart bekerja seperti qplot milik ggplot2.
  • hc_add_series bekerja seperti geom_S milik ggplot2.
  • hcaes bekerja seperti aes milik ggplot2.

Mari pilih sebuah dataset. Saya akan menggunakan dataset Pokemon yang juga disediakan dalam paket Highcharter. Lihat sekilas datasetnya.

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", "...

Mari buat bagan batang.

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

Anda mendapatkan bagan batang terkait kategori type 1 dari pokemon.

Misalkan Anda ingin bagan kolom, maka satu-satunya variabel yang perlu diubah adalah type menjadi column.

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

Treemap

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

Kita juga dapat menggunakan hc_add_series untuk memplot bagan. Fungsi ini digunakan untuk menambah dan menghapus series dari objek highchart.

scatterplot

Scatterplot

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

Perbedaan utama antara fungsi geom_ di ggplot2 dan hc_add_series adalah kita perlu menambahkan data dan estetika secara eksplisit di setiap fungsi, sedangkan di ggplot2 kita bisa menambahkan data dan estetika pada satu layer lalu menambahkan geom lain yang bekerja pada data dan estetika yang sama.

Contoh yang tepat diberikan di bawah ini menggunakan dataset diamond pada paket ggplot2.

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

Seperti pada contoh, grafik diplot menggunakan tiga series yang terdiri dari Scatterplot, garis, dan Area-range.

Mari mereplikasi pengembangan javascript highchart ke dalam R menggunakan hc_add_series.

javascript highchart

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

Jika dibandingkan, Anda dapat melihat setiap blok kode javascript dikonversi menjadi fungsi R yang saling terhubung dengan pipe. Kita bisa melihat beberapa argumen seperti pointFormat milik hctooltip dalam format yang digunakan sama seperti pada kode Javascript; detailnya dapat dilihat di tautan ini.

Highstocks

Highstocks adalah bagan untuk analisis finansial dan deret waktu; ini bekerja baik dengan library quamtmod, dan memudahkan untuk memplot simbol, lalu Anda bisa menambahkan lebih banyak series menggunakan hc_add_series.

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

hchart(x)
highstocks

Seperti pada bagan tersebut, kita tidak perlu menambahkan kode tambahan; hchart berpadu dengan objek xts secara sangat efisien dan memberikan cuplikan data yang dinamis. Anda dapat menggunakan fungsi zoom untuk menelusuri data dalam potongan yang lebih kecil demi analisis yang lebih baik.

Mari gunakan hc_add_series.

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

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

Seperti yang terlihat, visualisasi ini menyesuaikan volume data yang besar dengan sangat efisien.

Cobalah stok dengan berbagai objek xts.

Highmaps

Cara termudah untuk memetakan peta dengan highcharter adalah menggunakan fungsi hcmap. Pilih sebuah URL dari koleksi highmaps dan gunakan URL tersebut sebagai peta pada fungsi hcmap. Ini akan mengunduh peta dan membuat objek menggunakan info tersebut sebagai argumen mapdata.

Mari plot peta India.

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

Itu peta polos; bagaimana jika kita mengubahnya menjadi choropleth.

Setiap data peta yang diunduh dari koleksi peta highcharts memiliki key untuk menggabungkan data. Ada 2 fungsi yang membantu mengetahui region yang dikodekan agar tahu cara menggabungkan peta dan data:

  • download_map_data: Mengunduh data geojson dari koleksi highcharts.
  • get_data_from_map: Mendapatkan properti untuk setiap region pada peta, seperti key dari data peta.
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

Lakukan beberapa eksperimen dengan hc_add_series pada peta dan choropleth. Untuk beberapa detail dan contoh, kunjungi tautan ini.

PlugIns

Sekarang mari coba beberapa plugin yang disediakan oleh highcharter seperti pengelompokan, drill-down, mengunduh, mencetak data, dan beberapa tema yang menarik.

Mari kelompokkan data dari dataset mpg; di sini demi visualisasi yang lebih baik kita membuat sebuah list yang mengkategorikan data menurut manufacturer.

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

Mari buat sebuah bagan yang melakukan drill-down ke bagan lain untuk analisis yang lebih baik. Anda akan lebih mudah memahami kodenya jika Anda memahami list di R.

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

Mari terapkan Drill down pada bagan lainnya.

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

Mari tambahkan fungsi ekspor data.

pokemon%>%
  count(type_1)%>%
  arrange(n)%>%
  hchart(type = "bar", hcaes(x = type_1, y = n, color = type_1))%>%
  hc_exporting(enabled = TRUE)
chart 5 Terakhir, kita tambahkan beberapa tema.
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

Anda dapat belajar banyak dari tautan ini; ini adalah library lengkap untuk Highcharter. Saya juga membagikan salah satu grafik favorit saya yang dibuat pada dataset cuaca; di sini salah satu argumen menarik polar digunakan—dengan mengatur argumen ke TRUE, keseluruhan tampilannya berubah.

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

Jika Anda ingin mempelajari lebih lanjut tentang Visualisasi Data di R, ikuti kursus Data Visualization with ggplot2 (Bagian 1) dari DataCamp dan lihat juga Tutorial Rumus R kami.

Topik
Visualisasi Data
Data Science
R

Pelajari lebih lanjut tentang R dan Visualisasi Data

{count, plural, one {Kursus} other {Kursus}}

Pengantar Visualisasi Data dengan ggplot2

{hours} jam
190.5K
Pelajari cara menghasilkan visualisasi data yang bermakna dan indah dengan ggplot2 dengan memahami grammar of graphics.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

{count, plural, one {blog} other {blogs}}

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

{count, plural, one {blog} other {blogs}}

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

{count, plural, one {blog} other {blogs}}

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

{count, plural, one {blog} other {blogs}}

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya