1  Hướng dẫn vẽ đồ thị cột bằng Base R Graphics

1.1 Dữ liệu minh họa: Doanh thu bán hàng

# https://tuhocr.netlify.app/flashr/loop/doanh_thu_ban_hang.xlsx
library(readxl)

doanh_thu <- readxl::read_excel("doanh_thu_ban_hang.xlsx")

doanh_thu <- as.data.frame(doanh_thu)

doanh_thu <- doanh_thu[ , c(1, 2, 5, 8, 6, 3, 4, 7, 9)]

doanh_thu 
                Họ    Tên Giới tính Tuổi Ngày vào làm       Chức vụ Chi nhánh   Lương Doanh thu bán hàng
1      Nguyễn Diệp   Hạnh        Nữ   42   2022-02-04     Nhân viên        HN 1.7e+07          2.682e+09
2         Trần Nam   Tuấn       Nam   28   2020-12-03       Quản lý        HN 2.5e+07          1.994e+09
3       Hoàng Ngọc   Liên       Nam   20   2022-06-16 Thực tập sinh       HCM 1.7e+07          2.178e+07
4   Nguyễn Thị Kim    Mai        Nữ   53   2021-11-27     Nhân viên        HN 2.5e+07          9.510e+08
5        Phạm Hồng   Thúy       Nam   52   2022-03-11      Học việc        HN 7.0e+06          2.570e+07
6          Vũ Việt    Thư        Nữ   35   2022-05-13 Thực tập sinh       HCM 1.5e+07          1.833e+07
7        Phạm Ngọc    Trí        Nữ   36   2022-05-14     Nhân viên       HCM 1.7e+07          2.826e+09
8         Đào Minh   Hạnh        Nữ   28   2021-09-16     Nhân viên        HN 2.5e+07          1.903e+09
9          Đỗ Minh   Hưng       Nam   19   2021-11-11      Học việc        HN 5.0e+06          1.443e+07
10       Lê Phương   Liên        Nữ   26   2021-11-12 Thực tập sinh       HCM 1.7e+07          8.790e+05
11      Nguyễn Anh   Liên        Nữ   52   2021-11-13     Nhân viên       HCM 1.5e+07          2.181e+09
12    Nguyễn Hoàng   Ngọc       Nam   25   2021-11-14     Nhân viên        HN 1.7e+07          2.659e+09
13       Trần Minh    Nam       Nam   29   2021-11-15     Nhân viên       HCM 1.5e+07          7.840e+08
14       Phạm Hồng     Hà        Nữ   22   2022-02-04     Nhân viên        HN 1.7e+07          2.764e+09
15         Vũ Việt     Hà       Nam   35   2020-12-03     Nhân viên       HCM 3.0e+07          3.950e+08
16       Trần Ngọc   Thúy        Nữ   38   2022-06-16     Nhân viên        HN 1.5e+07          2.202e+09
17      Trịnh Minh    Hảo        Nữ   43   2021-11-27       Quản lý        HN 5.0e+07          2.180e+08
18         Lê Minh    Trí       Nam   34   2022-03-11     Nhân viên       HCM 1.5e+07          1.587e+09
19       Đinh Quốc  Trung       Nam   46   2022-05-13     Nhân viên        HN 1.7e+07          2.869e+09
20        Vũ Quang   Vinh       Nam   26   2022-05-14     Nhân viên        HN 7.0e+06          1.271e+09
21        Trần Nam  Thịnh       Nam   32   2021-09-16       Quản lý        HN 1.5e+07          2.191e+09
22           Hoàng  Thắng       Nam   24   2022-06-16 Thực tập sinh       HCM 1.7e+07          7.350e+07
23  Nguyễn Thị Kim   Xuân        Nữ   48   2021-11-27     Nhân viên        HN 1.5e+07          2.980e+09
24       Phạm Hồng   Thúy       Nam   42   2021-11-27      Học việc        HN 1.1e+07          1.398e+07
25       Phạm Việt    Thư        Nữ   52   2022-03-11 Thực tập sinh       HCM 1.7e+07          1.989e+08
26       Trần Ngọc  Phước        Nữ   54   2022-05-13     Nhân viên       HCM 1.5e+07          2.749e+09
27 Nguyễn Thị Minh   Hạnh        Nữ   39   2022-05-14     Nhân viên        HN 1.5e+07          1.439e+09
28         Đỗ Quốc   Mạnh       Nam   38   2021-09-16      Học việc        HN 1.0e+07          9.530e+05
29       Lê Phương   Liên        Nữ   47   2021-11-11 Thực tập sinh       HCM 1.5e+07          2.998e+07
30      Nguyễn Anh   Liên        Nữ   38   2021-11-12     Nhân viên       HCM 1.7e+07          1.034e+09
31    Nguyễn Hoàng    Mai       Nam   52   2021-11-14     Nhân viên        HN 1.7e+07          1.238e+09
32      Nguyễn Kim  Tuyền       Nam   27   2021-11-15     Nhân viên       HCM 1.5e+07          2.176e+09
33       Phạm Hồng   Linh        Nữ   55   2021-11-16     Nhân viên        HN 7.0e+06          2.614e+09
34        Trần Nam   Hưng       Nam   19   2020-12-03       Quản lý        HN 1.5e+07          2.587e+09
35      Nguyễn Thị   Liên       Nam   36   2022-06-16 Thực tập sinh       HCM 1.7e+07          1.001e+07
36      Nguyễn Kim  Thanh        Nữ   54   2021-11-27     Nhân viên        HN 1.5e+07          1.870e+09
37       Phạm Hồng   Thúy       Nam   33   2022-03-11      Học việc        HN 8.0e+06          1.039e+07
38         Vũ Việt  Thanh        Nữ   23   2022-05-13 Thực tập sinh       HCM 1.7e+07          1.906e+08
39            Trần    Trí        Nữ   38   2022-05-14     Nhân viên       HCM 1.5e+07          1.088e+09
40       Trần Đanh   Thủy        Nữ   54   2022-05-13     Nhân viên        HN 1.5e+07          2.933e+09
41     Nguyễn Quốc   Hưng       Nam   50   2022-05-14      Học việc        HN 7.0e+06          2.802e+06
42       Lê Phương   Liên        Nữ   45   2021-09-16 Thực tập sinh       HCM 1.7e+07          1.421e+08
43      Nguyễn Anh   Liên        Nữ   50   2021-09-16     Nhân viên       HCM 1.5e+07          2.535e+09
44          Nguyễn    Mai       Nam   41   2021-11-14     Nhân viên        HN 1.7e+07          8.090e+08
45  Nguyễn Thị Kim  Quỳnh       Nam   48   2021-11-15     Nhân viên       HCM 2.5e+07          1.326e+09
46       Phạm Hồng     Hà        Nữ   29   2021-11-16     Nhân viên        HN 2.0e+07          1.118e+09
47         Vũ Việt     Hà       Nam   31   2021-11-17     Nhân viên       HCM 1.5e+07          1.152e+09
48       Trần Ngọc   Thúy        Nữ   45   2021-09-16     Nhân viên        HN 7.0e+06          3.900e+08
49      Trịnh Minh    Thư        Nữ   28   2021-11-11       Quản lý        HN 1.5e+07          1.328e+09
50         Lê Trần Khương       Nam   41   2021-11-12     Nhân viên       HCM 1.7e+07          1.313e+09
51       Trần Quốc  Trung       Nam   21   2021-11-14     Nhân viên        HN 1.5e+07          8.310e+08
52        Vũ Quang   Vinh       Nam   44   2021-11-15     Nhân viên        HN 1.5e+07          2.570e+09
53        Trần Nam   Hưng       Nam   52   2021-11-16       Quản lý        HN 1.7e+07          9.730e+08
54       Trần Minh    Tâm       Nam   28   2020-12-03 Thực tập sinh       HCM 1.5e+07          1.838e+09
55    Phạm Thị Kim    Trí        Nữ   43   2021-11-27     Nhân viên        HN 1.7e+07          1.732e+09
56       Phạm Trần   Thúy       Nam   48   2022-03-11      Học việc        HN 9.0e+06          2.074e+07
57         Vũ Việt   Thủy        Nữ   44   2022-05-13 Thực tập sinh       HCM 1.7e+07          1.495e+08
58       Trần Ngọc    Trí        Nữ   47   2022-05-14     Nhân viên       HCM 2.5e+07          8.720e+08
59        Đào Minh   Hạnh        Nữ   53   2021-09-16     Nhân viên        HN 1.7e+07          8.070e+08
60        Đào Đình   Binh        Nữ   29   2021-09-16     Nhân viên        HN 2.5e+07          2.687e+09

