3  Tình huống Base R Graphics thường gặp

3.1 Import dataset

Show the code
library(tuhocr)
crop_production <- system.file("extdata",
                               "crop_production_all_data.rds",
                               package = "tuhocr")

df_1 <- readRDS(crop_production)

FAOSTAT_data_2023 <- system.file("extdata",
                                 "FAOSTAT_data_3-21-2023.csv", 
                                 package = "tuhocr")

df_2 <- read.csv(FAOSTAT_data_2023)

coffee_all <- tuhocr::extract_faostat(input_rds = df_1,
                                     input_region = df_2,
                                     input_item = "Coffee, green")

coffee_all |> subset(area == "Viet Nam") -> coffee_vn

coffee_vn |> subset(year >= 2010) -> coffee_vn_2010_2021

coffee_vn_2010_2021$production <- coffee_vn_2010_2021$production / 1000000

coffee_vn_2010_2021$area_harvested <- coffee_vn_2010_2021$area_harvested / 1000000

coffee_vn_2010_2021
        area          item year production area_harvested yield
178 Viet Nam Coffee, green 2021   1.845033       0.653192  2.82
179 Viet Nam Coffee, green 2020   1.763476       0.637563  2.77
180 Viet Nam Coffee, green 2019   1.686765       0.624100  2.70
181 Viet Nam Coffee, green 2018   1.616307       0.618879  2.61
182 Viet Nam Coffee, green 2017   1.542398       0.605178  2.55
183 Viet Nam Coffee, green 2016   1.460800       0.597597  2.44
184 Viet Nam Coffee, green 2015   1.452999       0.593800  2.45
185 Viet Nam Coffee, green 2014   1.406469       0.589041  2.39
186 Viet Nam Coffee, green 2013   1.326688       0.581381  2.28
187 Viet Nam Coffee, green 2012   1.260463       0.572600  2.20
188 Viet Nam Coffee, green 2011   1.276506       0.543865  2.35
189 Viet Nam Coffee, green 2010   1.105700       0.511900  2.16

3.2 Vẽ đồ thị đường (linechart)

Thông số mặc định

Show the code
plot(production ~ year, 
     data = coffee_vn_2010_2021,
     las = 1,
     xaxs = "i",
     yaxs = "i",
     col = "#0000b3",
     xlim = c(2010, 2021),
     ylim = c(0, 2),
     pch = 19,
     type = "b",
     xlab = "Năm",
     ylab = "Sản lượng (triệu tấn)",
     main = "Tình hình sản xuất cà phê ở Việt Nam giai đoạn 2010–2021",
     sub = "Nguồn: FAOSTAT"
     )

text(x = 2011, 
     y = 0.5, 
     labels = "Bước 1: Vẽ đồ thị 1 đường dùng\nthông số mặc định", 
     cex = 1.5,
     col = "#ff007b", 
     font = 2,
     pos = 4)

Tăng số lượng tick label

https://www.sthda.com/english/wiki/add-custom-tick-mark-labels-to-a-plot-in-r-software

Show the code
plot(production ~ year, 
     data = coffee_vn_2010_2021,
     las = 1,
     xaxs = "i",
     yaxs = "i",
     col = "#0000b3",
     xlim = c(2010, 2021),
     ylim = c(0, 2),
     pch = 19,
     type = "b",
     xlab = "Năm",
     ylab = "Sản lượng (triệu tấn)",
     main = "Tình hình sản xuất cà phê ở Việt Nam giai đoạn 2010–2021",
     sub = "Nguồn: FAOSTAT",
     xaxt = "n" # remove thông tin trục x
     # yaxt="n"
     )

# Changing x axis

xtick <- seq(from = 2010, to = 2021, by = 1) # x tick label
axis(side = 1, at = xtick, labels = TRUE) # vẽ trục x (side = 1)

text(x = 2011, 
     y = 0.5, 
     labels = "Bước 2: Tăng số lượng tick label trên trục X", 
     cex = 1.5,
     col = "#ff007b", 
     font = 2,
     pos = 4)

Xoay tick label

