Format dữ liệu trong GGPLOT2 với scales

Tác giả: Hoàng Đức Anh | 2018-08-17

Trong quá trình trực quan hóa dữ liệu, chúng ta sẽ thường gặp phải những vấn đề liên quan đến việc format lại dữ liệu để hiển thị tốt nhất. Trong bài viết này, Ranalytics sẽ hướng dẫn các bạn sử dụng một package rất hữu hiệu trong việc format lại dữ liệu trên trục biểu đồ là scales. Cách thức format dữ liệu trên biểu đồ trong nội dung bài viết này gồm 4 nhóm chính:

  • Hiển thị ký tự tiền tệ
  • Hiển thị ký tự phần trăm
  • Hiển thị theo cấu trúc của báo cáo khoa học
  • Hiển thị dữ liệu thời gian

Làm việc với các kiểu dữ liệu thông thường

Trước hết, ta hãy tạo biểu đồ cơ bản đầu tiên từ tập dữ liệu mtcars

# Gọi library
library(tidyverse)
library(scales)
# Sử dụng theme_bw cho tất cả các biểu đồ
theme_set(theme_bw())
# Tạo biểu đồ cơ bản
p <- ggplot(cars, aes(x = speed, y = dist)) + 
  geom_point(col = "navy")
p

Sau đây, chúng ta sẽ thử các cách khác nhau để format lại trục dữ liệu trên biểu đồ. Để thực hiện cách format lại dữ liệu trên trục, ta có thể sử dụng option labels trên từng trục.

  • Dữ liệu hiển thị dạng phần trăm
p + scale_y_continuous(labels = percent)

  • Dữ liệu hiển thị có chứa ký hiệu tiền tệ
# dollar
p + scale_y_continuous(labels = dollar)

  • Dữ liệu hiển thị ký tự khoa học, ví dụ 1e6
p + scale_y_continuous(labels = scientific)

Trục biểu đồ với dữ liệu thời gian

  • Tạo dữ liệu dummy
df <- data.frame(
  date = seq(13000, 13200, by = 1) %>% lubridate::as_date(),
  price = runif(201)*10*abs(rnorm(201,0,1)))
head(df)
##         date       price
## 1 2005-08-05 12.26523205
## 2 2005-08-06 12.57299049
## 3 2005-08-07  0.02048806
## 4 2005-08-08  7.21665067
## 5 2005-08-09  1.30968090
## 6 2005-08-10  2.00408573
p2 <- ggplot(data=df, 
             aes(x=date, y=price)) + 
  geom_line(col = "darkblue")
p2

Ta có thể điều chỉnh cách thức hiển thị trên trục x theo nhiều cách như sau

library(scales)

# Format : tháng/ngày
p2 + scale_x_date(breaks = date_breaks("month"),
  labels = date_format("%m/%y")) 

# Format: tháng, năm - hiển thị ký tự tiếng Anh
p2 + scale_x_date(breaks = date_breaks("months"),
                  labels = date_format("%b,%y"))

Để hiểu hơn cách thức hiển thị dữ liệu dạng ngày tháng trong R, ta có thể tra cứu cách thức format với câu lệnh

?strptime

Như vậy, chúng ta đã vừa được làm quen với một số kiểu format trục biểu đồ cơ bản - nhưng rất hữu dụng trong package scales, những hàm cơ bản trên được dùng rất nhiều trong công việc thực tế. 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