1.1.1 Vẽ đồ thị cột cho số lượng nam và nữ

1.1.1.1 Vẽ từ object thuộc class table

Cú pháp cơ bản

# table(doanh_thu$`Giới tính`, useNA = "always") -> gender

table(doanh_thu$`Giới tính`, useNA = "no") -> gender
gender

Nam  Nữ 
 29  31 
class(gender)
[1] "table"
# vẽ barplot từ kết quả của class table
barplot(height = gender,
        col = c("coral", "aquamarine"),
        horiz = FALSE
        )

barplot(height = gender,
        col = c("coral", "aquamarine"),
        horiz = TRUE
        )

Cú pháp nâng cao

barplot(height = gender,
        las = 1,
        xlab = "Giới tính",
        ylab = "Số đếm",
        main = "Số lượng nam nữ trong công ty",
        sub = "Nguồn: Dữ liệu mô phỏng",
        width = c(0.1, 0.1),
        xlim = c(0, 0),
        space = c(-6, 9),
        col = c("coral", "aquamarine"),
        ylim = c(0, 50),
        horiz = FALSE,
        border = c("purple", "blue")
        )

box()

1.1.1.2 Vẽ từ object thuộc class numeric vector

gender_numeric <- c("Nam" = 29, "Nữ" = 31)
gender_numeric
Nam  Nữ 
 29  31 
