trees -> df

names(df) <- c("duong_kinh", "chieu_cao", "the_tich")

source("unicode_to_vniwindows.R")

###

fit_lm <- lm(the_tich ~ duong_kinh, data = df)
coef_lm <- coef(fit_lm) 
round(coef_lm, 2) -> ok 
round(unclass(summary(fit_lm))$r.squared, 2) -> r_ok 

###

library(Cairo)

Cairo::CairoPDF(file = "1a.pdf",
                width = 14,
                height = 8,
                bg = "gray90")

par("family" = "SVN-Dayland")

par(pty = "m")

# par(bg = "yellow") # không hoạt động ở cairo

par(mar = c(7, 8, 8, 6))

plot(x = df$duong_kinh,
     y = df$the_tich,
     type = "n",
     xlim = c(0, 30),
     ylim = c(0, 100),
     xaxs = "i",
     yaxs = "i",
     ann = FALSE,
     axes = FALSE)

rect(xleft = par("usr")[1],
     xright = par("usr")[2],
     ybottom = par("usr")[3],
     ytop = par("usr")[4],
     col = "lightyellow",
     border = "transparent",
     lwd = 0)

grid(col = "gray50", lty = 3)

par(new = TRUE)

par(cex.axis = 1.5)
par(font.axis = 2)
par(col.axis = "black")
par(cex.lab = 1.5)
par(font.lab = 2)
par(col.lab = "black")


par(fg = "black")

plot(x = df$duong_kinh,
     y = df$the_tich,
     type = "n",
     col = "purple",
     xlim = c(0, 30),
     ylim = c(0, 100),
     las = 1,
     xaxs = "i",
     yaxs = "i",
     xlab = "Đường kính (inch)",
     ylab = expression("Thể tích"~"("*ft^3*")"),
     lwd = 3,
     lty = 1,
     bty = "o")

par(lheight = 1)

title(main = unicode_to_vniwindows("Tương quan giữa đường kính và thể tích của cây black cherry"),
      cex.main = 3,
      col.main = "darkgreen",
      line = 4.5,
      family = "VNI-Diudang")

## Chèn đường trend line

# clip(x1 = par("usr")[1], 
#      x2 = par("usr")[2], 
#      y1 = 10, 
#      y2 = 80)
# abline(fit_lm, col = "darkgreen", lwd = 2, lty = 1)

curve(expr = coef_lm[1] + coef_lm[2] * duong_kinh, 
      xname = "duong_kinh",
      from = - coef_lm[1] / coef_lm[2],
      to = 30, n = 100, add = TRUE, 
      lwd = 2, lty = 1, col = "#ff0065"
)

### che lại chút chỗ trendline lấn ra trục hoành
rect(xleft = 6,
     xright = 9,
     ybottom = -5,
     ytop = 0,
     col = "gray90",
     border = NA,
     lwd = 0,
     xpd = NA)


# https://www.statology.org/standardized-residuals-in-r/
# standard_res <- rstandard(fit_lm)
# https://drsimonj.svbtle.com/visualising-residuals


predicted_ok <- predict(fit_lm)
# residuals_ok <- residuals(fit_lm)

# points(x = df$duong_kinh,
#        y = predicted_ok,
#        type = "n",
#        col = adjustcolor("red", alpha.f = 0.7),
#        bg = adjustcolor("yellow", alpha.f = 0.7),
#        pch = 21,
#        cex = 2,
#        lwd = 2)

segments(x0 = df$duong_kinh,
         y0 = df$the_tich,
         x1 = df$duong_kinh,
         y1 = predicted_ok,
         col = adjustcolor("blue", alpha.f = 0.5),
         cex = 2,
         lwd = 2)

points(x = df$duong_kinh,
       y = df$the_tich,
       type = "p",
       col = adjustcolor("blue", alpha.f = 0.7),
       bg = adjustcolor("yellow", alpha.f = 0.7),
       pch = 21,
       cex = 2,
       lwd = 2)

### setup vị trí hình

library(jpeg)
library(grid)
black_cherry <- readJPEG("black_cherry.jpg")

a_1 <- dev.size(units = "px") # đơn vị px
a_2 <- par("plt") # đơn vị phần trăm
# a_3 <- par("usr") # đơn vị tọa độ usr
a_4 <- dim(black_cherry) # đơn vị px của ảnh gốc (height x width)
a_5_w <- 200 # chiều ngang hình px
a_5_h <- a_5_w * a_4[1] / a_4[2] # chiều cao hình px


