2. Đường

Trước hết ta sẽ tự tạo ra 1 bộ data đơn giản gồm 2 biến : Year và số lượng cá bắt được

-> Mục đích : tạo biểu đồ đường biểu diễn sự thay đổi trong số lượng cá bắt được theo từng năm

# Tạo 2 biến
YEAR <- c("2018-1-1","2019-1-1","2020-1-1","2021-1-1","2022-1-1","2023-1-1")
number_fish <- c(12,14,9,2,4,16) # đơn vị là triệu tấn

Ta để ý biến YEAR đang không ở định dạng Date

class(YEAR) # class là hàm cho biến kiểu biến 
## [1] "character"

Do đó ta sẽ đổi type của YEAR sang dạng Date bằng hàm as.Date()

# đổi YEAR sang dạng "date"
YEAR <- as.Date(YEAR)

class(YEAR) 
## [1] "Date"
# biến YEAR đã chuyển sang kiểu Date

Từ 2 biến trên ta sẽ tạo 1 dataframe chứa nó

# Tạo dataframe từ hai vector trên
df1 <- data.frame(
  YEAR = YEAR,
  number_fish = number_fish
)

#xem dataframe mới tạo
df1
##         YEAR number_fish
## 1 2018-01-01          12
## 2 2019-01-01          14
## 3 2020-01-01           9
## 4 2021-01-01           2
## 5 2022-01-01           4
## 6 2023-01-01          16

Vậy là ta đã tạo xong bộ data đơn giản, giờ thì vẽ thôi !

Bước 1 : Gọi thư viện ggplot2

#install.packages("ggplot2") # nếu đã tải thì không cần dòng này
library(ggplot2)

Bước 2 : vẽ biểu đồ bằng ggplot2

#vẽ biểu đồ đường
ggplot(df1, aes(x = YEAR, y = number_fish)) + 
geom_line(color = "red") +
labs(title = "số lượng cá bắt được theo năm", 
     x = "Year",
     y = "số lượng cá ( nghìn tấn )"
     ) 

labs(title = “Số lượng cá theo năm”, x = “Năm”, y = “Số lượng cá”): Thêm tiêu đề và nhãn cho các trục.

Ở đây mình dùng theme_classtic, các bạn có thể dùng theme_minimal, theme_void… tùy sở thích nhá

1. Cột

Trước hết ta sẽ tự tạo ra 1 bộ data đơn giản gồm 2 biến : nhóm tuổi và thu nhập trung bình

-> Mục đích : tạo biểu đồ cột để so sánh thu nhập trung bình giữa các nhóm tuổi khác nhau

# Tạo 2 biến
nhom_tuoi<- c("Thanh niên", "Trung niên", "Cao niên")
TNTB <- c(9,16,27) # đơn vị triệu đồng

Cần tạo một Dataframe chứa 2 biến này

# Tạo dataframe từ hai vector trên
df <- data.frame(
  nhom_tuoi = nhom_tuoi,
  TNTB = TNTB
)

df # xem dataframe mới tạo
##    nhom_tuoi TNTB
## 1 Thanh niên    9
## 2 Trung niên   16
## 3   Cao niên   27

Vậy là bước tạo bộ data đã hoàn thành, giờ chúng ta sẽ đi vẽ biểu đồ bằng thư viện ggplot2

Bước 1 : cài đặt và mở thư viện

# Cài đặt thư viện ggplot 2
install.packages("ggplot2") # nếu đã tải thì không cần dòng này nữa nhá
## Warning: package 'ggplot2' is in use and will not be installed
library(ggplot2) # gọi thư viện ra

Bước 2 : Sử dụng hàm ggplot để vẽ biểu đồ

ggplot(df, aes(x = nhom_tuoi,y = TNTB)) +
  geom_bar(stat = "identity", 
           fill = "yellow", 
           color = "red"
           ) 

