boxplot() trong R: Cách thực hiện BoxVẽ đồ thị trong RStudio

⚡ Tóm tắt thông minh

BoxHàm `plot` trong R tóm tắt phân bố số liệu thông qua trung vị, tứ phân vị, râu và các giá trị ngoại lệ bằng cách sử dụng hàm `geom_boxplot()` từ thư viện `ggplot2`. Hướng dẫn này xây dựng biểu đồ hộp trên tập dữ liệu chất lượng không khí và thêm các lớp màu sắc, chấm, độ lệch, vết lõm và so sánh nhóm.

  • 📐 Tóm tắt năm con số: Hộp biểu thị khoảng từ tứ phân vị thứ nhất đến tứ phân vị thứ ba, đường kẻ đánh dấu trung vị, và các đường râu kéo dài đến 1.5 lần khoảng tứ phân vị.
  • 🧱 Cú pháp cơ bản: ggplot(df, aes(x = group, y = value)) + geom_boxplot() tạo ra một hộp cho mỗi cấp độ của nhómping hệ số.
  • ???? Tạo kiểu cho các giá trị ngoại lệ: Các thuộc tính outlier.colour, outlier.shape và outlier.size kiểm soát cách vẽ các điểm nằm ngoài đường râu.
  • 💠 Hiển thị các quan sát: geom_jitter() dịch chuyển phần chồng lấpping Các điểm được đặt nghiêng, cho thấy kích thước mẫu đằng sau mỗi ô.
  • 📉 Chữ khắc Boxlà: notch = TRUE vẽ khoảng tin cậy của trung vị và không chồng chéo.ping Các vết khía cho thấy sự khác biệt thực sự.
  • 🎨 Nhómping: Bản đồping Hàm `fill` bên trong `geom_boxplot()` chia mỗi danh mục thành nhiều hộp cạnh nhau.

Boxvẽ đồ thị trong R

boxplot() trong R

boxplot() trong R giúp hình dung sự phân bố dữ liệu theo tứ phân vị và phát hiện sự hiện diện của các giá trị ngoại lai. Bạn có thể sử dụng đối tượng hình học geom_boxplot() từ thư viện ggplot2 để vẽ boxplot() trong R.

Chúng ta sẽ sử dụng bộ dữ liệu chất lượng không khí để giới thiệu hàm boxplot() trong R với ggplot. Bộ dữ liệu ghi lại các phép đo chất lượng không khí hàng ngày ở New York từ tháng 5 đến tháng 9 năm 1973 và chứa 153 quan sát. Chúng ta sẽ sử dụng các biến sau:

  • Ozone: Biến số
  • Gió: Biến số
  • Tháng: Tháng 5 đến tháng 9. Biến số

Trước khi vẽ, điều đáng lưu ý là cần biết chính xác từng phần của hình hộp tượng trưng cho điều gì.

Làm thế nào để đọc một Box Biểu đồ: Tứ phân vị, khoảng tứ phân vị và các giá trị ngoại lệ

Mỗi phần tử trong biểu đồ hộp mã hóa một con số từ tóm tắt năm số. Biết được con số nào là con số nào sẽ biến biểu đồ từ công cụ trang trí thành công cụ phân tích.

  • Bản lề dưới: Tứ phân vị thứ nhất, Q1. Hai mươi lăm phần trăm số quan sát nằm dưới mức này.
  • Đường trung tuyến: Tứ phân vị thứ hai. Vị trí của nó bên trong hộp cho thấy độ lệch: một đường bị đẩy về phía dưới có nghĩa là dữ liệu bị lệch phải.
  • Bản lề trên: Tứ phân vị thứ ba, Q3. Bảy mươi lăm phần trăm các quan sát nằm dưới mức này.
  • Box Chiều cao: Khoảng tứ phân vị, IQR = Q3 – Q1, chứa một nửa dữ liệu ở giữa và là thước đo độ phân tán tiêu chuẩn và đáng tin cậy.
  • Râu: Chúng mở rộng đến quan sát cực đoan nhất vẫn nằm trong phạm vi 1.5 lần khoảng tứ phân vị (IQR) của bản lề gần nhất. Chúng không phải là giá trị tối thiểu và tối đa.
  • Những điểm cần lưu ý ngoài những điều nhỏ nhặt: Các quan sát được đánh dấu là ngoại lệ theo quy tắc IQR 1.5 đó.

