TÓM TẮT
- 1 Mở Đầu
- 2 1. Histogram Là Gì? Kiến Thức Cơ Bản
- 3 2. Chuẩn Bị Dữ Liệu Trước Khi Vẽ Histogram
- 4 3. Vẽ Histogram Bằng Các Công Cụ Phổ Biến
- 5 4. Thiết Kế Histogram Chuẩn – Các Lưu Ý Quan Trọng
- 6 5. Phân Tích Kết Quả Từ Histogram
- 7 6. Các Loại Histogram Nâng Cao
- 8 7. Thực Hành: Dự Án Mini – Phân Tích Doanh Thu Bán Hàng
- 9 8. Những Sai Lầm Thường Gặp Khi Vẽ Histogram
- 10 9. Tối Ưu Hoá Hiệu Suất Khi Vẽ Histogram Với Dữ Liệu Lớn
- 11 10. Kết Luận
Mở Đầu
Trong thế giới phân tích dữ liệu, biểu đồ histogram (biểu đồ tần suất) là một công cụ quan trọng giúp chúng ta hiểu sâu hơn về phân phối của một biến số. Khi làm việc với dữ liệu thực tế, việc tạo và giải thích histogram không chỉ giúp phát hiện các xu hướng, bất thường mà còn hỗ trợ quyết định các bước xử lý dữ liệu tiếp theo như chuẩn hoá, biến đổi hoặc xây dựng mô hình. Bài viết này sẽ cung cấp cho bạn một hướng dẫn toàn diện, chi tiết về cách vẽ biểu đồ histogram, bao gồm:
- Kiến thức nền tảng về histogram và các thành phần cơ bản.
- Các bước chuẩn bị dữ liệu và lựa chọn công cụ (Excel, Python, R, Power BI, Tableau…).
- Hướng dẫn cụ thể vẽ histogram trong từng công cụ, kèm ví dụ thực tế.
- Các lưu ý quan trọng khi thiết kế histogram: số lượng bin, độ rộng bin, cách xử lý ngoại lệ, màu sắc và nhãn.
- Phân tích và giải thích kết quả, cách rút ra insights từ histogram.
- Một số trường hợp nâng cao: histogram 2D, stacked histogram, cumulative histogram, và việc kết hợp với các biểu đồ khác.
Sau khi đọc xong, bạn sẽ có khả năng tự tin tạo ra các histogram chuyên nghiệp, hiệu quả và phù hợp với nhu cầu phân tích dữ liệu của mình.
1. Histogram Là Gì? Kiến Thức Cơ Bản
1.1 Định Nghĩa
Histogram là một loại biểu đồ thanh dùng để biểu diễn phân phối tần suất (hoặc tỷ lệ) của một tập hợp dữ liệu liên tục hoặc rời rạc. Các thanh (bars) trong histogram đại diện cho các bin (cũng gọi là khoảng, lớp), mỗi bin chứa một số lượng quan sát (frequency) hoặc tần suất (relative frequency) nằm trong khoảng giá trị tương ứng.
1.2 Thành Phần Của Histogram
| Thành phần | Mô tả |
|---|---|
| Axis X (trục hoành) | Thường là các khoảng giá trị (bins). |
| Axis Y (trục tung) | Thể hiện số lượng quan sát (frequency) hoặc tần suất (density). |
| Bars (các thanh) | Độ rộng = độ rộng bin, chiều cao = tần suất. |
| Labels (nhãn) | Nhãn trục, tiêu đề, chú giải (legend) nếu cần. |
| Grid (lưới) | Giúp đọc giá trị dễ dàng hơn (tùy chọn). |
1.3 Khi Nào Nên Dùng Histogram?
- Khi bạn muốn kiểm tra phân phối một biến số (đối xứng, lệch trái/phải, đa đỉnh…).
- Khi cần xác định outliers (giá trị ngoại lệ) và range (phạm vi) dữ liệu.
- Khi muốn đánh giá tính chuẩn hoá (normality) trước khi áp dụng các mô hình thống kê.
- Khi làm so sánh giữa các nhóm (sử dụng stacked hay side‑by‑side histogram).
2. Chuẩn Bị Dữ Liệu Trước Khi Vẽ Histogram