Show the code
plot(production ~ year, 
     data = coffee_vn_2010_2021,
     las = 1,
     xaxs = "i",
     yaxs = "i",
     col = "#0000b3",
     xlim = c(2010, 2021),
     ylim = c(0, 2),
     pch = 19,
     type = "b",
     xlab = "Năm",
     ylab = "Sản lượng (triệu tấn)",
     main = "Tình hình sản xuất cà phê ở Việt Nam giai đoạn 2010–2021",
     sub = "Nguồn: FAOSTAT",
     xaxt = "n" # remove thông tin trục x
     # yaxt="n"
     )

# Changing x axis

xtick <- seq(from = 2010, to = 2021, by = 1) # x tick label

axis(side = 1, at = xtick, labels = FALSE) # ẩn giá trị x tick label mặc định

text(x = xtick,  
     y = par("usr")[3], 
     labels = xtick, 
     srt = 45, 
     # pos = 1, 
     # adj = c(0.5, 3),
     adj = c(1.5, 2),
     xpd = TRUE)

Vẽ 2 đường linechart

Show the code
coffee_all |> subset(area == "Indonesia") -> coffee_indo

coffee_indo |> subset(year >= 2010) -> coffee_indo_2010_2021

coffee_indo_2010_2021$production <- coffee_indo_2010_2021$production / 1000000

coffee_indo_2010_2021$area_harvested <- coffee_indo_2010_2021$area_harvested / 1000000

coffee_indo_2010_2021
         area          item year production area_harvested yield
239 Indonesia Coffee, green 2021   0.765415       1.249615  0.61
240 Indonesia Coffee, green 2020   0.762380       1.250452  0.61
241 Indonesia Coffee, green 2019   0.752512       1.245359  0.60
242 Indonesia Coffee, green 2018   0.756051       1.252826  0.60
243 Indonesia Coffee, green 2017   0.717962       1.238598  0.58
244 Indonesia Coffee, green 2016   0.639305       1.228512  0.52
245 Indonesia Coffee, green 2015   0.639412       1.230001  0.52
246 Indonesia Coffee, green 2014   0.643900       1.230500  0.52
247 Indonesia Coffee, green 2013   0.675800       1.241700  0.54
248 Indonesia Coffee, green 2012   0.691163       1.233900  0.56
249 Indonesia Coffee, green 2011   0.638600       1.293000  0.49
250 Indonesia Coffee, green 2010   0.684076       1.268476  0.54
Show the code
coffee_vn_2010_2021
        area          item year production area_harvested yield
178 Viet Nam Coffee, green 2021   1.845033       0.653192  2.82
179 Viet Nam Coffee, green 2020   1.763476       0.637563  2.77
180 Viet Nam Coffee, green 2019   1.686765       0.624100  2.70
181 Viet Nam Coffee, green 2018   1.616307       0.618879  2.61
182 Viet Nam Coffee, green 2017   1.542398       0.605178  2.55
183 Viet Nam Coffee, green 2016   1.460800       0.597597  2.44
184 Viet Nam Coffee, green 2015   1.452999       0.593800  2.45
185 Viet Nam Coffee, green 2014   1.406469       0.589041  2.39
186 Viet Nam Coffee, green 2013   1.326688       0.581381  2.28
187 Viet Nam Coffee, green 2012   1.260463       0.572600  2.20
188 Viet Nam Coffee, green 2011   1.276506       0.543865  2.35
189 Viet Nam Coffee, green 2010   1.105700       0.511900  2.16
Show the code
## dataset coffee_vn_2010_2021
plot(production ~ year, 
     data = coffee_vn_2010_2021,
     las = 1,
     xaxs = "i",
     yaxs = "i",
     col = "#0000b3",
     xlim = c(2010, 2021),
     ylim = c(0, 2),
     pch = 19,
     type = "b",
     xlab = "Năm",
     ylab = "Sản lượng (triệu tấn)",
     main = "Tình hình sản xuất cà phê ở Việt Nam và Indonesia giai đoạn 2010–2021",
     sub = "Nguồn: FAOSTAT",
     xaxt = "n" # remove thông tin trục x
     # yaxt="n"
     )

## dataset coffee_indo_2010_2021
points(production ~ year, 
     data = coffee_indo_2010_2021,
     col = "red",
     pch = 17,
     type = "b"
     )

# Changing x axis

xtick <- seq(from = 2010, to = 2021, by = 1) # x tick label
axis(side = 1, at = xtick, labels = TRUE) # vẽ trục x (side = 1)

# legend