### vị trí điểm trung tâm hình cách góc phải bên dưới đồ thị
### tính theo px
x_ok <- (a_2[2] * a_1[1]) - a_5_w/2 
y_ok <- (a_2[3] * a_1[2]) + a_5_h/2

### tính theo phần trăm
x_plt <- x_ok / a_1[1] 
y_plt <- y_ok / a_1[2] 

grid.raster(black_cherry, 
            x = x_plt, 
            y = y_plt, 
            width = a_5_w/a_1[1] # chia cho chiều rộng của dev.size
)


box(which = "figure", lty = 1, col = "blue", lwd = 4)
box(which = "plot", lty = 1, col = "black", lwd = 1)

mtext(text = "Thực hiện: Nguyễn Tấn Đức      Chuyên đào tạo kỹ năng R      www.tuhocr.com",
      side = 3, xpd = TRUE,
      adj = 0.5, line = 1.5,
      font = 2,
      cex = 2,
      col = "#ff0065")

mtext(text = bquote(bold("Source: Ryan, T. A., Joiner, B. L. and Ryan, B. F. (1976)") ~ bolditalic("The Minitab Student Handbook.") ~ bold("Duxbury Press.")),
      side = 1, xpd = TRUE,
      adj = 1, line = 5,
      # font = 2,
      cex = 1,
      col = "darkblue",
      family = "Courier New")

# mtext(text = "Image: https://www.pfw.edu/microsites/native-trees/black-cherry",
#      side = 4, xpd = TRUE,
#      adj = 0, line = 0,
#      font = 1,
#      cex = 0.75,
#      col = "black",
#      family = "Courier New")

text(x = par("usr")[2] + 0.4,
     y = par("usr")[4],
     labels = "Image: https://www.pfw.edu/microsites/native-trees/black-cherry",
     xpd = TRUE,
     adj = 0,
     font = 1,
     cex = 0.75,
     col = "black",
     family = "Courier New",
     srt = 270)

# text(x = 10, y = 80,
#      labels = bquote(atop("Thể tích" == ~ .(ok[1]) ~ + ~ .(ok[2]) ~ "\u00D7" ~ "Đường kính", 
#                           R^2 == .(r_ok))),
#      cex = 2, 
#      family = "Arial",
#      font = 2,
#      col = "blue")

###

library(png)
logor <- readPNG("logor.png")

scale_logo <- 0.08

grid.raster(logor, 
            x = ((a_2[1] * a_1[1]) + (scale_logo * a_1[1])/2) / a_1[1], 
            y = ((a_2[3] * a_1[2]) + ((scale_logo * a_1[1]) * dim(logor)[1] / dim(logor)[2])/2) / a_1[2], 
            width = scale_logo)

####

phuong_trinh <- "Phương trình đường hồi quy tuyến tính:"

cong_thuc <- paste0("$$", "y =", ok[1], "+", ok[2], " \\times ", "x", "$$")
cong_thuc_a <- paste0("\\centering ", cong_thuc)

r_2 <- paste0("$", "R^2 =", r_ok, "$")
r_2_a <- paste0("\\centering ", r_2)

full_equation <- paste0(phuong_trinh, cong_thuc_a, r_2_a) 

# https://pretextbook.org/doc/guide/html/section-installing-pdf2svg.html
library(exams)
# tinytex::parse_install("ok.log")


header_ok <- c("\\usepackage{helvet}", 
           "\\IfFileExists{sfmath.sty}{\\RequirePackage[helvet]{sfmath}}{}",
           "\\renewcommand{\\sfdefault}{phv}", 
           "\\renewcommand{\\rmdefault}{phv}",
           "\\usepackage[utf8]{vietnam}",
           "\\usepackage{times}")

exams::tex2image(tex = full_equation,
                 format = "svg",
                 density = 1000,
                 resize = 1000,
                 dir = getwd(),
                 name = "cong_thuc",
                 show = FALSE,
                 header = header_ok)

library(grImport2)
p_1 <- grImport2::readPicture("cong_thuc.svg" )


grImport2::grid.picture(p_1, 
                        x = 0.38, 
                        y = 0.58, 
                        width = 0.33 # chia cho chiều rộng của dev.size
                        )

###

dev.off()

# system(paste(getOption("pdfviewer"), "1a.pdf"))
# system(command = 'open "1a.pdf"')

library(pdftools)
pdf_convert(pdf ="1a.pdf",
            format = "png",
            pages = 1,
            filenames = "1a.png",
            dpi = 300,
            antialias = TRUE,
            opw = "",
            upw = "",
            verbose = FALSE)

shell(cmd = "1a.png")