Có hai lưu ý. Thứ nhất, "giá trị ngoại lệ" ở đây là một dấu hiệu thống kê, không phải là lỗi: trong một phân bố lệch như nồng độ ozone, các giá trị cao là điều được mong đợi và không nên bị xóa. Thứ hai, biểu đồ hộp che giấu hình dạng của phân bố, vì vậy hai nhóm có hộp giống hệt nhau có thể có dữ liệu cơ bản rất khác nhau. Việc thêm các điểm được làm nhiễu, như hình dưới đây, sẽ giúp tránh điều đó.

Box So sánh Plot, Histogram và Violin Plot trong R.

Cả ba biểu đồ đều mô tả sự phân bố số liệu, nhưng mỗi biểu đồ lại tiết lộ điều mà các biểu đồ khác che giấu.

Tiêu chí Box Âm mưu Histogram Lô đàn vĩ cầm
Chương trình Trung vị, tứ phân vị, giá trị ngoại lệ Tần số trong mỗi khoảng Đường cong mật độ đầy đủ
Revnhiều đỉnh Không
Đánh dấu các giá trị ngoại lệ Vâng, rõ ràng là vậy Chỉ về mặt hình ảnh Không trực tiếp
So sánh nhiều nhóm Xuất sắc Lúng túng tốt
Cần có lựa chọn điều chỉnh Không Vâng, số lượng thùng Vâng, băng thông
Đối tượng ggplot2 geom_boxplot() geom_histogram() geom_violin()

Một giải pháp thỏa hiệp phổ biến là vẽ biểu đồ violin với một biểu đồ hộp hẹp bên trong, giúp giữ nguyên hình dạng mật độ và tóm tắt tứ phân vị trong cùng một biểu đồ. Xem thêm hướng dẫn về biểu đồ tần số Về khía cạnh phân loại trong phép so sánh.

Tạo Box Âm mưu

Trước khi bạn bắt đầu tạo boxplot() đầu tiên trong R, bạn cần thao tác dữ liệu như sau:

  • Bước 1: Nhập dữ liệu
  • Bước 2: Bỏ các biến không cần thiết
  • Bước 3: Chuyển đổi Tháng thành một yếu tố có thứ tự
  • Bước 4: Tạo một biến phân loại mới, chia mỗi tháng thành ba phần: Đầu tháng, Giữa tháng và Cuối tháng.
  • Bước 5: Xóa các quan sát bị thiếu

Tất cả các bước này được thực hiện với dplyr và toán tử đường ống %>%.

library(dplyr)
library(ggplot2)
# Step 1
data_air <- airquality %>%

#Step 2
select(-c(Solar.R, Temp)) %>%

#Step 3
mutate(Month = factor(Month, order = TRUE, labels = c("May", "June", "July", "August", "September")), 
       
#Step 4 
day_cat = factor(ifelse(Day < 10, "Begin", ifelse(Day < 20, "Middle", "End"))))

Một cách thực hành tốt là kiểm tra cấu trúc của dữ liệu bằng hàm lookup().

glimpse(data_air)

Đầu ra:

## Observations: 153
## Variables: 5
## $ Ozone   <int> 41, 36, 12, 18, NA, 28, 23, 19, 8, NA, 7, 16, 11, 14, ...
## $ Wind    <dbl> 7.4, 8.0, 12.6, 11.5, 14.3, 14.9, 8.6, 13.8, 20.1, 8.6...
## $ Month   <ord> May, May, May, May, May, May, May, May, May, May, May,...
## $ Day     <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,...
## $ day_cat <fctr> Begin, Begin, Begin, Begin, Begin, Begin, Begin, Begi...

Cả Ozone và Solar.R đều chứa các giá trị NA. Vì hàm geom_boxplot() sẽ âm thầm loại bỏ chúng và in ra cảnh báo, nên việc loại bỏ chúng một cách rõ ràng sẽ gọn gàng hơn.

# Step 5
data_air_nona <-data_air %>% na.omit()	

Biểu đồ hộp cơ bản

Bây giờ hãy vẽ biểu đồ phân bố ozone theo tháng.

# Store the graph
box_plot <- ggplot(data_air_nona, aes(x = Month, y = Ozone))
# Add the geometric object box plot
box_plot +
    geom_boxplot()