Có thể bạn quan tâm: Cách Nuôi Ong Vò Vẽ Hiệu Quả: Hướng Dẫn Từng Bước Cho Người Mới Bắt Đầu
2.1 Làm Sạch Dữ Liệu (Data Cleaning)
- Xóa hoặc xử lý missing values (NaN). Có thể:
- Loại bỏ các dòng chứa NaN (
df.dropna()trong Python). -
Thay thế bằng giá trị trung bình/median (
df.fillna(df.mean())). -
Kiểm tra outliers:
- Dùng boxplot hoặc z‑score để phát hiện.
-
Quyết định giữ lại hay loại bỏ tùy vào mục tiêu phân tích.
-
Kiểm tra kiểu dữ liệu:
- Đảm bảo biến cần vẽ là numeric (float, int). Nếu là string, cần chuyển đổi hoặc mã hoá.
2.2 Lựa Chọn Số Lượng Bin (Number of Bins)
Số lượng bin ảnh hưởng mạnh đến cách nhìn nhận dữ liệu. Quá ít bin sẽ làm mất chi tiết; quá nhiều bin sẽ tạo ra nhiễu.
Các quy tắc phổ biến:
| Quy tắc | Công thức | Ghi chú |
|---|---|---|
| Sturges | k = ⌈log₂(n) + 1⌉ |
Thích hợp cho dữ liệu gần chuẩn, n ≤ 200. |
| Rice | k = ⌈2 n^(1/3)⌉ |
Đơn giản, thường cho dữ liệu lớn. |
| Scott | bin_width = 3.5 σ / n^(1/3) |
Dựa vào độ lệch chuẩn (σ). |
| Freedman‑Diaconis | bin_width = 2 IQR / n^(1/3) |
Ít nhạy với outliers, dùng IQR (inter‑quartile range). |
Trong thực tế, bạn có thể thử nhiều giá trị và chọn cái “trông ổn nhất”, hoặc để công cụ tự động quyết định (như seaborn.histplot trong Python).
2.3 Định Dạng Dữ Liệu
- Sắp xếp: Không bắt buộc nhưng giúp kiểm tra nhanh.
- Chuẩn hoá (nếu cần): Khi so sánh các biến có đơn vị khác nhau, có thể chuẩn hoá về z‑score (
(x-mean)/std) hoặc min‑max.
3. Vẽ Histogram Bằng Các Công Cụ Phổ Biến
3.1 Excel
Bước 1: Chuẩn Bị Dữ Liệu
- Nhập dữ liệu vào một cột (ví dụ cột A).
Bước 2: Tạo Bin
- Tạo một cột mới (cột B) liệt kê các giá trị giới hạn trên của mỗi bin (ví dụ 0, 10, 20, …).
Bước 3: Dùng Công Cụ “Histogram” (Analysis ToolPak)
- Vào Data → Data Analysis → Histogram.
- Input Range: chọn cột dữ liệu.
- Bin Range: chọn cột bin.
- Output Range: nơi muốn hiển thị.
- Tick Chart Output → OK.
Bước 4: Định Dạng Biểu Đồ
- Thay đổi màu thanh, thêm nhãn trục, tiêu đề.
- Nếu muốn hiển thị tần suất, click chuột phải → Format Axis → Number → chọn “Percentage”.
Mẹo:
- Excel 2026 trở lên có biểu đồ “Histogram” trong Insert → Chart → Statistical → Histogram. Khi dùng, Excel tự tính bin, nhưng bạn có thể chỉnh trong Format Axis → Bin width.
3.2 Python (Matplotlib, Seaborn, Plotly)