#dấu cộng nghĩa là thêm lớp hình cho đồ thị
# Vẽ biểu đồ cột với ggplot2
ggplot(df, aes(x = nhom_tuoi,y = TNTB)) +
  geom_bar(stat = "identity", 
           fill = "yellow", 
           color = "red"
           ) +
  labs(title = "Thu nhập trung bình theo nhóm tuổi",
       x = "nhóm tuổi",
       y = "thu nhập (triệu đồng )"
       ) 

3. Tròn

Trước hết ta sẽ tạo một data gồm 2 biến là loại sản phẩm và số lượng của từng loại

# Tạo 2 biến
loai_san_pham <- c("A", "B", "C", "D")
so_luong <- c(20, 30, 15, 35) # tổng số lượng bằng 100
#chuyển 2 biến thành một data frame
df <- data.frame(loai_san_pham, so_luong)

Dữ liệu đã chuẩn bị xong, bắt đầu vẽ Pie chart thôi nào !

# gọi thư viện ggplot2
library(ggplot2)

Đầu tiên, ta sẽ khởi tạo biểu đồ bằng lệnh :

# Vẽ biểu đồ tròn với ggplot2
ggplot(df, aes(x = "", y = so_luong, fill = loai_san_pham))

Tiếp đến, ta sẽ tạo các bar trong biểu đồ

# Vẽ biểu đồ tròn với ggplot2
ggplot(df, aes(x = "", y = so_luong, fill = loai_san_pham)) +
  geom_bar(width = 1, stat = "identity")

geom_bar(width = 1, stat = "identity"):

Tại sao lại tạo ra các Bar mà không phải là geom_pie ? Bước tiếp theo sẽ giải thích điều đó

ggplot(df, aes(x = "", y = so_luong, fill = loai_san_pham)) +
  geom_bar(width = 1, stat = "identity") +
  coord_polar("y")

coord_polar("y"):

Biểu đồ xong kha khá rồi, giờ ta thêm tiêu đề và chỉnh lại nền là ok

# Vẽ biểu đồ tròn với ggplot2
ggplot(df, aes(x = "", y = so_luong, fill = loai_san_pham)) +
  geom_bar(width = 1, stat = "identity") +
  coord_polar("y") +
  labs(title = " Cơ cấu loại sản phẩm ", fill = "loại sản phẩm") +
  theme_void()

Cơ mà… biểu đồ hiện tại khá khó để xem nhóm nào chiếm một lượng như nào. Nên ta sẽ thêm tỷ lệ % của từng nhóm lên biểu đồ nhé

Ta cần tạo một biến tỷ lệ %

# nếu muốn hiện số phần trăm từng loại lên biểu đồ thì cần tạo biến tỷ lệ %
df$percent <- round(100 * df$so_luong  / sum(df$so_luong ), 1)

Biến percent này chứa tỷ lệ phần trăm của từng loại sản phẩm, được tính bằng cách chia số lượng sản phẩm (so_luong) cho tổng số lượng sản phẩm, nhân với 100 để chuyển đổi sang phần trăm và làm tròn đến 1 chữ số thập phân.

Giờ ta sẽ thêm 1 lớp nữa lên trên biểu đồ

# Vẽ biểu đồ tròn với ggplot2
ggplot(df, aes(x = "", y = so_luong, fill = loai_san_pham)) +
  geom_bar(width = 1, stat = "identity") +
  coord_polar("y") +
  labs(title = "Cơ cấu loại sản phẩm ", fill = "loại sản phẩm") +
  theme_void() +
    geom_text(aes(label = paste0(percent, "%")), position = position_stack(vjust = 0.5), size = 5, color = "white") # thêm dòng này

geom_text(aes(label = paste0(percent, "%")), position = position_stack(vjust = 0.5), size = 5, color = "white"):

4.Histogram

Bữa trước ta đã vẽ các biểu đồ bằng data tự tạo. Lần này ta sẽ sử dụng một data có sẵn trong R, đó là “diamonds” - bộ dữ liệu chứa các thông tin về kim cương.

