TÓM TẮT
- 1 1. Giới thiệu chung về biểu đồ boxplot
- 2 2. Các thành phần cấu thành một boxplot
- 3 3. Chuẩn bị dữ liệu
- 4 4. Vẽ boxplot trong Microsoft Excel
- 5 5. Vẽ boxplot bằng Python
- 6 6. Vẽ boxplot bằng R
- 7 7. So sánh các công cụ vẽ boxplot
- 8 8. Mẹo nâng cao để boxplot “đẹp” và “chuyên nghiệp”
- 9 9. Thực hành: Tạo báo cáo boxplot cho dự án thực tế
- 10 10. Kết luận
1. Giới thiệu chung về biểu đồ boxplot
Biểu đồ boxplot, còn được gọi là biểu đồ hộp, là một công cụ thống kê đồ họa mạnh mẽ, giúp người dùng nhanh chóng nắm bắt được phân phối của một tập dữ liệu. Nhờ vào việc hiển thị các thông số quan trọng như trung vị (median), các phần tư (quartiles), giá trị tối đa, tối thiểu và các điểm ngoại lệ (outliers), boxplot giúp chúng ta:
- So sánh phân phối giữa nhiều nhóm dữ liệu một cách trực quan.
- Phát hiện các giá trị bất thường, tức là các outlier.
- Đánh giá độ lệch (skewness) và độ phân tán (dispersion) của dữ liệu.
Trong các lĩnh vực như khoa học dữ liệu, tài chính, y tế, giáo dục hay nghiên cứu xã hội, boxplot luôn là một trong những biểu đồ được ưa chuộng vì tính ngắn gọn và thông tin phong phú mà nó truyền tải.
Bài viết này sẽ hướng dẫn chi tiết cách vẽ biểu đồ boxplot từ các bước chuẩn bị dữ liệu, lựa chọn công cụ (Excel, Python, R, SPSS, Stata…) cho tới cách tùy chỉnh nâng cao để biểu đồ vừa đẹp mắt, vừa truyền đạt đúng thông tin. Bạn sẽ được học:
- Các khái niệm cơ bản và cách tính các thành phần của boxplot.
- Cách vẽ boxplot trong Excel (phiên bản 2026 trở lên).
- Vẽ boxplot bằng Python (thư viện Matplotlib, Seaborn, Plotly).
- Vẽ boxplot bằng R (ggplot2, base R).
- Các mẹo tối ưu hoá, tùy chỉnh màu sắc, nhãn, và đánh dấu outlier.
- So sánh các công cụ và lựa chọn phù hợp cho từng trường hợp thực tế.
Hãy cùng nhau khám phá chi tiết từng bước trong phần tiếp theo.
2. Các thành phần cấu thành một boxplot
Trước khi thực hiện vẽ, chúng ta cần hiểu rõ các thành phần cấu thành một boxplot để không bị nhầm lẫn khi giải thích kết quả.
| Thành phần | Ý nghĩa | Cách tính |
|---|---|---|
| Min (giá trị tối thiểu không tính outlier) | Giá trị thấp nhất trong dữ liệu, ngoại trừ các outlier. | Thường là giá trị nhỏ nhất của dữ liệu sau khi loại bỏ outlier. |
| Q1 (25th percentile) | Phần tư thứ nhất, giá trị dưới đó có 25% dữ liệu. | Sắp xếp dữ liệu tăng dần, lấy giá trị tại vị trí 0.25 (n+1). |
| Median (Q2, 50th percentile) | Trung vị, chia dữ liệu thành hai nửa bằng nhau. | Giá trị nằm ở vị trí 0.5 (n+1). |
| Q3 (75th percentile) | Phần tư thứ ba, giá trị dưới đó có 75% dữ liệu. | Vị trí 0.75 (n+1). |
| Max (giá trị tối đa không tính outlier) | Giá trị cao nhất trong dữ liệu, ngoại trừ outlier. | Giá trị lớn nhất sau khi loại bỏ outlier. |
| IQR (Interquartile Range) | Khoảng cách giữa Q3 và Q1, thể hiện độ phân tán. | IQR = Q3 – Q1 |
| Whiskers (râu) | Độ dài râu thể hiện phạm vi dữ liệu không phải outlier. | Thông thường: min = Q1 – 1.5IQR, max = Q3 + 1.5IQR (các giá trị ngoài khoảng này được coi là outlier). |
| Outliers | Các giá trị nằm ngoài phạm vi whiskers, thường được đánh dấu bằng dấu chấm hoặc ký hiệu khác. | Giá trị < Q1 – 1.5IQR hoặc > Q3 + 1.5IQR |
2.1. Tại sao lại dùng 1.5IQR?
Hệ số 1.5 là một quy ước phổ biến trong thống kê để xác định outlier. Khi dữ liệu có phân phối gần chuẩn, khoảng 99.3% dữ liệu sẽ nằm trong khoảng Q1 – 1.5IQR và Q3 + 1.5IQR. Do đó, các giá trị nằm ngoài này thường được xem là bất thường. Tuy nhiên, tùy vào mục đích và đặc tính dữ liệu, người dùng có thể thay đổi hệ số này (ví dụ 3IQR cho dữ liệu có biến động cao).
3. Chuẩn bị dữ liệu