Code Giải thích

  • Lưu trữ biểu đồ để sử dụng tiếp
    • box_plot: biểu đồ cơ bản được lưu trữ trong đối tượng box_plot, cho phép bạn thêm các lớp sau này mà không cần lặp lại toàn bộ lệnh gọi.
  • Thêm đối tượng hình học
    • Bạn truyền tập dữ liệu data_air_nona vào hộp lệnh ggplot.
    • Bên trong đối số aes(), bạn thêm trục x và trục y.
    • Dấu + có nghĩa là bạn muốn R tiếp tục đọc mã. Nó làm cho mã dễ đọc hơn bằng cách phá vỡ nó.
    • Sử dụng geom_boxplot() để tạo biểu đồ hộp

Đầu ra:

Cơ bản Box Âm mưu

Thay đổi cạnh của đồ thị

Bạn có thể lật cạnh của biểu đồ.

box_plot +
  geom_boxplot()+
  coord_flip()

Code Giải thích

  • box_plot: Bạn sử dụng biểu đồ đã lưu trữ. Nó tránh việc phải viết lại tất cả các mã mỗi khi bạn thêm thông tin mới vào biểu đồ.
  • geom_boxplot(): vẽ các hộp và râu
  • coord_flip(): Lật cạnh của đồ thị

Đầu ra:

Thay đổi cạnh của đồ thị

Thay đổi màu của ngoại lệ

Bạn có thể thay đổi màu sắc, hình dạng và kích thước của các ngoại lệ.

box_plot +
    geom_boxplot(outlier.colour = "red",
        outlier.shape = 2,
        outlier.size = 3) +
    theme_classic()

Code Giải thích

  • outlier.colour=”red”: Kiểm soát màu của các ngoại lệ
  • outlier.shape=2: Thay đổi hình dạng của ngoại lệ. 2 đề cập đến hình tam giác
  • outlier.size=3: Thay đổi kích thước của tam giác. Số lớn hơn sẽ vẽ các điểm đánh dấu lớn hơn.

Đầu ra:

Thay đổi màu của ngoại lệ

Thêm một thống kê tóm tắt

Bạn có thể chồng thêm một số liệu thống kê tóm tắt, chẳng hạn như giá trị trung bình của nhóm, mà bản thân biểu đồ hộp không hiển thị.

box_plot +
    geom_boxplot() +
    stat_summary(fun.y = mean,
        geom = "point",
        size = 3,
        color = "steelblue") +
    theme_classic()

Code Giải thích

  • Hàm stat_summary() thêm một thống kê được tính toán vào trên biểu đồ hộp.
  • Tham số `fun` kiểm soát số liệu thống kê nào được trả về. Ở đây là giá trị trung bình. Lưu ý rằng mã cũ hơn sử dụng `fun.y`, mà ggplot2 đã loại bỏ trong phiên bản 3.3.0.
  • Lưu ý: Các số liệu thống kê khác có sẵn như tối thiểu và tối đa. Nhiều số liệu thống kê có thể được hiển thị trong cùng một biểu đồ
  • geom=“point”: Vẽ giá trị trung bình bằng một điểm
  • size=3: Kích thước của điểm
  • color="steelblue": Màu sắc của các điểm

Đầu ra:

Thêm một thống kê tóm tắt

Box Vẽ đồ thị bằng dấu chấm

Tiếp theo, thêm một lớp biểu đồ chấm lên trên các ô. Mỗi chấm đại diện cho một quan sát duy nhất, giúp hiển thị kích thước mẫu đằng sau mỗi ô.

box_plot +
    geom_boxplot() +
    geom_dotplot(binaxis = 'y',
        dotsize = 1,
        stackdir = 'center') +
    theme_classic()

Code Giải thích

  • Hàm geom_dotplot() vẽ một chấm cho mỗi quan sát, được xếp chồng lên nhau trong mỗi ô.
  • binaxis='y': Thay đổi vị trí của các dấu chấm dọc theo trục y. Theo mặc định, trục x
  • dotsize=1: Kích thước của dấu chấm
  • stackdir='center': Cách xếp chồng các dấu chấm: Bốn giá trị:
    • “lên” (mặc định),
    • "xuống"
    • "trung tâm"
    • “trung tâm”

Đầu ra:

Box Vẽ đồ thị bằng dấu chấm

Kiểm soát tính thẩm mỹ của Box Âm mưu