legend(x = "topleft", 
       y = NULL,  
       legend = c("Việt Nam", "Indonesia"),
       col = c("#0000b3", "red"),
       lty = c(1, 1), 
       cex = 1,
       pch = c(19, 17),
       lwd = 2,
       x.intersp = 1,
       y.intersp = 1.5,
       inset = 0.02, # chỉ có tác dụng khi x là keyword
       box.lty = 1,
       horiz = FALSE
       )

text(x = 2011, 
     y = 1, 
     labels = "Bước 3: Chèn thêm đường thứ 2 và legend", 
     cex = 1.5,
     col = "#ff007b", 
     font = 2,
     pos = 4)

Thay đổi vị trí legend

Cách 1: Lấy tọa độ từ legend có sẵn

Show the code
plot(production ~ year, 
     data = coffee_vn_2010_2021,
     las = 1,
     xaxs = "i",
     yaxs = "i",
     col = "#0000b3",
     xlim = c(2010, 2021),
     ylim = c(0, 2),
     pch = 19,
     type = "b",
     xlab = "Năm",
     ylab = "Sản lượng (triệu tấn)",
     # main = "Tình hình sản xuất cà phê ở Việt Nam và Indonesia giai đoạn 2010–2021",
     sub = "Nguồn: FAOSTAT",
     xaxt = "n" # remove thông tin trục x
     # yaxt="n"
     )

## dataset coffee_indo_2010_2021
points(production ~ year, 
     data = coffee_indo_2010_2021,
     col = "red",
     pch = 17,
     type = "b"
     )

# Changing x axis

xtick <- seq(from = 2010, to = 2021, by = 1) # x tick label
axis(side = 1, at = xtick, labels = TRUE) # vẽ trục x (side = 1)

# Thay đổi vị trí title

title(main = "Tình hình sản xuất cà phê ở Việt Nam và Indonesia giai đoạn 2010–2021",
      line = 3)

# legend

#############
# lấy tọa độ

leg <- legend(x = "top",
              y = NULL,
              legend = c("Việt Nam", "Indonesia"),
              col = c("#0000b3", "red"),
              lty = c(1, 1),
              cex = 1,
              pch = c(19, 17),
              lwd = 2,
              # x.intersp = 2,
              # y.intersp = 2,
              # inset = 0.02,
              box.lty = 1,
              horiz = TRUE,
              xpd = TRUE,
              plot = FALSE
)
#############

legend(x = leg$rect$left, 
       y = 2.25,  
       legend = c("Việt Nam", "Indonesia"),
       col = c("#0000b3", "red"),
       lty = c(1, 1), 
       cex = 1,
       pch = c(19, 17),
       lwd = 2,
       x.intersp = 1,
       y.intersp = 1,
       box.lty = 0,
       horiz = TRUE,
       xpd = TRUE
       )

abline(v = (2021 + 2010) / 2, col = "purple", lty = 2, xpd = TRUE)

Cách 2: Dùng tham số xjustyjust trong lệnh legend()

Show the code
plot(production ~ year, 
     data = coffee_vn_2010_2021,
     las = 1,
     xaxs = "i",
     yaxs = "i",
     col = "#0000b3",
     xlim = c(2009, 2022),
     ylim = c(0, 2),
     pch = 19,
     type = "b",
     xlab = "Năm",
     ylab = "Sản lượng (triệu tấn)",
     # main = "Tình hình sản xuất cà phê ở Việt Nam và Indonesia giai đoạn 2010–2021",
     sub = "Nguồn: FAOSTAT",
     xaxt = "n" # remove thông tin trục x
     # yaxt="n"
     )

## dataset coffee_indo_2010_2021
points(production ~ year, 
     data = coffee_indo_2010_2021,
     col = "red",
     pch = 17,
     type = "b"
     )

# Changing x axis

xtick <- seq(from = 2009, to = 2022, by = 1) # x tick label
xtick[1] <- ""
xtick[14] <- ""

axis(side = 1, at = xtick, labels = TRUE) # vẽ trục x (side = 1)

# Thay đổi vị trí title

title(main = "Tình hình sản xuất cà phê ở Việt Nam và Indonesia giai đoạn 2010–2021",
      line = 3)

# legend

legend(x = (2022 + 2009) / 2, 
       y = 2.05,  
       legend = c("Việt Nam", "Indonesia"),
       col = c("#0000b3", "red"),
       lty = c(1, 1), 
       cex = 1,
       pt.cex = 1, # cex của point
       pch = c(19, 17),
       lwd = 2,
       x.intersp = 2,
       # y.intersp = 1,
       xjust = 0.5,
       yjust = 0,
       box.lty = 0,
       horiz = TRUE,
       xpd = TRUE,
       adj = c(0.4, 0.5), # chỉnh text legend
       merge = TRUE # gộp pch và line
       )

text(x = 2011, 
     y = 1, 
     labels = "Bước 4: Chỉnh lại legend và trục X\ngiúp đồ thị rõ ràng hơn", 
     cex = 1.5,
     col = "#ff007b", 
     font = 2,
     pos = 4)

Show the code
# abline(v = (2022 + 2009) / 2, col = "purple", lty = 2, xpd = TRUE)
Show the code
par(mar = c(6, 5, 5, 2))

plot(production ~ year, 
     data = coffee_vn_2010_2021,
     las = 1,
     xaxs = "i",
     yaxs = "i",
     col = "#0000b3",
     xlim = c(2009, 2022),
     ylim = c(0, 2),
     pch = 19,
     type = "b",
     xlab = "Năm",
     ylab = "Sản lượng (triệu tấn)",
     # main = "Tình hình sản xuất cà phê ở Việt Nam và Indonesia giai đoạn 2010–2021",
     sub = "Nguồn: FAOSTAT",
     xaxt = "n" # remove thông tin trục x
     # yaxt="n"
     )

## dataset coffee_indo_2010_2021
points(production ~ year, 
     data = coffee_indo_2010_2021,
     col = "red",
     pch = 17,
     type = "b"
     )

# Changing x axis

xtick <- seq(from = 2009, to = 2022, by = 1) # x tick label
xtick[1] <- ""
xtick[14] <- ""

axis(side = 1, at = xtick, labels = FALSE) # vẽ trục x (side = 1)

text(x = xtick,  
     y = par("usr")[3], 
     labels = xtick, 
     srt = 0, 
     # pos = 1,
     adj = c(0.5, 3),
     xpd = TRUE)

# Thay đổi vị trí title

title(main = "Tình hình sản xuất cà phê ở Việt Nam và Indonesia giai đoạn 2010–2021",
      line = 3)

# legend

legend(x = (2022 + 2009) / 2, 
       y = 2.05,  
       legend = c("Việt Nam", "Indonesia"),
       col = c("#0000b3", "red"),
       lty = c(1, 1), 
       cex = 1,
       pt.cex = 1, # cex của point
       pch = c(19, 17),
       lwd = 2,
       x.intersp = 2.5,
       # y.intersp = 1,
       xjust = 0.5,
       yjust = 0,
       box.lty = 0,
       horiz = TRUE,
       xpd = TRUE,
       adj = c(0.4, 0.5), # chỉnh text legend
       merge = TRUE # gộp pch và line
       )

text(x = 2011, 
     y = 1, 
     labels = "Bước 5: Đồ thị cơ bản hoàn thiện", 
     cex = 1.5,
     col = "#ff007b", 
     font = 2,
     pos = 4)

par(new = TRUE) # workaround for grid.raster

# plot(production ~ year,
#      data = coffee_vn_2010_2021,
#      type = "n",
#      xlab = "",
#      ylab = "",
#      xaxt = "n",
#      yaxt = "n")

box(which = "plot")
box(which = "figure")
box(which = "outer")

library(png)
library(grid)
logor <- readPNG("logor.png")
grid.raster(logor, x = 0.92, y = 0.08, width = 0.1)

Show the code
# https://www.jumpingrivers.com/blog/r-knitr-markdown-png-pdf-graphics/
# https://yihui.org/knitr/options/#plots

3.3 Customize thêm cho linechart

Show the code
par(mar = c(6, 5, 5, 2))

par(font.lab = 2)

windowsFonts(font_1 = windowsFont("Times New Roman"))