Có thể bạn quan tâm: Vẽ Cách Điệu Là Gì? – Khám Phá Nghệ Thuật Biểu Đạt Cảm Xúc Qua Các Đường Nét
3.2.1 Sử Dụng Matplotlib
import matplotlib.pyplot as plt
import numpy as np # Dữ liệu mẫu
np.random.seed(0)
data = np.random.normal(loc=50, scale=15, size=1000) # Vẽ histogram
plt.figure(figsize=(10,6))
n, bins, patches = plt.hist(data, bins='auto', edgecolor='black', color='skyblue')
plt.title('Histogram của Dữ Liệu')
plt.xlabel('Giá trị')
plt.ylabel('Tần suất')
plt.grid(True, linestyle='--', alpha=0.7)
plt.show()
bins='auto'để Python tự chọn số bin (dựa trên thuật toán Freedman‑Diaconis).edgecolorđể làm rõ ranh giới thanh.
3.2.2 Sử Dụng Seaborn
import seaborn as sns
import matplotlib.pyplot as plt sns.set(style="whitegrid")
plt.figure(figsize=(10,6))
sns.histplot(data, bins=30, kde=True, color='salmon')
plt.title('Histogram với KDE')
plt.xlabel('Giá trị')
plt.ylabel('Tần suất')
plt.show()
kde=Truethêm đường mật độ (Kernel Density Estimate) giúp nhìn thấy hình dạng phân phối mượt hơn.
3.2.3 Sử Dụng Plotly (Interactive)
import plotly.express as px
import pandas as pd df = pd.DataFrame({'value': data})
fig = px.histogram(df, x='value', nbins=30, title='Histogram Interactive', labels={'value':'Giá trị'}, opacity=0.75)
fig.update_traces(marker_color='indianred')
fig.show()
- Plotly cho phép zoom, hover để xem số lượng từng bin.
3.3 R (ggplot2)
library(ggplot2) set.seed(0)
data <- rnorm(1000, mean=50, sd=15) ggplot(data.frame(x=data), aes(x=x)) + geom_histogram(bins=30, fill="steelblue", color="black", alpha=0.7) + labs(title="Histogram trong R", x="Giá trị", y="Tần suất") + theme_minimal()
- Thay
binsbằngbinwidthnếu muốn kiểm soát độ rộng bin.
3.4 Power BI
- Import dữ liệu vào Power BI Desktop.
- Kéo trường số vào Values, chọn Histogram trong Visualizations (có thể cần tải custom visual “Histogram” từ AppSource).
- Trong Format, tùy chỉnh:
- Bins: tự động hoặc tùy chỉnh số lượng.
- Data colors, Title, Axis.
3.5 Tableau
- Kết nối dữ liệu.
- Kéo trường số vào Columns, sau đó Show Me → Histogram.
- Tableau sẽ tự tạo bins; để chỉnh:
- Click chuột phải trên trường bin → Edit → thay đổi Size of Bins.
- Thêm Color, Label để làm nổi bật.
4. Thiết Kế Histogram Chuẩn – Các Lưu Ý Quan Trọng
4.1 Lựa Chọn Độ Rộng Bin (Bin Width)
- Quá rộng: mất chi tiết, có thể che dấu đa đỉnh.
- Quá hẹp: nhiễu, khó nhận dạng xu hướng chính.
- Thử nghiệm với ít nhất 3‑4 độ rộng khác nhau và so sánh.
4.2 Định Dạng Trục Y
- Frequency (số lượng) – phù hợp khi tổng quan số quan sát.
- Relative Frequency (tần suất) – dùng khi muốn so sánh các tập dữ liệu có kích thước khác nhau.
- Density – khi muốn diện tích dưới đường biểu đồ bằng 1 (thường dùng kèm KDE).
4.3 Màu Sắc và Độ Trong Suốt
- Màu đơn sắc giúp tập trung vào hình dạng.
- Màu gradient (đặc biệt trong stacked hoặc grouped histogram) để phân biệt nhóm.
- Opacity (độ trong suốt) > 0.5 khi chồng các histogram để xem phần giao nhau.
4.4 Nhãn và Tiêu Đề

Có thể bạn quan tâm: Cách Đọc Bản Vẽ Nhà: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
- Tiêu đề ngắn gọn, mô tả biến và mục đích.
- Nhãn trục: bao gồm đơn vị (ví dụ “kg”, “đô la”).
- Tooltip (trong interactive chart) hiển thị số lượng chính xác, %.
4.5 Grid và Tick Marks
- Gridline nhẹ (độ trong suốt 0.2‑0.3) giúp đọc giá trị.
- Tick marks nên đặt ở vị trí bin để tránh nhầm lẫn.
4.6 Xử Lý Outliers
- Cắt (censor) các giá trị ngoài phạm vi bin (ví dụ “> 100”).
- Hoặc tạo bin đặc biệt cho outliers (ví dụ “> 100” riêng một thanh).
5. Phân Tích Kết Quả Từ Histogram
5.1 Đọc Được Độ Dốc và Độ Lệch
- Đối xứng (symmetrical): histogram gần như đối xứng quanh trung vị.
- Lệch trái (negatively skewed): đuôi kéo về bên trái, phần lớn dữ liệu tập trung ở bên phải.
- Lệch phải (positively skewed): ngược lại.
5.2 Kiểm Tra Đa Đỉnh (Multimodality)
- Unimodal: một đỉnh – thường gợi ý một quá trình sinh dữ liệu duy nhất.
- Bimodal / Multimodal: nhiều đỉnh – có thể là kết hợp của các nhóm (cluster) khác nhau.
5.3 Xác Định Outliers
- Các thanh biệt lập ở các đầu, hoặc khoảng trống lớn giữa các thanh, thường là dấu hiệu của outlier.
5.4 So Sánh Nhiều Nhóm
- Stacked histogram: hiển thị tỷ lệ phần trăm của từng nhóm trong mỗi bin.
- Side‑by‑side histogram: mỗi nhóm có một thanh riêng, giúp so sánh trực tiếp.
5.5 Kết Hợp Với Các Biểu Đồ Khác

