Mục tiêu buổi học

1) Nội dung

• Biểu đồ điểm (scatterplot) với geom_point().

• Giới thiệu cách tạo biểu đồ tương tác với ggplotly.

• Biểu đồ vị trí địa lý với leaflet().

• Cách lưu biểu đồ dạng tĩnh và động.

2) Cấu trúc buổi học

• Lý thuyết + ví dụ minh hoạ.

• Học viên chia sẻ màn hình và thực hành.

I. Biểu đồ điểm geom_point

1. Câu lệnh mẫu

ggplot(data, 
       aes(x = `trục x`,  
           y = `trục y`, 
           color = `biến chia màu`, 
           size = `biến chia kích thước`) +
  geom_point() +
  labs(title = "tên biểu đồ",
       x = "tên trục x",
       y = "tên trục y",
       size = "tên legend theo kích thước",
       color = "tên legend theo màu sắc")

2. Dataset mẫu

• Vẽ biểu đồ tương quan giữa GDP và tuổi thọ năm 2007

quoc_gia chau_luc nam tuoi_tho dan_so(trieu_nguoi) GDP($)
Afghanistan Asia 1952 28.8 8.4 779.4
Afghanistan Asia 1957 30.3 9.2 820.9
Afghanistan Asia 1962 32.0 10.3 853.1
Afghanistan Asia 1967 34.0 11.5 836.2
Afghanistan Asia 1972 36.1 13.1 740.0
Afghanistan Asia 1977 38.4 14.9 786.1
quoc_gia chau_luc nam tuoi_tho dan_so(trieu_nguoi) GDP($)
Zimbabwe Africa 1982 60.4 7.6 788.9
Zimbabwe Africa 1987 62.4 9.2 706.2
Zimbabwe Africa 1992 60.4 10.7 693.4
Zimbabwe Africa 1997 46.8 11.4 792.4
Zimbabwe Africa 2002 40.0 11.9 672.0
Zimbabwe Africa 2007 43.5 12.3 469.7

3. Vẽ biểu đồ

data_2007 = data %>% 
  filter(nam == 2007)
  
gdp_tuoitho =
  ggplot(data_2007, 
       aes(x = `GDP($)`,
           y = tuoi_tho,
           color = chau_luc,
           size = `dan_so(trieu_nguoi)`)) +
  geom_point(alpha = 0.8) +
  labs(title = "Tương quan GDP và tuổi thọ (2007)",
       x = "GDP bình quân đầu người",
       y = "Tuổi thọ trung bình",
       size = "Dân số (triệu người)",
       color = "Châu lục")

gdp_tuoitho

II. Biểu đồ interactive

1. Câu lệnh mẫu

tooltip: tuỳ chỉnh các giá trị thể hiện trên nhãn dán khi rê chuột qua
• Có thể add layer guides(size = "none") để chỉnh sửa legend
plot_tinh = ggplot(data, 
       aes(x = `trục x`,
           y = `trục y`,
           ...,
           text = `nhãn dán`)) +
  geom_...() +
  labs() 
    
ggplotly(plot_tinh,
         tooltip = c("giá trị 1", "giá trị 2"))

2. Vẽ biểu đồ

gdp_tuoitho = 
  ggplot(data_2007, 
                   aes(x = `GDP($)`, 
                   y = tuoi_tho, 
                   color = chau_luc,
                   size = `dan_so(trieu_nguoi)`,
                   text = quoc_gia)) +
  geom_point(alpha = 0.8) +
  labs(title = "Tương quan GDP và tuổi thọ (2007)",
       x = "GDP bình quân đầu người",
       y = "Tuổi thọ trung bình",
       size = "Dân số (triệu người)",
       color = "Châu lục") 

int_gdp_tuoitho = ggplotly(gdp_tuoitho, tooltip = c("x", "text"))
int_gdp_tuoitho

III. Biểu đồ vị trí địa lý (map-based scatterplot)

1. Câu lệnh mẫu

• Biểu đồ toạ độ dùng package leaflet: khác cách vẽ biểu đồ với ggplot2

addTiles(): thêm lớp bản đồ nền
addCircles(): thêm các điểm dữ liệu, tương tự như geom_point()
lng (longtitude): biến kinh độ
lat (latitude): biến vĩ độ
radius: độ lớn các điểm dữ liệu
label: gán nhãn giá trị
leaflet(data) %>%
  addTiles() %>%
  addCircles(
    lng = ~`kinh độ`, 
    lat = ~`vĩ độ`,
    radius = ~ `biến numeric` * 700,
    label = ~paste(city, "/", `Số chi nhánh`),
    color = "blue")

2. Dataset mẫu có toạ độ địa lý

• Lat: Kinh độ
• Long: Vĩ độ
Thành phố lat long Số chi nhánh
Hà Nội 21.0285 105.8542 50
TP.HCM 10.7769 106.7009 120
Đà Nẵng 16.0544 108.2022 80
Cần Thơ 10.0452 105.7469 30
Huế 16.4637 107.5909 30

3. Vẽ biểu đồ

cf = leaflet(data) %>%
  addTiles() %>%
  addCircles(
    lng = ~long, lat = ~lat,
    radius = ~ `Số chi nhánh` * 700,
    label = ~paste0 (`Thành phố`, ", ", `Số chi nhánh`),
    color = "blue")

IV. Giới thiệu cách xuất file các biểu đồ

1. Package hỗ trợ tiếng việt

• Install package showtext

• Command showtext_auto()

2. Định dạng tĩnh

• Xuất file ggplot objects: dựa vào tên đuôi file .pdf, .png, .jpg,…

• Đơn vị width và height: inches
showtext_auto()

ggsave("data.pdf", 
       plot = gdp_tuoitho, 
       width = 10, height = 10)

2. Định dạng động (HTML)

• Package htmlwidgets - command saveWidget()

• Có thể save ggplotly object và leaflet object

saveWidget(cf, "cf.html", 
           selfcontained = TRUE)

saveWidget(int_gdp_tuoitho, "scatter.html", 
           selfcontained = TRUE)

File lý thuyết sẽ được access đến hết khoá học