plot(production ~ year, 
     data = coffee_vn_2010_2021,
     family = "font_1",
     las = 1,
     xaxs = "i",
     yaxs = "i",
     col = "#0000b3",
     xlim = c(2009, 2022),
     ylim = c(0, 2),
     pch = 19,
     type = "b",
     xlab = "Năm",
     ylab = "Sản lượng (triệu tấn)",
     # main = "Tình hình sản xuất cà phê ở Việt Nam và Indonesia giai đoạn 2010–2021",
     sub = "Nguồn: FAOSTAT",
     xaxt = "n" # remove thông tin trục x
     # yaxt="n"
     )

## dataset coffee_indo_2010_2021
points(production ~ year, 
     data = coffee_indo_2010_2021,
     col = "red",
     pch = 17,
     type = "b"
     )

# Changing x axis

xtick <- seq(from = 2009, to = 2022, by = 1) # x tick label
xtick[1] <- ""
xtick[14] <- ""

axis(side = 1, at = xtick, labels = FALSE) # vẽ trục x (side = 1)

text(x = xtick,  
     y = par("usr")[3], 
     labels = xtick, 
     srt = 0, 
     # pos = 1,
     adj = c(0.5, 3),
     xpd = TRUE,
     family = "font_1")

# Thay đổi vị trí title

title(main = "Tình hình sản xuất cà phê ở Việt Nam và Indonesia giai đoạn 2010–2021",
      line = 3,
      family = "font_1")

# legend

par(family = "font_1")

legend(x = (2022 + 2009) / 2, 
       y = 2.05,  
       legend = c("Việt Nam", "Indonesia"),
       col = c("#0000b3", "red"),
       lty = c(1, 1), 
       cex = 1,
       pt.cex = 1, # cex của point
       pch = c(19, 17),
       lwd = 2,
       x.intersp = 2.5,
       # y.intersp = 1,
       xjust = 0.5,
       yjust = 0,
       box.lty = 0,
       horiz = TRUE,
       xpd = TRUE,
       adj = c(0.4, 0.5), # chỉnh text legend
       seg.len = 3,
       merge = TRUE # gộp pch và line
       )

text(x = 2011, 
     y = 1, 
     labels = "Bước 6: Set font Times New Roman", 
     cex = 1.5,
     col = "#ff007b", 
     font = 2,
     pos = 4,
     family = "font_1")

par(new = TRUE) # workaround for grid.raster

box(which = "plot")
box(which = "figure")
box(which = "outer")

library(png)
library(grid)
logor <- readPNG("logor.png")
grid.raster(logor, x = 0.92, y = 0.08, width = 0.1)

Show the code
par(mar = c(6, 5, 5, 2))

par(font.lab = 2)

windowsFonts(font_1 = windowsFont("Times New Roman"))

plot(production ~ year, 
     data = coffee_vn_2010_2021,
     xaxs = "i",
     yaxs = "i",
     xlim = c(2009, 2022),
     ylim = c(0, 2),
     type = "n",
     xlab = "",
     ylab = "",
     xaxt = "n",
     yaxt = "n")

grid(nx = 13, 
     ny = 4,
     lty = 2, 
     col = "gray", 
     lwd = 1)

par(new = TRUE) # make grid line behind the plot

plot(production ~ year, 
     data = coffee_vn_2010_2021,
     family = "font_1",
     las = 1,
     xaxs = "i",
     yaxs = "i",
     col = "#0000b3",
     xlim = c(2009, 2022),
     ylim = c(0, 2),
     pch = 19,
     type = "b",
     xlab = "Năm",
     ylab = "Sản lượng (triệu tấn)",
     # main = "Tình hình sản xuất cà phê ở Việt Nam và Indonesia giai đoạn 2010–2021",
     sub = "Nguồn: FAOSTAT",
     xaxt = "n" # remove thông tin trục x
     # yaxt="n"
     )

## dataset coffee_indo_2010_2021
points(production ~ year, 
     data = coffee_indo_2010_2021,
     col = "red",
     pch = 17,
     type = "b"
     )

# Changing x axis

xtick <- seq(from = 2009, to = 2022, by = 1) # x tick label
xtick[1] <- ""
xtick[14] <- ""

axis(side = 1, at = xtick, labels = FALSE) # vẽ trục x (side = 1)

text(x = xtick,  
     y = par("usr")[3], 
     labels = xtick, 
     srt = 0, 
     # pos = 1,
     adj = c(0.5, 3),
     xpd = TRUE,
     family = "font_1")

# Thay đổi vị trí title

