EX1: Làm việc với dữ liệu Economics và trực quan biển tỷ lệ thu nhập cá nhân psavert của người dân Mỹ. Chúng ta cần trực quan dữ liệu theo chuỗi thời gian để xem xét tỷ lệ thu nhập của người dân Mỹ tăng hay giảm từ năm 1965 đến 2015

I. Import thư viện

library(ggplot2)
library(dplyr)
library(scales)

II. Dữ liệu economics

head(economics)
## # A tibble: 6 × 6
##   date         pce    pop psavert uempmed unemploy
##   <date>     <dbl>  <dbl>   <dbl>   <dbl>    <dbl>
## 1 1967-07-01  507. 198712    12.6     4.5     2944
## 2 1967-08-01  510. 198911    12.6     4.7     2945
## 3 1967-09-01  516. 199113    11.9     4.6     2958
## 4 1967-10-01  512. 199311    12.9     4.9     3143
## 5 1967-11-01  517. 199498    12.8     4.7     3066
## 6 1967-12-01  525. 199657    11.8     4.8     3018

III. Lọc dữ liệu từ 1965 đến 2015

eco_65_15 <- economics %>%
  filter(
    date >= as.Date("1965-01-01"),
    date <= as.Date("2015-12-31")
  )

range(eco_65_15$date)
## [1] "1967-07-01" "2015-04-01"
summary(eco_65_15$psavert)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   2.200   6.400   8.400   8.567  11.100  17.300

IV. Vẽ biểu đồ

4.1 Khởi tạo khung biểu đồ + mapping (aes)

p <- ggplot(eco_65_15, aes(x = date, y = psavert))
p

Giải thích

  • ggplot(data, aes(...)) tạo “khung” cho biểu đồ.
  • aes(x = ..., y = ...)ánh xạ: cột nào lên trục X/Y.
  • Chưa có geom_* nên lúc này plot sẽ “trống” hoặc chưa có hình.

4.2 Thêm đường (geom_line)

p <- p +
  geom_line(
    color = "#90DBF4",
    linewidth = 0.7,
    alpha = 0.9
  )
p


4.3 Chỉnh trục X (ngày) hiển thị theo năm

p <- p +
  scale_x_date(
    date_breaks = "5 years",
    labels = scales::date_format("%Y")
  )
p


4.4 Chỉnh trục Y hiển thị dạng phần trăm

p <- p +
  scale_y_continuous(
    labels = percent_format(scale = 1)
  )
p


4.5 Thêm tiêu đề, nhãn trục, chú thích nguồn

p <- p +
  labs(
    title = "Tỷ lệ tiết kiệm cá nhân của người dân Mỹ (1965–2015)",
    x = "Năm",
    y = "Tỷ lệ tiết kiệm (%)",
    caption = "Nguồn: FRED (ggplot2 economics dataset)"
  )
p


4.6 Chọn theme và tinh chỉnh một vài chi tiết

p <- p +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", size = 14),
    axis.title  = element_text(face = "bold"),
    panel.grid.minor = element_blank()
  )
p


V. Bản code hoàn chỉnh (gộp lại)

eco_65_15 <- economics %>%
  filter(
    date >= as.Date("1965-01-01"),
    date <= as.Date("2015-12-31")
  )

ggplot(eco_65_15, aes(x = date, y = psavert)) +
  geom_line(
    color = "#90DBF4",
    linewidth = 0.7,
    alpha = 0.9
  ) +
  scale_x_date(
    date_breaks = "5 years",
    labels = scales::date_format("%Y")
  ) +
  scale_y_continuous(
    labels = percent_format(scale = 1)
  ) +
  labs(
    title = "Tỷ lệ tiết kiệm cá nhân của người dân Mỹ (1965–2015)",
    x = "Năm",
    y = "Tỷ lệ tiết kiệm (%)",
    caption = "Nguồn: FRED (ggplot2 economics dataset)"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", size = 14),
    axis.title  = element_text(face = "bold"),
    panel.grid.minor = element_blank()
  )