Có thể bạn quan tâm: Cách Đọc Bản Vẽ Lắp: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
- Histogram + Boxplot: boxplot trên cùng trục X giúp nhìn rõ quartile và outlier.
- Histogram + KDE: đường KDE mượt giúp nhận diện hình dạng chung.
- Histogram + Scatter: khi muốn xem mối quan hệ biến số khác với phân phối.
6. Các Loại Histogram Nâng Cao
6.1 Stacked Histogram
import seaborn as sns
import pandas as pd df = pd.DataFrame({ 'value': np.concatenate(np.random.normal(30,5,500), np.random.normal(70,10,500)), 'group': 'A'500 + 'B'500
}) sns.histplot(data=df, x='value', hue='group', multiple='stack', bins=30)
plt.title('Stacked Histogram')
plt.show()
multiple='stack'trong seaborn.
6.2 Side‑by‑Side (Dodge) Histogram
sns.histplot(data=df, x='value', hue='group', multiple='dodge', bins=30)
- Dùng khi muốn so sánh số lượng mỗi nhóm trong cùng một bin.
6.3 Cumulative Histogram
plt.hist(data, bins=30, cumulative=True, color='teal', edgecolor='black')
plt.title('Cumulative Histogram')
plt.xlabel('Giá trị')
plt.ylabel('Tổng tần suất')
- Thể hiện tổng số quan sát ≤ giá trị trên trục X. Thích hợp để kiểm tra phân phối tích lũy.
6.4 2D Histogram (Heatmap)
x = np.random.normal(0,1,5000)
y = np.random.normal(0,1,5000) plt.hist2d(x, y, bins=40, cmap='Blues')
plt.colorbar(label='Count')
plt.title('2D Histogram')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
- Dùng để quan sát mối quan hệ đồng thời của hai biến liên tục.
6.5 Histogram Với Weighted Data
Khi mỗi quan sát có trọng số (weight).
weights = np.random.rand(1000)
plt.hist(data, bins=30, weights=weights, color='orange')
- Thường dùng trong khảo sát mẫu có trọng số.
7. Thực Hành: Dự Án Mini – Phân Tích Doanh Thu Bán Hàng
7.1 Mô Tả Dữ Liệu