title(main = "Tình hình sản xuất cà phê ở Việt Nam và Indonesia giai đoạn 2010–2021",
      line = 3,
      family = "font_1")

# legend

par(family = "font_1")

legend(x = (2022 + 2009) / 2, 
       y = 2.05,  
       legend = c("Việt Nam", "Indonesia"),
       col = c("#0000b3", "red"),
       lty = c(1, 1), 
       cex = 1,
       pt.cex = 1, # cex của point
       pch = c(19, 17),
       lwd = 2,
       x.intersp = 2.5,
       # y.intersp = 1,
       xjust = 0.5,
       yjust = 0,
       box.lty = 0,
       horiz = TRUE,
       xpd = TRUE,
       adj = c(0.4, 0.5), # chỉnh text legend
       seg.len = 3,
       merge = TRUE # gộp pch và line
       )

text(x = 2011, 
     y = 1, 
     labels = "Bước 7: Thêm đường grid line", 
     cex = 1.5,
     col = "#ff007b", 
     font = 2,
     # pos = 4,
     adj = c(0, 0),
     family = "font_1")

box(which = "plot")
box(which = "figure")
box(which = "outer")

library(png)
library(grid)
logor <- readPNG("logor.png")
grid.raster(logor, x = 0.92, y = 0.08, width = 0.1)

Show the code
# https://r-charts.com/base-r/grid/
Show the code
par(bg = "#f7dba7")

par(mar = c(6, 5, 5, 2))

par(font.lab = 2)

windowsFonts(font_1 = windowsFont("Times New Roman"))

plot(production ~ year, 
     data = coffee_vn_2010_2021,
     xaxs = "i",
     yaxs = "i",
     xlim = c(2009, 2022),
     ylim = c(0, 2),
     type = "n",
     xlab = "",
     ylab = "",
     xaxt = "n",
     yaxt = "n")

rect(par("usr")[1], par("usr")[3],
     par("usr")[2], par("usr")[4],
     col = "white")

grid(nx = 13, 
     ny = 4,
     lty = 2, 
     col = "gray", 
     lwd = 1)

par(new = TRUE) # make grid line behind the plot

plot(production ~ year, 
     data = coffee_vn_2010_2021,
     family = "font_1",
     las = 1,
     xaxs = "i",
     yaxs = "i",
     col = "#0000b3",
     xlim = c(2009, 2022),
     ylim = c(0, 2),
     pch = 19,
     type = "b",
     xlab = "Năm",
     ylab = "Sản lượng (triệu tấn)",
     # main = "Tình hình sản xuất cà phê ở Việt Nam và Indonesia giai đoạn 2010–2021",
     sub = "Nguồn: FAOSTAT",
     xaxt = "n" # remove thông tin trục x
     # yaxt="n"
     )

## dataset coffee_indo_2010_2021
points(production ~ year, 
     data = coffee_indo_2010_2021,
     col = "red",
     pch = 17,
     type = "b"
     )

# Changing x axis

xtick <- seq(from = 2009, to = 2022, by = 1) # x tick label
xtick[1] <- ""
xtick[14] <- ""

axis(side = 1, at = xtick, labels = FALSE) # vẽ trục x (side = 1)

text(x = xtick,  
     y = par("usr")[3], 
     labels = xtick, 
     srt = 0, 
     # pos = 1,
     adj = c(0.5, 3),
     xpd = TRUE,
     family = "font_1")

# Thay đổi vị trí title

title(main = "Tình hình sản xuất cà phê ở Việt Nam và Indonesia giai đoạn 2010–2021",
      line = 3,
      family = "font_1")

# legend

par(family = "font_1")

legend(x = (2022 + 2009) / 2, 
       y = 2.05,  
       legend = c("Việt Nam", "Indonesia"),
       col = c("#0000b3", "red"),
       lty = c(1, 1), 
       cex = 1,
       pt.cex = 1, # cex của point
       pch = c(19, 17),
       lwd = 2,
       x.intersp = 2.5,
       # y.intersp = 1,
       xjust = 0.5,
       yjust = 0,
       box.lty = 0,
       horiz = TRUE,
       xpd = TRUE,
       adj = c(0.4, 0.5), # chỉnh text legend
       seg.len = 3,
       merge = TRUE # gộp pch và line
       )

