Vẽ biểu đồ động với highcharter

Tác giả: Nguyễn Hải Trường | 2019-08-30

Trong bài viết này, RAnalytics sẽ hướng dẫn các bạn cách vẽ biểu đồ động sử dụng package highcharter.

Chúng ta sẽ sử dụng dữ liệu gapminder trong package gapminder.

# Dữ liệu
data(gapminder, package = "gapminder")

library(dplyr)
# Summary dữ liệu
gapminder %>% summary
##         country        continent        year         lifeExp     
##  Afghanistan:  12   Africa  :624   Min.   :1952   Min.   :23.60  
##  Albania    :  12   Americas:300   1st Qu.:1966   1st Qu.:48.20  
##  Algeria    :  12   Asia    :396   Median :1980   Median :60.71  
##  Angola     :  12   Europe  :360   Mean   :1980   Mean   :59.47  
##  Argentina  :  12   Oceania : 24   3rd Qu.:1993   3rd Qu.:70.85  
##  Australia  :  12                  Max.   :2007   Max.   :82.60  
##  (Other)    :1632                                                
##       pop              gdpPercap       
##  Min.   :6.001e+04   Min.   :   241.2  
##  1st Qu.:2.794e+06   1st Qu.:  1202.1  
##  Median :7.024e+06   Median :  3531.8  
##  Mean   :2.960e+07   Mean   :  7215.3  
##  3rd Qu.:1.959e+07   3rd Qu.:  9325.5  
##  Max.   :1.319e+09   Max.   :113523.1  
## 

Giả sử, chúng ta muốn vẽ biểu đồ thể hiện trung bình GDP bình quân đầu người (gdpPercap) của từng châu lục (continent) theo từng các năm (year).

# Tính toán GDP bình quân đầu người theo châu lục theo từng năm
data <- gapminder %>% 
  group_by(year, continent) %>% 
  summarise(gdp_per_cap = mean(gdpPercap) %>% round(0))

data %>% head(10)
## # A tibble: 10 x 3
## # Groups:   year [2]
##     year continent gdp_per_cap
##    <int> <fct>           <dbl>
##  1  1952 Africa           1253
##  2  1952 Americas         4079
##  3  1952 Asia             5195
##  4  1952 Europe           5661
##  5  1952 Oceania         10298
##  6  1957 Africa           1385
##  7  1957 Americas         4616
##  8  1957 Asia             5788
##  9  1957 Europe           6963
## 10  1957 Oceania         11599
# Biến đổi dữ liệu từ dạng dọc sang ngang
library(tidyr)
data_new <- data %>% 
  spread(continent, gdp_per_cap)

data_new %>% head(10)
## # A tibble: 10 x 6
## # Groups:   year [10]
##     year Africa Americas  Asia Europe Oceania
##    <int>  <dbl>    <dbl> <dbl>  <dbl>   <dbl>
##  1  1952   1253     4079  5195   5661   10298
##  2  1957   1385     4616  5788   6963   11599
##  3  1962   1598     4902  5729   8365   12696
##  4  1967   2050     5668  5971  10144   14495
##  5  1972   2340     6491  8187  12480   16417
##  6  1977   2586     7352  7791  14284   17284
##  7  1982   2482     7507  7434  15618   18555
##  8  1987   2283     7793  7608  17214   20448
##  9  1992   2282     8045  8640  17062   20894
## 10  1997   2379     8889  9834  19077   24024
# Create interactive line chart
library(highcharter)

# Tạo biểu đồ
h <- highchart() %>% 
  # Thêm trục X (year)
  hc_xAxis(categories = data_new$year) %>% 
  # Thêm các đường line (GDP bình quân của các châu lục)
  hc_add_series(name = "Africa", 
                data = data_new$Africa
                ) %>% 
  hc_add_series(name = "Americas", 
                data = data_new$Americas
                ) %>% 
  hc_add_series(name = "Asia", 
                data = data_new$Asia
                ) %>% 
  hc_add_series(name = "Europe", 
                data = data_new$Europe
                ) %>% 
  hc_add_series(name = "Oceania", 
                data = data_new$Oceania
                ) %>% 
  hc_colors(c("darkgreen", "darkred", "steelblue", "gray", "orange"))
# Customize biểu đồ
h1 <- h %>%
  # Add tên tiêu đề
  hc_title(text = "Average of GDP per capital by Country",
           margin = 20, 
           align = "left",
           style = list(color = "black", fontWeight = "bold")
           ) %>% 
  # Add subtitle
  hc_subtitle(text = "1952 to 2007",
              align = "left") %>% 
  # Add caption
  hc_credits(enabled = T, # add caption
             text = "Gapminder Data",
             href = "http://gapminder.com") %>% 
  # Add chú giải
  hc_legend(align = "right",
            verticalAlign = "top",
            layout = "vertical",
            x = 0, 
            y = 100
            ) %>%
  # Add đường so sánh
  hc_tooltip(crosshairs = TRUE, 
             backgroundColor = "#FCFFC5",
             shared = TRUE, 
             borderWidth = 4)

 

Chúng ta thấy dù không có thêm giá trị GDP lên biểu đồ, nhưng nếu muốn xem giá trị GDP của từng châu lục theo các năm chúng ta cũng có thể xem được bằng cách di chuột đến vùng tương ứng - rất thuận tiện và trực quan.


Như vậy, chúng ta đã vừa được học cách vẽ biểu đồ động với highcharter. Chúc các bạn học tập và làm việc hiệu quả với Ranalytics.vn!

comments powered by Disqus