Có thể bạn quan tâm: Cách Vẽ Autocad Cơ Bản: Hướng Dẫn Từ A Đến Z Cho Người Mới Bắt Đầu
3.1. Định dạng dữ liệu
Để vẽ boxplot, dữ liệu cần được tổ chức thành cột (variables) và hàng (observations). Mỗi cột đại diện cho một biến hoặc một nhóm, ví dụ:
| ID | Nhóm | Giá trị |
|---|---|---|
| 1 | A | 12.3 |
| 2 | A | 15.6 |
| 3 | B | 8.9 |
| … | … | … |
Nếu bạn muốn vẽ nhiều box (so sánh giữa các nhóm), hãy đảm bảo có một cột nhóm để phân biệt.
3.2. Kiểm tra dữ liệu bị thiếu và lỗi
- Missing values: Xử lý bằng cách loại bỏ (drop) hoặc thay thế (impute) tùy vào bối cảnh.
- Giá trị không hợp lệ: Kiểm tra xem có giá trị âm trong trường hợp đo lường không âm không.
- Định dạng số: Đảm bảo các cột chứa số thực được định dạng đúng (không có ký tự thập phân sai locale).
3.3. Kiểm tra phân phối sơ bộ
Trước khi vẽ boxplot, nên thực hiện một số phân tích sơ bộ:
import pandas as pd
df.describe()
df.boxplot(column='Giá trị', by='Nhóm')
Kết quả describe() cho bạn nhanh các thống kê: mean, std, min, max, quartiles. Điều này giúp xác nhận tính đúng đắn của dữ liệu và phát hiện outlier sơ bộ.
4. Vẽ boxplot trong Microsoft Excel
Excel là công cụ phổ biến cho người dùng không chuyên lập trình. Dưới đây là hướng dẫn chi tiết cách vẽ boxplot trong Excel 2026 trở lên (các phiên bản mới hơn cũng tương tự).
4.1. Bước 1: Chuẩn bị dữ liệu
Giả sử bạn có dữ liệu trong Sheet1:
| Nhóm | Giá trị |
|---|---|
| A | 12.3 |
| A | 15.6 |
| A | 14.2 |
| B | 8.9 |
| B | 10.5 |
| B | 9.8 |
| … | … |
4.2. Bước 2: Chèn biểu đồ “Box & Whisker”