text(x = 2011, 
     y = 1, 
     labels = "Bước 8: Set background color", 
     cex = 1.5,
     col = "#ff007b", 
     font = 2,
     # pos = 4,
     adj = c(0, 0),
     family = "font_1")

box(which = "plot")
box(which = "figure")
box(which = "outer")

library(png)
library(grid)
logor <- readPNG("logor.png")
grid.raster(logor, x = 0.92, y = 0.08, width = 0.1)

Show the code
# https://r-charts.com/base-r/grid/
Show the code
par(bg = "gray90")

par(mar = c(6, 5, 5, 2))

par(font.lab = 2)

windowsFonts(font_1 = windowsFont("Times New Roman"))

plot(production ~ year, 
     data = coffee_vn_2010_2021,
     xaxs = "i",
     yaxs = "i",
     xlim = c(2009, 2022),
     ylim = c(0, 2),
     type = "n",
     xlab = "",
     ylab = "",
     xaxt = "n",
     yaxt = "n")

rect(par("usr")[1], par("usr")[3],
     par("usr")[2], par("usr")[4],
     col = "white")

grid(nx = 13, 
     ny = 4,
     lty = 2, 
     col = "gray", 
     lwd = 1)

par(new = TRUE) # make grid line behind the plot

plot(production ~ year, 
     data = coffee_vn_2010_2021,
     family = "font_1",
     las = 1,
     xaxs = "i",
     yaxs = "i",
     col = "#0000b3",
     xlim = c(2009, 2022),
     ylim = c(0, 2),
     pch = 19,
     type = "b",
     xlab = "Năm",
     ylab = "Sản lượng (triệu tấn)",
     # main = "Tình hình sản xuất cà phê ở Việt Nam và Indonesia giai đoạn 2010–2021",
     sub = "Nguồn: FAOSTAT",
     xaxt = "n" # remove thông tin trục x
     # yaxt="n"
     )

## dataset coffee_indo_2010_2021
points(production ~ year, 
     data = coffee_indo_2010_2021,
     col = "red",
     pch = 17,
     type = "b"
     )

# Changing x axis

xtick <- seq(from = 2009, to = 2022, by = 1) # x tick label
xtick[1] <- ""
xtick[14] <- ""

axis(side = 1, at = xtick, labels = FALSE) # vẽ trục x (side = 1)

text(x = xtick,  
     y = par("usr")[3], 
     labels = xtick, 
     srt = 0, 
     # pos = 1,
     adj = c(0.5, 3),
     xpd = TRUE,
     family = "font_1")

# Thay đổi vị trí title

title(main = "Tình hình sản xuất cà phê ở Việt Nam và Indonesia giai đoạn 2010–2021",
      line = 3,
      family = "font_1")

# legend

par(family = "font_1")

legend(x = (2022 + 2009) / 2, 
       y = 2.05,  
       legend = c("Việt Nam", "Indonesia"),
       col = c("#0000b3", "red"),
       lty = c(1, 1), 
       cex = 1,
       pt.cex = 1, # cex của point
       pch = c(19, 17),
       lwd = 2,
       x.intersp = 2.5,
       # y.intersp = 1,
       xjust = 0.5,
       yjust = 0,
       box.lty = 0,
       horiz = TRUE,
       xpd = TRUE,
       adj = c(0.4, 0.5), # chỉnh text legend
       seg.len = 3,
       merge = TRUE # gộp pch và line
       )

text(x = 2011, 
     y = 1, 
     labels = "Bước 9: Thể hiện giá trị trên đồ thị", 
     cex = 1.5,
     col = "#ff007b", 
     font = 2,
     # pos = 4,
     adj = c(0, 0),
     family = "font_1")

###

text(x = coffee_vn_2010_2021$year, 
     y = coffee_vn_2010_2021$production, 
     labels = round(coffee_vn_2010_2021$production, digits = 2), 
     cex = 1,
     col = "#0000b3", 
     font = 2,
     pos = 3,
     # adj = c(0, 0),
     family = "font_1")

text(x = coffee_indo_2010_2021$year, 
     y = coffee_indo_2010_2021$production, 
     labels = round(coffee_indo_2010_2021$production, digits = 2), 
     cex = 1,
     col = "red", 
     font = 2,
     pos = 3,
     # adj = c(0, 0),
     family = "font_1")

###

