Bar charts

Barcharts là một dạng biểu đồ rất phổ biến trong các báo cáo và phân tích bởi hình dạng của barcharts giúp người đọc dễ dàng đánh giá, so sánh giữa các cột với nhau hơn các đồ thị line, pie. Trong ggplot2 có 2 loại biểu đồ barcharts chính: geom_bar tạo ra chiều dài của bar cân đối với tổng số trường hợp trong mỗi group (hoặc nếu trục weight được cung cấp, tổng của các weights). Nếu bạn muốn chiều cao của các cột biểu diễn giá trị của dữ liệu thì có thể sử dụng geom_col thay thế. geom_bar sử dụng stat_count theo mặc định: Nó đếm số lượng các trường hợp của mỗi vị trí của x. geom_col sử dụng stat_identity và nó để lại dữ liệu như:

geom_bar(mapping = NULL, data = NULL, stat = ‘count’, position = ‘stack’,…, width = NULL, bindwidth = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE)

geom_col(mapping = NULL, data = NULL, position = ‘stack’,…, width = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE)

stat_count(mapping = NULL, data = NULL, geom = ‘bar’, position = ‘stack’,…, width = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE)

Giải thích các Arguments

mapping Thiết lập trục mapping được tạo bởi aes() hoặc aes_(). Nếu được xác định và inherit.aes = TRUE (mặc định), nó sẽ được kết hợp với mapping mặc định ở level đầu tiên của đồ thị. Bạn phải cung cấp mapping nếu đồ thị không có mapping.

data Dữ liệu được hiển thị trên layer. Có 3 options:

Nếu NULL, mặc định, data sẽ được kế thừa từ data được xác định tỏng ggplot().

Một data.frame hoặc một object khác sẽ viết đè lên đồ thị hiện tại. Toàn bộ objects sẽ được củng cố để tạo ra một data frame. xem hàm fortify() cho những biến sẽ được tao.

Một hàm số sẽ được gọi với một argument đơn, đồ thị dữ liệu. Giá trị trả về phải là một data.frame, và sẽ được sử dụng như là layer data.

postion Vị trí điều chỉnh, bao gồm cả string hoặc kết quả của một phép gọi tới hàm điều chỉnh vị trí.

width Bar width. mặc định được thiết lập là 90% sự phân giải của dữ liệu.

binwidth geom_bar không còn sử dụng tham số binwidth nữa - nếu bạn sử dụng nó sẽ trả về waring báo cho bạn rằng sử dụng geom_history() thay thế.

na.rm nếu FALSE, mặc định, giá trị missing values sẽ được removed với một cảnh báo. Nếu TRUE, giá trị missing sẽ được removed một cách âm thầm.

Trục tọa độ

geom_bar sẽ hiểu các trục tọa độ dưới đây:

  • x: Trục x
  • y: Trục y
  • alpha: chỉ số alpha
  • colour: màu sắc
  • fill: màu sắc cột
  • group: Phân nhóm để tô màu theo nhóm.
  • linetype: kiểu đường viền
  • size: Kích thước cột

Ví dụ về geom_bar

#Kiểm tra dữ liệu
library(ggplot2)
head(mpg)
## # A tibble: 6 x 11
##   manufacturer model displ  year   cyl trans drv     cty   hwy fl    class
##   <chr>        <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 audi         a4     1.80  1999     4 auto~ f        18    29 p     comp~
## 2 audi         a4     1.80  1999     4 manu~ f        21    29 p     comp~
## 3 audi         a4     2.00  2008     4 manu~ f        20    31 p     comp~
## 4 audi         a4     2.00  2008     4 auto~ f        21    30 p     comp~
## 5 audi         a4     2.80  1999     6 auto~ f        16    26 p     comp~
## 6 audi         a4     2.80  1999     6 manu~ f        18    26 p     comp~
g <- ggplot(mpg, aes(class))
g + geom_bar()

Thay đổi đồ thị sang dạng stack thoe loại drv khi thêm argument fill trong aes()

g + geom_bar(aes(fill = drv))

Chúng ta muốn xoay ngang đồ thị để trông đẹp mắt hơn

g + geom_bar(aes(fill = drv)) +
  coord_flip()

Thay đổi màu sắc mặc định của các nhóm drv cho đẹp mắt. Các mã màu có thể được lựa chọn ở trong Color hex

group.color <- c('#828475','#8A945A','#A2C400')
g + geom_bar(aes(fill = drv)) +
  coord_flip() +
  scale_fill_manual(values = group.color)

Làm cho màu trở nên trong suốt hơn (giống như một miếng kính màu có thể nhìn xuyên qua).

g + geom_bar(aes(fill = drv), alpha = 0.6) +
  coord_flip() +
  scale_fill_manual(values = group.color)

Thay đổi background trắng và viền xanh lá cây:

g + geom_bar(aes(fill = drv), alpha = 0.6) +
  coord_flip() +
  scale_fill_manual(values = group.color)+
  theme(
    panel.background = element_rect(fill='white', color='blue')
  )

Thêm label cho các giá trị:

g + geom_bar(aes(fill = drv), alpha = 0.6) +
  geom_text(stat = 'count', aes(label = ..count..), position = position_stack(vjust = 0.5)) +
  coord_flip() +
  scale_fill_manual(values = group.color)+
  theme(
    panel.background = element_rect(fill='white', color='blue')
  )

Thay đổi tên trục x và trục y và thêm tiêu đề cho đồ thị.

g + geom_bar(aes(fill = drv), alpha = 0.6) +
  geom_text(stat = 'count', aes(label = ..count..), position = position_stack(vjust = 0.5)) +
  coord_flip() +
  scale_fill_manual(values = group.color) +
  labs(
    title = "Visulization Class of Cars",
    subtitle = "Created by: Pham Dinh Khanh",
    y = "Car Type",
    x = 'No Cars'
  ) +
  theme(
    panel.background = element_rect(fill='white', color='blue')
  )

Điều chỉnh legend (chính là phần chú thích bên phải ghi chú màu sắc các loại drv):

#hide legend
g + geom_bar(aes(fill = drv), alpha = 0.6, show.legend = FALSE) +
  geom_text(stat = 'count', aes(label = ..count..), position = position_stack(vjust = 0.5)) +
  coord_flip() +
  scale_fill_manual(values = group.color) +
  labs(
    title = "Visulization Class of Cars",
    subtitle = "Created by: Pham Dinh Khanh",
    y = "Car Type",
    x = 'No Cars'
  ) +
  theme(
    panel.background = element_rect(fill='white', color='blue')
  )

Chỉnh legend xuống cuối (tương tự với sang trái, lên trên cùng):

#bottom legend
g + geom_bar(aes(fill = drv), alpha = 0.6) +
  geom_text(stat = 'count', aes(label = ..count..), position = position_stack(vjust = 0.5)) +
  coord_flip() +
  scale_fill_manual(values = group.color) +
  labs(
    title = "Visulization Class of Cars",
    subtitle = "Created by: Pham Dinh Khanh",
    y = "Car Type",
    x = 'No Cars'
  ) +
  theme(
    panel.background = element_rect(fill='white', color='blue'),
    legend.position = 'bottom'
  )

Các đồ thị trên được vẽ dựa trên 1 trục x và trục y là phép tính count mặc định. Vậy đối với trường hợp muốn vẽ đồ thị barcharts theo 2 biến x, y đã biết thì sẽ như thế nào. Bên dưới sẽ trình bày cách thực hiện đồ thị như vậy:

Tạo dữ liệu visualize là df:

library(dplyr)
df <- mpg %>% group_by(class, drv) %>% 
  summarise(no_car = n()) %>% ungroup()
df
## # A tibble: 12 x 3
##    class      drv   no_car
##    <chr>      <chr>  <int>
##  1 2seater    r          5
##  2 compact    4         12
##  3 compact    f         35
##  4 midsize    4          3
##  5 midsize    f         38
##  6 minivan    f         11
##  7 pickup     4         33
##  8 subcompact 4          4
##  9 subcompact f         22
## 10 subcompact r          9
## 11 suv        4         51
## 12 suv        r         11

Vẽ đồ thị barcharts cho 2 biến x,y:

g <- ggplot(df, aes(x = class, y = no_car, fill = drv))
g + geom_col(alpha = 0.6) +
  geom_text(aes(label = no_car),position = position_stack(vjust = 0.5)) +
  scale_fill_manual(values = group.color) +
  labs(
    title = "Visulization Class of Cars",
    subtitle = "Created by: Pham Dinh Khanh",
    y = "Car Type",
    x = 'No Cars'
  ) +
  theme(
    panel.background = element_rect(fill='white', color='blue'),
    legend.position = 'bottom'
  )

Xoay ngang đồ thị:

g <- ggplot(df, aes(x = class, y = no_car, fill = drv))
g + geom_col(alpha = 0.6) +
  geom_text(aes(label = no_car), position = position_stack(vjust = 0.5)) +
  coord_flip() +
  scale_fill_manual(values = group.color) +
  labs(
    title = "Visulization Class of Cars",
    subtitle = "Created by: Pham Dinh Khanh",
    y = "Car Type",
    x = 'No Cars'
  ) +
  theme(
    panel.background = element_rect(fill='white', color='blue'),
    legend.position = 'bottom'
  )