{count, plural, one {Kursus} other {Kursus}}
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
qplotmilik ggplot2. - hc_add_series bekerja seperti
geom_Smilik ggplot2. - hcaes bekerja seperti
aesmilik 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))

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))

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

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

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")

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.

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))

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)

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")

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")

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))

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)

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
)
)
)

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")

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")

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)
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())

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}")))

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.