box(which = "plot")
box(which = "figure")
box(which = "outer")

library(png)
library(grid)
logor <- readPNG("logor.png")
grid.raster(logor, x = 0.92, y = 0.08, width = 0.1)

Show the code
# https://www.statology.org/label-scatterplot-points-r/
Show the code
par(bg = "#fefc97")

par(mar = c(6, 5, 5, 2))

par(font.lab = 2)

windowsFonts(font_1 = windowsFont("Times New Roman"))

plot(production ~ year, 
     data = coffee_vn_2010_2021,
     xaxs = "i",
     yaxs = "i",
     xlim = c(2009, 2022),
     ylim = c(0, 2),
     type = "n",
     xlab = "",
     ylab = "",
     xaxt = "n",
     yaxt = "n")

rect(par("usr")[1], par("usr")[3],
     par("usr")[2], par("usr")[4],
     col = "white")

grid(nx = 13, 
     ny = 4,
     lty = 2, 
     col = "gray", 
     lwd = 1)

par(new = TRUE) # make grid line behind the plot

plot(production ~ year, 
     data = coffee_vn_2010_2021,
     family = "font_1",
     las = 1,
     xaxs = "i",
     yaxs = "i",
     col = "#0000b3",
     xlim = c(2009, 2022),
     ylim = c(0, 2),
     pch = 19,
     type = "b",
     xlab = "Năm",
     ylab = "Sản lượng (triệu tấn)",
     # main = "Tình hình sản xuất cà phê ở Việt Nam và Indonesia giai đoạn 2010–2021",
     sub = "Nguồn: FAOSTAT",
     xaxt = "n" # remove thông tin trục x
     # yaxt="n"
     )

## dataset coffee_indo_2010_2021
points(production ~ year, 
     data = coffee_indo_2010_2021,
     col = "red",
     pch = 17,
     type = "b"
     )

# Changing x axis

xtick <- seq(from = 2009, to = 2022, by = 1) # x tick label
xtick[1] <- ""
xtick[14] <- ""

axis(side = 1, at = xtick, labels = FALSE) # vẽ trục x (side = 1)

text(x = xtick,  
     y = par("usr")[3], 
     labels = xtick, 
     srt = 0, 
     # pos = 1,
     adj = c(0.5, 3),
     xpd = TRUE,
     family = "font_1")

# Thay đổi vị trí title

title(main = "Tình hình sản xuất cà phê ở Việt Nam và Indonesia giai đoạn 2010–2021",
      line = 3,
      family = "font_1")

# legend

par(family = "font_1")

legend(x = (2022 + 2009) / 2, 
       y = 2.05,  
       legend = c("Việt Nam", "Indonesia"),
       col = c("#0000b3", "red"),
       lty = c(1, 1), 
       cex = 1,
       pt.cex = 1.5, # cex của point
       pch = c(19, 17),
       lwd = 2,
       x.intersp = 2.5,
       # y.intersp = 1,
       xjust = 0.5,
       yjust = 0,
       box.lty = 0,
       horiz = TRUE,
       xpd = TRUE,
       adj = c(0.4, 0.5), # chỉnh text legend
       seg.len = 3,
       merge = TRUE # gộp pch và line
       )

# text(x = 2011, 
#      y = 1, 
#      labels = "Final plot", 
#      cex = 1.5,
#      col = "#ff007b", 
#      font = 2,
#      # pos = 4,
#      adj = c(0, 0),
#      family = "font_1")

###

text(x = coffee_vn_2010_2021$year, 
     y = coffee_vn_2010_2021$production, 
     labels = round(coffee_vn_2010_2021$production, digits = 2), 
     cex = 1,
     col = "#0000b3", 
     font = 2,
     pos = 3,
     # adj = c(0, 0),
     family = "font_1")

text(x = coffee_indo_2010_2021$year, 
     y = coffee_indo_2010_2021$production, 
     labels = round(coffee_indo_2010_2021$production, digits = 2), 
     cex = 1,
     col = "red", 
     font = 2,
     pos = 3,
     # adj = c(0, 0),
     family = "font_1")

###

box(which = "plot")
box(which = "figure")
box(which = "outer")

library(png)
library(grid)
logor <- readPNG("logor.png")
grid.raster(logor, x = 0.92, y = 0.08, width = 0.1)