- Dataset:
sales.csvgồm các cộtOrderID,Date,Revenue,Region. - Mục tiêu: Kiểm tra phân phối doanh thu (
Revenue) và so sánh giữa các khu vực (Region).
7.2 Các Bước Thực Hiện (Python)
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns # Đọc dữ liệu
df = pd.read_csv('sales.csv') # Kiểm tra missing values
print(df'Revenue'.isna().sum()) # Loại bỏ hoặc thay thế missing
df = df.dropna(subset='Revenue') # Histogram toàn bộ doanh thu
plt.figure(figsize=(12,5))
sns.histplot(df'Revenue', bins=25, kde=True, color='steelblue')
plt.title('Phân phối Doanh Thu Tổng')
plt.xlabel('Doanh Thu (USD)')
plt.ylabel('Số lượng')
plt.show() # So sánh theo Region (stacked)
plt.figure(figsize=(12,5))
sns.histplot(data=df, x='Revenue', hue='Region', multiple='stack', bins=25)
plt.title('Doanh Thu Theo Khu Vực (Stacked)')
plt.xlabel('Doanh Thu (USD)')
plt.ylabel('Số lượng')
plt.show() # Kiểm tra outliers
q1 = df'Revenue'.quantile(0.25)
q3 = df'Revenue'.quantile(0.75)
iqr = q3 - q1
lower = q1 - 1.5iqr
upper = q3 + 1.5iqr
outliers = df(df'Revenue' < lower) | (df'Revenue' > upper)
print(f"Số outliers: {outliers.shape0}")
7.3 Kết Quả & Insights
- Phân phối chung: Đường KDE cho thấy doanh thu lệch phải, một số giao dịch lớn kéo dài tail.
- Khu vực: Region A chiếm phần lớn các giao dịch thấp, trong khi Region B có nhiều giao dịch cao hơn, thể hiện qua thanh màu đỏ ở phần tail.
- Outliers: Phát hiện 12 giao dịch > 1 triệu USD, có thể là các hợp đồng đặc biệt cần xem xét riêng.
8. Những Sai Lầm Thường Gặp Khi Vẽ Histogram
| Sai lầm | Hậu quả | Cách khắc phục |
|---|---|---|
| Dùng số bin cố định cho mọi dataset | Mất chi tiết hoặc tạo nhiễu | Tính số bin dựa trên quy tắc (Sturges, Freedman‑Diaconis) hoặc thử nhiều giá trị. |
| Không xử lý outliers | Đẩy tail quá dài, làm méo hình dạng | Loại bỏ hoặc tạo bin riêng cho outliers. |
| Không đồng nhất độ rộng bin (trong một histogram) | Gây hiểu lầm về tần suất | Đảm bảo độ rộng bin đồng nhất, hoặc nếu dùng variable bin, giải thích rõ. |
| Không gắn nhãn trục | Người xem không biết đơn vị, giá trị | Luôn thêm nhãn trục X/Y và tiêu đề. |
| Sử dụng màu quá sáng hoặc quá tối | Khó đọc, gây mỏi mắt | Chọn palette trung tính, kiểm tra độ tương phản. |
| Quên hiển thị tần suất khi so sánh các nhóm có kích thước khác nhau | So sánh sai lệch | Dùng relative frequency hoặc normalized histogram. |
9. Tối Ưu Hoá Hiệu Suất Khi Vẽ Histogram Với Dữ Liệu Lớn
- Sampling: Lấy mẫu ngẫu nhiên (ví dụ 10% dữ liệu) để vẽ nhanh, sau đó kiểm chứng với toàn bộ.
- Histogram Approximation: Sử dụng thuật toán streaming (tức là
numpy.histogramvớibinstính toán nhanh) hoặc thư viện nhưdatashadercho hàng triệu điểm. - GPU Acceleration: Plotly với WebGL (
px.histogram(..., histfunc='count',)) để render nhanh.
10. Kết Luận
Histogram là một công cụ mạnh mẽ, đơn giản nhưng lại chứa đựng rất nhiều thông tin về phân phối dữ liệu. Việc hiểu đúng cách chọn bin, định dạng biểu đồ và giải thích kết quả sẽ giúp bạn rút ra những insights giá trị, hỗ trợ quyết định kinh doanh, nghiên cứu hay phát triển mô hình học máy.
Trong bài viết này, chúng ta đã:
- Nắm vững khái niệm và thành phần của histogram.
- Chuẩn bị dữ liệu một cách khoa học, lựa chọn số bin phù hợp.
- Thực hành vẽ histogram trên các nền tảng phổ biến: Excel, Python, R, Power BI, Tableau.
- Thiết kế biểu đồ chuẩn, chú ý tới màu sắc, nhãn, độ rộng bin và xử lý outlier.
- Phân tích kết quả, nhận diện skewness, multimodality và outliers.
- Khám phá các dạng histogram nâng cao như stacked, cumulative, 2D và weighted.
- Áp dụng vào một dự án thực tế – phân tích doanh thu bán hàng.
- Tránh những sai lầm thường gặp và tối ưu hoá khi làm việc với dữ liệu lớn.
Với kiến thức và các ví dụ thực hành này, bạn hoàn toàn có thể tự tin tạo ra những histogram chuyên nghiệp, chuẩn xác và truyền tải thông tin một cách hiệu quả. Hãy bắt tay vào thực hành ngay hôm nay, khám phá những câu chuyện ẩn sau dữ liệu của bạn!