diamonds # bộ dữ liệu chứa các thông tin về kim cương
## # A tibble: 53,940 × 10
##    carat cut       color clarity depth table price     x     y     z
##    <dbl> <ord>     <ord> <ord>   <dbl> <dbl> <int> <dbl> <dbl> <dbl>
##  1  0.23 Ideal     E     SI2      61.5    55   326  3.95  3.98  2.43
##  2  0.21 Premium   E     SI1      59.8    61   326  3.89  3.84  2.31
##  3  0.23 Good      E     VS1      56.9    65   327  4.05  4.07  2.31
##  4  0.29 Premium   I     VS2      62.4    58   334  4.2   4.23  2.63
##  5  0.31 Good      J     SI2      63.3    58   335  4.34  4.35  2.75
##  6  0.24 Very Good J     VVS2     62.8    57   336  3.94  3.96  2.48
##  7  0.24 Very Good I     VVS1     62.3    57   336  3.95  3.98  2.47
##  8  0.26 Very Good H     SI1      61.9    55   337  4.07  4.11  2.53
##  9  0.22 Fair      E     VS2      65.1    61   337  3.87  3.78  2.49
## 10  0.23 Very Good H     VS1      59.4    61   338  4     4.05  2.39
## # ℹ 53,930 more rows

Ở đây SciEco sẽ vẽ histogram của Price kim cương

Đầu tiên, ta sẽ khởi tạo biểu đồ bằng lệnh :

ggplot(diamonds, aes(x =price))

ggplot(diamonds, aes(x = price)):

Tiếp đó, ta sẽ thêm lớp histogram lên biểu đồ bằng lệnh geom_histogram

ggplot(diamonds, aes(x =price)) +
  geom_histogram(binwidth = 0.5, fill = "lightblue", color = "black")

geom_histogram(binwidth = 0.5, fill = "lightblue", color = "black"):

Cuối cùng là thêm tiêu đề và chỉnh nền là xong rồi

#Vẽ histogram
ggplot(diamonds, aes(x =price)) +
  geom_histogram(binwidth = 0.5, fill = "lightblue", color = "black") +
  labs(title = "Biểu đồ Histogram", x = "Giá", y = "Tần số") +
  theme_minimal()

Quan sát biểu đồ ta thấy rằng phân phối của giá kim cương lệch phải

5. Boxplot

Ta tiếp tục sử dụng bộ dữ liệu diamonds để vẽ boxplot

diamonds
## # A tibble: 53,940 × 10
##    carat cut       color clarity depth table price     x     y     z
##    <dbl> <ord>     <ord> <ord>   <dbl> <dbl> <int> <dbl> <dbl> <dbl>
##  1  0.23 Ideal     E     SI2      61.5    55   326  3.95  3.98  2.43
##  2  0.21 Premium   E     SI1      59.8    61   326  3.89  3.84  2.31
##  3  0.23 Good      E     VS1      56.9    65   327  4.05  4.07  2.31
##  4  0.29 Premium   I     VS2      62.4    58   334  4.2   4.23  2.63
##  5  0.31 Good      J     SI2      63.3    58   335  4.34  4.35  2.75
##  6  0.24 Very Good J     VVS2     62.8    57   336  3.94  3.96  2.48
##  7  0.24 Very Good I     VVS1     62.3    57   336  3.95  3.98  2.47
##  8  0.26 Very Good H     SI1      61.9    55   337  4.07  4.11  2.53
##  9  0.22 Fair      E     VS2      65.1    61   337  3.87  3.78  2.49
## 10  0.23 Very Good H     VS1      59.4    61   338  4     4.05  2.39
## # ℹ 53,930 more rows

Lựa chọn biến Price để vẽ

# gọi thư viện ggplot2
library(ggplot2)

Đầu tiên ta sẽ khởi tạo biểu đồ bằng lệnh ggplot