class(gender_numeric)
[1] "numeric"
barplot(height = gender_numeric,
        las = 1,
        xlab = "Giới tính",
        ylab = "Số đếm",
        main = "Số lượng nam nữ trong công ty",
        sub = "Nguồn: Dữ liệu mô phỏng",
        width = c(0.1, 0.1),
        xlim = c(0, 0),
        space = c(-6, 9),
        col = c("coral", "aquamarine"),
        ylim = c(0, 50),
        horiz = FALSE,
        border = c("purple", "blue")
        )
box()

1.1.1.3 Vẽ từ object thuộc class character vector

gender_character <- c("Nam" = "29", "Nữ" = "31")
gender_character
 Nam   Nữ 
"29" "31" 
class(gender_character)
[1] "character"
barplot(height = gender_character,
        las = 1,
        xlab = "Giới tính",
        ylab = "Số đếm",
        main = "Số lượng nam nữ trong công ty",
        sub = "Nguồn: Dữ liệu mô phỏng",
        width = c(0.1, 0.1),
        xlim = c(0, 0),
        space = c(-6, 9),
        col = c("coral", "aquamarine"),
        ylim = c(0, 50),
        horiz = FALSE,
        border = c("purple", "blue")
        )
Error in -0.01 * height: non-numeric argument to binary operator
# box()

Không vẽ được!

1.1.1.4 Vẽ từ object thuộc class numeric matrix

Bình thường nếu là kết quả từ class table ta đưa vào lệnh barplot sẽ vẽ ra đồ thị cột nhanh chóng.

table(doanh_thu$`Chức vụ`, useNA = "no") -> position

barplot(position)

Tuy nhiên nếu ta có dữ liệu ở dạng matrix thì cách vẽ như sau:

m <- matrix(data = c(7, 36, 6, 11),
            nrow = 4, ncol = 1)

rownames(m) <- c("Học việc", "Nhân viên", "Quản lý", "Thực tập sinh")

m
              [,1]
Học việc         7
Nhân viên       36
Quản lý          6
Thực tập sinh   11
barplot(m)

barplot(m, 
        beside = TRUE,
        # names.arg = rownames(m),
        names = rownames(m))

Cú pháp chi tiết

b <- barplot(height = m, 
        beside = TRUE,
        names.arg = rownames(m),
        space = 2,
        ylim = c(0, 50),
        xlab = "Chức vụ",
        ylab = "Số đếm",
        main = "Số lượng nhân viên theo vị trí việc làm",
        sub = "Nguồn: Dữ liệu mô phỏng",
        density = c(30, 30, 30, 30),
        angle = c(0, 30, 60, 90, 120), 
        col = terrain.colors(5)
        )
box()

text(b, m + 3, m, font = 1, col = "black")

Trong trường hợp khi xoay ma trận m, ta có ma trận n như sau:

n <- t(m)

n
     Học việc Nhân viên Quản lý Thực tập sinh
[1,]        7        36       6            11
barplot(n, beside = FALSE) # ma trận xoay ngang thì các cột được vẽ. Không bị stacked lại như ở m.

barplot(n, beside = TRUE,
        col = c("cyan", "yellow", "coral", "lightblue"),
        width = c(1, 1, 1, 1),
        space = c(0.5, 0.5, 0.5, 0.5))

1.1.1.5 Vẽ từ object thuộc class character matrix

character_matrix <- apply(X = m, MARGIN = 2, FUN = as.character)

row.names(character_matrix) <- row.names(m)

character_matrix
              [,1]
Học việc      "7" 
Nhân viên     "36"
Quản lý       "6" 
Thực tập sinh "11"
barplot(character_matrix, 
        beside = TRUE,
        names.arg = rownames(character_matrix)
        )
Error in -0.01 * height: non-numeric argument to binary operator

Không vẽ được!