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
Đầu tiên ta cần khởi tạo khung cho biểu đồ
#vẽ biểu đồ đường
ggplot(df1, aes(x = YEAR, y = number_fish))
# giải thích hàm này thì bạn có thể xem lại ở video vẽ biểu đồ cột nháTiếp đó ta thêm layer là đường vô bằng hàm geom_line()
#vẽ biểu đồ đường
ggplot(df1, aes(x = YEAR, y = number_fish)) +
geom_line(color = "red",)
geom_line(color = "red"): geom_line là hàm
để thêm các đường vào biểu đồ.
Tham số color = "red" đặt màu của đường là màu đỏ. Bạn
thích đặt màu nào tùy í bạn nhá !
Ok rồi, giờ thì thêm các tiêu đề và nhãn trục cho đẹp mắt hơn thôi. Ta sẽ sử dụng hàm labs()
#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.
title = "Số lượng cá theo năm": Đặt tiêu đề của biểu
đồ là “Số lượng cá theo năm”.
x = "Năm": Đặt nhãn cho trục x là “Năm”.
y = "Số lượng cá": Đặt nhãn cho trục y là “Số lượng
cá”.
Cuối cùng là làm tối giản biểu đồ bằng hàm theme_*()
#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 )") +
theme_classic(base_size = 15,# kích thước cho nhãn và tiêu đề
base_family = "" # base_family dùng để chỉnh font chữ
)
base_size = 11:
base_size thiết lập kích thước cơ bản cho văn bản (như
nhãn và tiêu đề) trong biểu đồ. Mặc định là 11, tức là kích thước phông
chữ sẽ là 11 đơn vị. Ở đây mình dùng 15base_family = ““:
base_family xác định phông chữ cơ bản được sử dụng
trong biểu đồ. Ở đây, nó được đặt là một chuỗi trống, nghĩa là sẽ sử
dụng phông chữ mặc định của hệ thống.Ở đâ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á
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 đồ
Đầu tiên ta sẽ khởi tạo biểu đồ bằng lệnh :
ggplot(df, aes(x = nhom_tuoi,y = TNTB))
ggplot(df, aes(x = nhom_tuoi, y = TNTB)): Đây là
bước khởi tạo biểu đồ sử dụng hàm ggplot từ gói
ggplot2.
df: Đây là tên của khung dữ liệu (data frame) chứa
dữ liệu mà bạn muốn vẽ biểu đồ.
aes(x = nhom_tuoi, y = TNTB): aes là
viết tắt của aesthetics. Ở đây, bạn đang ánh xạ biến
nhom_tuoi vào trục x và biến TNTB vào trục
y.
Tiếp đó, ta sẽ thêm các cột vào biểu đồ bằng hàm geom_bar().
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ị
geom_bar(stat = "identity"): geom_bar
là hàm để thêm các cột vào biểu đồ. Tham số
stat = "identity" chỉ định rằng chiều cao của mỗi cột được
xác định trực tiếp từ dữ liệu, thay vì tính toán số lượng hoặc tần
suất.
fill = "yellow": Đặt màu nền của các cột là màu
vàng. Các bạn có thể đặt màu tùy sở thích nhé !
color = "red": Đặt màu viền của các cột là màu
đỏ.
Chúng ta để ý các trục của biểu đồ là tên của các biến, chưa được đẹp và chưa có đơn vị. Do đó ta sẽ thêm tiêu đề và nhãn cho các trục bằng hàm labs()
# 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 )"
)
labs dùng để đặt tiêu đề và nhãn cho các trục của
biểu đồ.
title = "Thu nhập trung bình theo nhóm tuổi": Đặt
tiêu đề của biểu đồ là “Thu nhập trung bình theo nhóm tuổi”.
x = "nhóm tuổi": Đặt nhãn cho trục x là “nhóm
tuổi”.
y = "thu nhập (triệu đồng )": Đặt nhãn cho trục y là
“thu nhập (triệu đồng)”.
Cuối cùng ta sẽ chỉnh lại theme của biểu đồ cho đẹp và đơn giản hơn bằng hàm theme_minimal()
# 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 )"
) +
theme_minimal()
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))
ggplot(df, aes(...)): Khởi tạo đối tượng ggplot với
dữ liệu từ dataframe df. Hàm aes (aesthetics)
được dùng để thiết lập các biến thẩm mỹ.
x = "": Trục x được thiết lập là chuỗi rỗng vì biểu
đồ tròn không cần trục x thực sự. Điều này giúp tạo ra các thanh bar có
cùng một vị trí trung tâm khi chuyển sang dạng biểu đồ tròn.
y = so_luong: Trục y đại diện cho số lượng của các
loại sản phẩm.
fill = loai_san_pham: Màu sắc của các phần trong
biểu đồ được phân biệt dựa trên biến
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"):
geom_bar(...): Sử dụng geom_bar để tạo
các cột trong biểu đồ. Mỗi cột sẽ tương ứng với một loại sản
phẩm.
width = 1: Đặt độ rộng của mỗi cột là 1, giúp các
cột chiếm toàn bộ vòng tròn khi chuyển sang dạng biểu đồ tròn.
stat = "identity": Sử dụng giá trị thực tế từ dữ
liệu (so_luong) thay vì đếm tần suất.
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"):
coord_polar("y"): Chuyển đổi hệ tọa độ từ hệ tọa độ
Cartesian sang hệ tọa độ cực để tạo ra biểu đồ tròn. Trục y sẽ được sử
dụng để xác định độ dài của mỗi phần trong biểu đồ tròn.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"):
geom_text(...): Thêm các nhãn văn bản vào biểu
đồ.
aes(label = paste0(percent, "%")): Thiết lập nhãn
văn bản là tỷ lệ phần trăm của từng loại sản phẩm.
paste0(percent, "%") nối giá trị phần trăm với ký hiệu phần
trăm (%).
position = position_stack(vjust = 0.5): Đặt vị trí
của các nhãn văn bản ở giữa (giá trị 0.5) của các phần
trong biểu đồ tròn.
size = 5: Đặt kích thước chữ của nhãn văn bản là
5.
color = "white": Đặt màu của nhãn văn bản là màu
trắng để dễ đọc trên nền màu của các phần biểu đồ.
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)):
ggplot(diamonds, aes(...)): Khởi tạo đối tượng
ggplot với dữ liệu từ dataframe diamonds. Hàm
aes (aesthetics) được dùng để thiết lập các biến thẩm
mỹ.
x = price: Trục x của biểu đồ được thiết lập là biến
price trong dữ liệu diamonds. Đây là biến đại
diện cho giá của các viên kim cương.
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"):
geom_histogram(...): Sử dụng
geom_histogram để vẽ biểu đồ histogram.
binwidth = 0.5: Đặt độ rộng của mỗi bin (khoảng giá
trị) là 0.5. Điều này xác định độ chi tiết của các thanh trong biểu đồ
histogram.
fill = "lightblue": Màu nền của các thanh trong biểu
đồ được thiết lập là màu xanh nhạt (lightblue). Các bạn có
thể thiết lập màu nào tùy sở thích nhé
color = "black": Màu viền của các thanh trong biểu
đồ được thiết lập là màu đen (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
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)):
ggplot(diamonds, ...): Khởi tạo một đối tượng ggplot
với bộ dữ liệu diamonds.
aes(y = price): Thiết lập “aesthetic mapping” cho
trục y là cột price từ bộ dữ liệu. Điều này nghĩa là giá
trị của price sẽ được biểu diễn trên trục y.
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") +:
geom_boxplot(...): Thêm một lớp biểu đồ hộp vào
ggplot.
fill = "lightblue": Đặt màu nền của các hộp là màu
xanh nhạt. Các bạn có thể chỉnh màu tùy sở thích nhá
color = "black": Đặt màu viền của các hộp là màu
đen.
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 đồ.
title = "Boxplot biến price": Đặt tiêu đề của biểu
đồ là “Boxplot biến price”.
y = "Giá trị": Đặt nhãn cho trục y là “Giá
trị”.
theme_minimal():
theme_minimal(): Sử dụng chủ đề tối giản cho biểu đồ,
giúp biểu đồ trông sạch sẽ và dễ nhìn hơn.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
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)):
ggplot(diamonds, aes(...)): Hàm
ggplot được sử dụng để khởi tạo một biểu đồ ggplot.
diamonds là bộ dữ liệu được sử dụng.
aes(x = depth, y = table): Hàm
aes (aesthetic mappings) chỉ định các biến số được sử dụng
cho trục x (depth) và trục y (table). Điều này
có nghĩa là giá trị depth sẽ được đặt trên trục x và giá
trị table sẽ được đặt trên trục y.
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):
geom_point: Hàm
geom_point được sử dụng để vẽ các điểm trên biểu đồ scatter
plot.
color = "blue": Tùy chọn này đặt
màu của các điểm là màu xanh dương. Các bạn chọn màu tùy sở thích
nhé
size = 3: Tùy chọn này đặt kích
thước của các điểm là 3 (kích thước tương đối).
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"):
labs: Hàm labs được sử
dụng để thêm các nhãn (labels) cho biểu đồ.
title = "Scatter Plot": Tùy chọn
này đặt tiêu đề của biểu đồ là “Scatter Plot”.
x = "depth": Tùy chọn này đặt nhãn
cho trục x là “depth”.
y = "table": Tùy chọn này đặt nhãn
cho trục y là “table”.
theme_minimal():
theme_minimal: Hàm
theme_minimal được sử dụng để áp dụng một giao diện tối
giản (minimal theme) cho biểu đồ, giúp biểu đồ trông đơn giản và dễ đọc
hơn.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 )