ggplot(diamonds, aes(y = price))

ggplot(diamonds, aes(y = price)):

Tiếp đó, sử dụng geom_boxplot để vẽ boxplot

ggplot(diamonds, aes(y = price)) +
  geom_boxplot(fill = "lightblue", color = "black")

geom_boxplot(fill = "lightblue", color = "black") +:

Thêm tiêu đề và nền cho biểu đồ

ggplot(diamonds, aes(y = price)) +
  geom_boxplot(fill = "lightblue", color = "black") +
  labs(title = "Boxplot biến price", y = "Giá trị") +
  theme_minimal()

labs(...): Thiết lập các nhãn cho biểu đồ.

Nhìn biểu đồ ta có thể thấy rằng phân phối của biến price lệnh phải, quan trọng hơn là có khá nhiều giá trị outliers

6 Scatter plot

Tiếp tục sử dụng bộ dữ liệu Diamonds để vẽ

diamonds
## # A tibble: 53,940 × 10
##    carat cut       color clarity depth table price     x     y     z
##    <dbl> <ord>     <ord> <ord>   <dbl> <dbl> <int> <dbl> <dbl> <dbl>
##  1  0.23 Ideal     E     SI2      61.5    55   326  3.95  3.98  2.43
##  2  0.21 Premium   E     SI1      59.8    61   326  3.89  3.84  2.31
##  3  0.23 Good      E     VS1      56.9    65   327  4.05  4.07  2.31
##  4  0.29 Premium   I     VS2      62.4    58   334  4.2   4.23  2.63
##  5  0.31 Good      J     SI2      63.3    58   335  4.34  4.35  2.75
##  6  0.24 Very Good J     VVS2     62.8    57   336  3.94  3.96  2.48
##  7  0.24 Very Good I     VVS1     62.3    57   336  3.95  3.98  2.47
##  8  0.26 Very Good H     SI1      61.9    55   337  4.07  4.11  2.53
##  9  0.22 Fair      E     VS2      65.1    61   337  3.87  3.78  2.49
## 10  0.23 Very Good H     VS1      59.4    61   338  4     4.05  2.39
## # ℹ 53,930 more rows

Ta sử dụng 2 biến “depth” và “table” để vẽ

# gọi thư viện ggplot2
library(ggplot2)

Đầu tiên khởi tạo biểu đồ

# Vẽ scatter plot với ggplot2
ggplot(diamonds, aes(x = depth, y = table))

ggplot(diamonds, aes(x = depth, y = table)):

Tiếp đó, dùng geom_point để thêm lớp scatter plot

# Vẽ scatter plot với ggplot2
ggplot(diamonds, aes(x = depth, y = table)) +
  geom_point(color = "blue", size = 3)

geom_point(color = "blue", size = 3):

Thêm tiêu đề và nền là xong rồi

# Vẽ scatter plot với ggplot2
ggplot(diamonds, aes(x = depth, y = table)) +
  geom_point(color = "blue", size = 3) +
labs(title = "Scatter Plot", x = "depth", y = "table") +
  theme_minimal()

labs(title = "Scatter Plot", x = "depth", y = "table"):

theme_minimal():

Ngoài ra, nếu bạn muốn thêm 1 đường ( hồi quy ) để thể hiện xu hướng của dữ liệu, bạn có thể thêm đường hồi quy bằng lệnh geom_smooth

# Vẽ scatter plot với ggplot2
ggplot(diamonds, aes(x = depth, y = table)) +
  geom_point(color = "blue", size = 3) +
labs(title = "Scatter Plot", x = "depth", y = "table") +
  theme_minimal() +
geom_smooth() # thêm đường hồi quy
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'

geom_smooth(): Hàm geom_smooth được sử dụng để thêm một đường hồi quy (regression line) vào biểu đồ.

Có thể thấy rằng dữ liệu không có một mối tương quan rõ ràng cụ thể nào ( đường hồi quy phi tuyến )