Có thể bạn quan tâm: Cách Vẽ Anime Đam Mỹ: Hướng Dẫn Từ Cơ Bản Đến Nâng Cao Cho Người Mới Bắt Đầu
- Chọn dữ liệu: Bôi đen cột “Giá trị” và cột “Nhóm”.
- Vào Insert → Insert Statistic Chart → Box and Whisker. (Nếu không thấy, có thể vào “All Charts” → “Statistical” → “Box and Whisker”).
- Excel sẽ tự động tạo boxplot cho mỗi nhóm.
4.3. Bước 3: Tùy chỉnh biểu đồ
- Thay đổi màu sắc: Click vào hộp (box), vào “Format Data Series”, chọn “Fill” để thay đổi màu.
- Hiển thị giá trị outlier: Mặc định Excel sẽ hiển thị outlier dưới dạng dấu chấm. Bạn có thể thay đổi kích thước bằng cách click vào outlier → “Format Data Point”.
- Thêm tiêu đề và nhãn trục: Click vào biểu đồ → “Chart Title” và “Axis Titles”.
- Hiển thị trung vị: Trên “Format Data Series”, chọn “Median line” để bật/tắt.
4.4. Bước 4: Lưu và xuất biểu đồ
- Copy: Bạn có thể copy biểu đồ sang PowerPoint hoặc Word.
- Lưu dưới dạng hình ảnh: Click chuột phải → “Save as Picture”.
4.5. Lưu ý khi dùng Excel
- Excel tự động tính whisker dựa trên 1.5IQR, nhưng không cho tùy chỉnh hệ số này.
- Đối với dữ liệu lớn (hơn 10,000 điểm), Excel có thể chậm và không hiển thị chính xác outlier. Trong trường hợp này, nên chuyển sang Python hoặc R.
5. Vẽ boxplot bằng Python
Python là ngôn ngữ mạnh mẽ cho phân tích dữ liệu. Thư viện Matplotlib, Seaborn, và Plotly cung cấp các hàm vẽ boxplot linh hoạt.
5.1. Cài đặt môi trường
pip install pandas matplotlib seaborn plotly
5.2. Dữ liệu mẫu
import pandas as pd
import numpy as np np.random.seed(42)
df = pd.DataFrame({ 'Nhóm': np.repeat('A', 'B', 'C', 100), 'Giá trị': np.concatenate( np.random.normal(15, 3, 100), # Nhóm A np.random.normal(10, 2, 100), # Nhóm B np.random.normal(20, 5, 100) # Nhóm C )
})
5.3. Vẽ boxplot với Matplotlib
import matplotlib.pyplot as plt fig, ax = plt.subplots(figsize=(8,6))
df.boxplot(column='Giá trị', by='Nhóm', ax=ax, grid=False, boxprops=dict(facecolor='lightblue', color='navy'), medianprops=dict(color='red'), whiskerprops=dict(color='navy'), capprops=dict(color='navy'), flierprops=dict(marker='o', color='orange', alpha=0.5))
ax.set_title('Boxplot các Nhóm')
ax.set_xlabel('Nhóm')
ax.set_ylabel('Giá trị')
plt.suptitle('') # Loại bỏ tiêu đề mặc định
plt.show()
Giải thích các tham số
boxprops: định dạng hộp (màu nền, viền).medianprops: màu và độ dày đường trung vị.whiskerpropsvàcapprops: màu râu và đầu râu.flierprops: định dạng outlier (dấu chấm).
5.4. Vẽ boxplot với Seaborn (đẹp hơn)

Có thể bạn quan tâm: Cách Vẽ Anime Trên Paint: Hướng Dẫn Từng Bước Cho Người Mới Bắt Đầu
import seaborn as sns plt.figure(figsize=(9,6))
sns.boxplot(x='Nhóm', y='Giá trị', data=df, palette='Pastel1', width=0.6, fliersize=5, linewidth=1.5, medianprops={'color':'black', 'linewidth':2}, whiskerprops={'linestyle':'--', 'color':'gray'})
plt.title('Boxplot So Sánh Các Nhóm (Seaborn)')
plt.show()
Seaborn tự động tính IQR và outlier, đồng thời hỗ trợ hue để phân chia theo một biến thứ hai.
5.5. Boxplot tương tác với Plotly
Plotly cho phép tạo biểu đồ tương tác trên web.
import plotly.express as px fig = px.box(df, x='Nhóm', y='Giá trị', points='outliers', # hiển thị outlier title='Boxplot tương tác (Plotly)', color='Nhóm', hover_data='Giá trị')
fig.show()
Bạn có thể zoom, hover để xem giá trị chi tiết, rất hữu ích cho báo cáo web.
5.6. Tùy chỉnh hệ số IQR trong Python
Nếu muốn thay đổi hệ số (ví dụ 2IQR), bạn cần tính thủ công:
def custom_boxplot(ax, data, group, factor=1.5, kwargs): q1 = np.percentile(data, 25) q3 = np.percentile(data, 75) iqr = q3 - q1 lower = q1 - factoriqr upper = q3 + factoriqr # Vẽ hộp và râu bằng Matplotlib ax.boxplot(data, whis=lower, upper, kwargs) # Ví dụ:
fig, ax = plt.subplots()
custom_boxplot(ax, dfdf'Nhóm'=='A''Giá trị', 'A', factor=2.0)
ax.set_title('Boxplot với hệ số IQR = 2.0')
plt.show()
6. Vẽ boxplot bằng R
R là ngôn ngữ thống kê truyền thống, với ggplot2 là thư viện mạnh mẽ nhất để tạo biểu đồ.
6.1. Cài đặt gói
install.packages(c("ggplot2", "dplyr"))
library(ggplot2)
library(dplyr)
6.2. Dữ liệu mẫu
set.seed(42)
df <- data.frame( Nhóm = rep(c("A","B","C"), each=100), Giá_trị = c(rnorm(100, 15, 3), rnorm(100, 10, 2), rnorm(100, 20, 5))
)
6.3. Boxplot cơ bản với ggplot2
ggplot(df, aes(x=Nhóm, y=Giá_trị, fill=Nhóm)) + geom_boxplot(outlier.colour = "red", outlier.shape = 16, outlier.size = 2, notch = FALSE) + # notch = TRUE để hiển thị notch labs(title="Boxplot So Sánh Các Nhóm", x="Nhóm", y="Giá trị") + theme_minimal() + scale_fill_brewer(palette="Pastel1")
6.4. Thêm notch để kiểm tra sự khác nhau giữa median
Notch (vết nứt) thể hiện khoảng tin cậy 95% cho median. Khi các notch không chồng lên nhau, chúng ta có thể khẳng định median của các nhóm khác nhau một cách có ý nghĩa thống kê.
ggplot(df, aes(x=Nhóm, y=Giá_trị, fill=Nhóm)) + geom_boxplot(notch=TRUE, outlier.colour="darkred") + labs(title="Boxplot với Notch (Kiểm tra Median)", x="Nhóm", y="Giá trị") + theme_classic()
6.5. Tùy chỉnh whisker (hệ số IQR)

Có thể bạn quan tâm: Cách Vẽ Anime Trên Ibispaint: Hướng Dẫn Từ Cơ Bản Đến Nâng Cao
Trong ggplot2, coef là tham số điều chỉnh hệ số IQR (mặc định 1.5).
ggplot(df, aes(x=Nhóm, y=Giá_trị, fill=Nhóm)) + geom_boxplot(coef = 2.0, outlier.colour="blue") + # 2IQR labs(title="Boxplot với hệ số IQR = 2.0", x="Nhóm", y="Giá trị") + theme_light()
6.6. Vẽ boxplot cho dữ liệu nhóm phụ (hue)
Nếu muốn so sánh theo hai biến, dùng facet_wrap hoặc fill:
df$Giới_tính <- sample(c("Nam","Nữ"), 300, replace=TRUE) ggplot(df, aes(x=Nhóm, y=Giá_trị, fill=Giới_tính)) + geom_boxplot(outlier.shape=NA) + # Ẩn outlier để làm sạch facet_wrap(~Giới_tính) + labs(title="Boxplot theo Nhóm và Giới tính", x="Nhóm", y="Giá trị") + theme_bw()
7. So sánh các công cụ vẽ boxplot
| Tiêu chí | Excel | Python (Matplotlib/Seaborn/Plotly) | R (ggplot2) | SPSS / Stata |
|---|---|---|---|---|
| Độ dễ sử dụng | Rất cao (giao diện kéo thả) | Trung bình (cần viết code, nhưng linh hoạt) | Trung bình – cao (cú pháp ggplot2 ngắn gọn) | Cao (menu thống kê) |
| Tùy chỉnh | Hạn chế (không thay đổi hệ số IQR) | Rất linh hoạt, hỗ trợ tương tác (Plotly) | Linh hoạt, hỗ trợ notch, theme đa dạng | Trung bình |
| Xử lý dữ liệu lớn | Không tốt (>10k) | Tốt, xử lý hàng triệu dòng | Tốt, nhưng phụ thuộc vào RAM | Tốt |
| Khả năng xuất báo cáo | Dễ dàng chèn vào Office | Có thể xuất PNG, SVG, HTML, Jupyter | Export PDF, PNG, LaTeX | Export PDF, PPT |
| Chi phí | Thuê bản Office | Miễn phí (open-source) | Miễn phí (open-source) | Thuê bản SPSS/ Stata |
Kết luận:
– Nếu bạn chỉ cần một biểu đồ nhanh, không yêu cầu tùy chỉnh sâu, Excel là lựa chọn nhanh nhất.
– Đối với phân tích chuyên sâu, cần tùy biến, hoặc làm báo cáo tự động, Python và R là hai công cụ mạnh mẽ nhất.
– Nếu bạn đã quen với SPSS hoặc Stata trong môi trường nghiên cứu xã hội, chúng cũng cung cấp chức năng boxplot nhanh chóng.
8. Mẹo nâng cao để boxplot “đẹp” và “chuyên nghiệp”
-
Thêm nhãn giá trị trung vị
python medians = df.groupby('Nhóm')'Giá trị'.median() for i, median in enumerate(medians): ax.text(i+1, median, f'{median:.2f}', ha='center', va='bottom', color='black') -
Kết hợp violin plot và boxplot
Violin plot hiển thị mật độ, còn boxplot cung cấp thống kê cơ bản.
python sns.violinplot(x='Nhóm', y='Giá trị', data=df, inner=None, color=".8") sns.boxplot(x='Nhóm', y='Giá trị', data=df, width=0.2) -
Sử dụng màu sắc thống nhất với thương hiệu
Đặt palette bằng mã HEX để đồng nhất màu thương hiệu. -
Hiển thị số lượng quan sát (n) trên mỗi box
python counts = df'Nhóm'.value_counts().sort_index() ax.set_xticklabels(f'{g}\n(n={countsg})' for g in counts.index) -
Làm sạch outlier nếu cần
Đôi khi outlier là lỗi nhập liệu, bạn có thể loại bỏ trước khi vẽ:
python Q1 = df'Giá trị'.quantile(0.25) Q3 = df'Giá trị'.quantile(0.75) IQR = Q3 - Q1 df_clean = df~((df'Giá trị' < (Q1 - 1.5IQR)) | (df'Giá trị' > (Q3 + 1.5IQR))) -
Thêm đường tham chiếu (reference line)
Nếu có giá trị chuẩn (benchmark), dùngax.axhline(y=benchmark, linestyle='--', color='red'). -
Tạo báo cáo PDF tự động
- Python:
matplotlib.backends.backend_pdf.PdfPages. - R:
ggsave("boxplot.pdf", width=8, height=6).
9. Thực hành: Tạo báo cáo boxplot cho dự án thực tế
Giả sử bạn là nhà phân tích dữ liệu trong một công ty bán lẻ, muốn so sánh doanh thu trung bình của ba khu vực (Miền Bắc, Miền Trung, Miền Nam) trong năm 2026.

9.1. Thu thập dữ liệu
| Khu_vực | Doanh_thu |
|---|---|
| Bắc | 120, 135, 150, … |
| Trung | 95, 100, 110, … |
| Nam | 200, 210, 190, … |
9.2. Xử lý và vẽ boxplot bằng Python
import pandas as pd, seaborn as sns, matplotlib.pyplot as plt # Đọc dữ liệu CSV
df = pd.read_csv('doanhthu_2023.csv') # Kiểm tra missing
df.dropna(inplace=True) # Vẽ boxplot
plt.figure(figsize=(10,6))
sns.boxplot(x='Khu_vực', y='Doanh_thu', data=df, palette='Set2', notch=True, # hiển thị notch flierprops=dict(marker='o', color='red', alpha=0.6))
plt.title('So sánh Doanh thu các Khu vực (2026)')
plt.xlabel('Khu vực')
plt.ylabel('Doanh thu (nghìn USD)') # Thêm đường trung vị
medians = df.groupby('Khu_vực')'Doanh_thu'.median()
for i, median in enumerate(medians): plt.text(i, median+5, f'{median:.0f}', ha='center', color='black') plt.show()
9.3. Đánh giá kết quả
- Khu vực Nam có median cao nhất (~200k), phân tán rộng (IQR lớn) – cho thấy doanh thu không ổn định.
- Khu vực Bắc có median trung bình, whisker dưới (Q1 – 1.5IQR) khá cao, thể hiện ít outlier thấp.
- Khu vực Trung có phạm vi hẹp, ít outlier, cho thấy doanh thu ổn định nhưng thấp hơn.
Những thông tin này giúp ban giám đốc quyết định tập trung nguồn lực marketing vào khu vực Nam để giảm biến động, hoặc tìm nguyên nhân gây outlier (có thể là chiến dịch khuyến mãi đặc biệt).
10. Kết luận
Biểu đồ boxplot không chỉ là một công cụ trực quan mà còn chứa đựng rất nhiều thông tin thống kê quan trọng. Việc hiểu đúng các thành phần (min, Q1, median, Q3, max, IQR, outlier) giúp bạn giải thích dữ liệu một cách chính xác. Từ Excel cho người mới bắt đầu đến Python và R cho nhà phân tích chuyên sâu, mỗi công cụ có ưu nhược điểm riêng, và lựa chọn phụ thuộc vào:
- Mức độ phức tạp của dự án.
- Khối lượng dữ liệu cần xử lý.
- Yêu cầu tùy chỉnh (màu sắc, notch, hệ số IQR…).
- Môi trường làm việc (Office, Jupyter, RStudio…).
Hy vọng qua bài viết này, bạn đã nắm vững cách vẽ boxplot từ chuẩn bị dữ liệu, tính toán thống kê, tới thực hiện trên các phần mềm phổ biến, đồng thời biết cách tùy chỉnh để tạo ra các biểu đồ vừa đẹp mắt, vừa truyền tải đúng thông tin. Hãy áp dụng những kiến thức này vào công việc thực tế và khám phá thêm nhiều cách sáng tạo khác cho biểu đồ boxplot của bạn!
Chúc bạn thành công trong việc trực quan hoá dữ liệu và đưa ra quyết định dựa trên thống kê!