Thay đổi màu của hộp

Bạn có thể thay đổi màu sắc của nhóm.

ggplot(data_air_nona, aes(x = Month, y = Ozone, color = Month)) +
    geom_boxplot() +
    theme_classic()

Code Giải thích

  • Màu sắc của các nhóm được điều khiển trong bản đồ aes().pingBạn có thể sử dụng `color=Month` để thay đổi màu sắc của biểu đồ hộp và râu theo từng tháng.

Đầu ra:

Thay đổi màu của Box

Box âm mưu với nhiều nhóm

Cũng có thể thêm nhiều nhóm. Bạn có thể hình dung sự khác biệt về chất lượng không khí theo ngày đo.

ggplot(data_air_nona, aes(Month, Ozone)) +
    geom_boxplot(aes(fill = day_cat)) +
    theme_classic()

Code Giải thích

  • Bản đồ aes()ping Đối tượng hình học điều khiển các nhóm cần hiển thị (biến này phải là một yếu tố).
  • aes(fill= day_cat) cho phép tạo ba hộp cho mỗi tháng trên trục x

Đầu ra:

Box Âm mưu với nhiều nhóm

Box Vẽ đồ thị với các chấm bị biến dạng

Một cách khác để thể hiện các quan sát riêng lẻ là sử dụng các điểm được làm nhiễu. Làm nhiễu thường là lựa chọn khi trục x phân loại khiến nhiều điểm rơi vào cùng một vị trí.

Phương pháp này tránh được sự chồng chéo.ping của dữ liệu rời rạc.

box_plot +
    geom_boxplot() +
    geom_jitter(shape = 15,
        color = "steelblue",
        position = position_jitter(width = 0.21)) +
    theme_classic()

Code Giải thích

  • Hàm geom_jitter() thêm một độ dịch chuyển ngẫu nhiên nhỏ vào mỗi điểm để tạo sự chồng lấp.ping Các giá trị trở nên rõ ràng.
  • shape=15 thay đổi hình dạng của các điểm. 15 biểu diễn các hình vuông
  • color=“steelblue”: Thay đổi màu của điểm
  • position = position_jitter(width = 0.21): kiểm soát khoảng cách dịch chuyển ngang của các điểm, được đo bằng đơn vị trục x. Giá trị mặc định là 40% khoảng cách giữa các danh mục.

Đầu ra:

Box Vẽ đồ thị với các chấm bị biến dạng

Bạn có thể thấy sự khác biệt giữa biểu đồ đầu tiên với phương pháp jitter và biểu đồ thứ hai với phương pháp điểm.

box_plot +
    geom_boxplot() +
    geom_point(shape = 5,
        color = "steelblue") +
    theme_classic()

Box Vẽ đồ thị với các chấm bị biến dạng

Chữ khắc Box Âm mưu

Một tính năng thú vị của geom_boxplot() là hàm biểu đồ hộp có khía trong R. Biểu đồ khía thu hẹp hộp xung quanh trung vị. Mục đích chính của biểu đồ hộp có khía là so sánh ý nghĩa của trung vị giữa các nhóm. Có bằng chứng mạnh mẽ cho thấy hai nhóm có trung vị khác nhau khi các khía không chồng lên nhau. Một khía được tính như sau:

Chữ khắc Box Âm mưu

Ở đây, IQR là khoảng tứ phân vị và n là số lượng quan sát trong nhóm. Vùng khuyết trải rộng trên khoảng tin cậy 95% của trung vị.

box_plot +
    geom_boxplot(notch = TRUE) +
    theme_classic()

Code Giải thích

  • geom_boxplot(notch = TRUE): vẽ biểu đồ hộp với các đường khía xung quanh đường trung vị

Đầu ra:

Chữ khắc Box Âm mưu

Cách thêm tiêu đề, nhãn và màu sắc tùy chỉnh vào Box Vẽ đồ thị trong R

Các biểu đồ ở trên sử dụng các thiết lập mặc định của ggplot2, lấy tên biến trực tiếp từ khung dữ liệu. Một biểu đồ có thể xuất bản cần có nhãn dễ đọc và bảng màu được lựa chọn kỹ lưỡng.

Tiêu đề và nhãn trục. Một lệnh gọi labs() sẽ thiết lập mọi phần tử văn bản:

box_plot +
    geom_boxplot(fill = "coral", alpha = 0.7) +
    labs(title = "Ozone concentration by month",
        subtitle = "New York, May to September 1973",
        x = "Month",
        y = "Ozone (parts per billion)",
        caption = "Source: airquality dataset") +
    theme_classic()

Bạn có thể tự chọn màu sắc. Sử dụng scale_fill_manual() khi fill được ánh xạ bên trong aes(), và scale_colour_manual() khi colour là:

ggplot(data_air_nona, aes(x = Month, y = Ozone, fill = Month)) +
    geom_boxplot() +
    scale_fill_manual(values = c("#0e9cd1", "coral", "#7dc27d", "#c9a227", "grey60")) +
    theme_classic() +
    theme(legend.position = "none")

Phần chú thích đã được tắt ở đây vì trục x đã ghi tên từng tháng rồi, việc lặp lại sẽ lãng phí không gian.

Sắp xếp lại các hộp. Các cấp độ của yếu tố quyết định thứ tự trên trục. Vì Tháng được tạo ra như một yếu tố có thứ tự, nên nó đã được sắp xếp theo thứ tự thời gian. Đối với một yếu tố không có thứ tự, hãy sắp xếp theo giá trị trung vị:

ggplot(data_air_nona, aes(x = reorder(Month, Ozone, FUN = median), y = Ozone)) +
    geom_boxplot() +
    theme_classic()

Đang lưu biểu đồ. Hàm ggsave() ghi đồ thị cuối cùng vào ổ đĩa với độ phân giải do bạn kiểm soát:

ggsave("ozone_boxplot.png", width = 8, height = 5, dpi = 300)

Box Vẽ đồ thị trong R: Code Tài liệu tham khảo

Bảng dưới đây liệt kê lệnh gọi ggplot2 cho từng biến thể biểu đồ hộp đã đề cập ở trên:

Mục tiêu Code
Biểu đồ hộp cơ bản
ggplot(df, aes(x = x1, y = y)) + geom_boxplot()
Lật ngược hướng
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + coord_flip()
Biểu đồ hộp có khía
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(notch = TRUE)
Box vẽ đồ thị với các dấu chấm lộn xộn
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21))
Tô màu theo nhóm
ggplot(df, aes(x = x1, y = y, color = x1)) + geom_boxplot()
Nhiều nhóm cho mỗi danh mục
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(aes(fill = x2))
Cộng giá trị trung bình của nhóm
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + stat_summary(fun = mean, geom = "point")

Cũng kiểm tra:- Hướng dẫn R cho người mới bắt đầu: Học ngôn ngữ lập trình R

Câu Hỏi Thường Gặp

Các đường râu kéo dài đến điểm quan sát cực đoan nhất nằm trong phạm vi gấp 1.5 lần khoảng tứ phân vị của tứ phân vị gần nhất. Chúng không phải là giá trị nhỏ nhất và lớn nhất, và bất kỳ giá trị nào nằm ngoài chúng đều được vẽ như một điểm ngoại lệ.

Không phải tự động. Quy tắc IQR 1.5 chỉ là quy ước, không phải bằng chứng về sai số. Hãy điều tra từng điểm một trước: dữ liệu bị lệch như các chỉ số ozone thường tạo ra các giá trị cao, đó là những phép đo thực sự.

chồng chéoping Các vết khuyết cho thấy không có bằng chứng chắc chắn nào cho thấy hai đường trung vị khác nhau. Không chồng chéoping Các vạch khuyết biểu thị sự khác biệt thực sự có khả năng xảy ra, tương đương với phép so sánh có độ tin cậy khoảng 95%.

Box Biểu đồ là một bước thăm dò tiêu chuẩn trước khi huấn luyện: chúng giúp phát hiện sự lệch, các giá trị ngoại lệ và sự khác biệt về thang đo đặc trưng giữa các lớp. Các nhóm cũng sử dụng chúng để so sánh độ chính xác của mô hình giữa các tập dữ liệu kiểm định chéo.

Đúng vậy. Trợ lý AI có thể giải thích các lỗi như trục x liên tục tạo ra một ô duy nhất, đề xuất bản đồ aes() phù hợp.pingvà gắn cờ các đối số lỗi thời như fun.y. Luôn chạy lại mã đã sửa trên dữ liệu của riêng bạn.

Tóm tắt bài viết này với: