TÓM TẮT
- 1 Mở đầu
- 2 1. Khi Nào Nên Sử Dụng Biểu Đồ Cột Ngang?
- 3 2. Nguyên Tắc Thiết Kế Cơ Bản
- 4 3. Hướng Dẫn Từng Bước Trong Các Công Cụ Phổ Biến
- 5 4. Các Lỗi Thường Gặp Và Cách Khắc Phục
- 6 5. Thực Hành: Tạo Biểu Đồ Cột Ngang Cho Dữ Liệu Thực Tế
- 7 6. Tối Ưu Hóa Cho Báo Cáo Và Bài Thuyết Trình
- 8 7. Các Ứng Dụng Thực Tiễn
- 9 8. Tài Nguyên Tham Khảo Và Học Thêm
- 10 9. Kết luận
Mở đầu
Biểu đồ cột ngang (horizontal bar chart) là một trong những công cụ trực quan hoá dữ liệu mạnh mẽ và linh hoạt, giúp người dùng so sánh các giá trị một cách nhanh chóng và dễ hiểu. Khác với biểu đồ cột dọc truyền thống, biểu đồ cột ngang đặt trục giá trị (axis) theo chiều ngang, trong khi các danh mục (category) được xếp dọc. Điều này mang lại một số lợi thế đáng kể, đặc biệt khi làm việc với tập dữ liệu có nhiều danh mục hoặc các nhãn danh mục dài, giúp tránh hiện tượng “cắt ngắn” nhãn và cải thiện khả năng đọc.
Bài viết này sẽ cung cấp cho bạn một hướng dẫn chi tiết, từ những kiến thức cơ bản nhất đến các kỹ thuật nâng cao, giúp bạn tự tin tạo và tùy chỉnh biểu đồ cột ngang trong các công cụ phổ biến như Microsoft Excel, Google Sheets, Python (matplotlib, seaborn, plotly), R (ggplot2) và thậm chí là trong môi trường web bằng JavaScript (Chart.js, D3.js). Ngoài ra, chúng tôi sẽ chia sẻ các lưu ý quan trọng về việc lựa chọn màu sắc, sắp xếp dữ liệu, và cách trình bày biểu đồ sao cho chuyên nghiệp và thuyết phục.
1. Khi Nào Nên Sử Dụng Biểu Đồ Cột Ngang?
1.1. Dữ liệu có nhiều danh mục
Nếu bạn có hơn 5–7 danh mục, việc sử dụng biểu đồ cột dọc sẽ khiến các nhãn trên trục X trở nên chồng chập và khó đọc. Biểu đồ cột ngang cho phép nhãn danh mục được đặt dọc theo trục Y, giúp người xem dễ dàng đọc và so sánh.
1.2. Danh mục có nhãn dài

Có thể bạn quan tâm: Cách Vẽ Biểu Đồ Cơ Cấu: Hướng Dẫn Chi Tiết Từ A Đến Z
Khi các nhãn danh mục chứa nhiều từ hoặc thông tin chi tiết (ví dụ: tên sản phẩm, địa chỉ, mô tả), biểu đồ cột ngang sẽ cho phép hiển thị đầy đủ mà không cần cắt ngắn hay xoay nhãn.
1.3. So sánh giá trị tuyệt đối
Biểu đồ cột ngang thường được dùng để so sánh giá trị tuyệt đối (sales, profit, population…) giữa các nhóm. Khi giá trị khác nhau đáng kể, việc sắp xếp các cột theo thứ tự tăng/giảm giúp người xem nhanh chóng nhận ra xu hướng.
1.4. Đánh giá hiệu suất, xếp hạng
Trong các báo cáo xếp hạng (top 10, bottom 10), biểu đồ cột ngang là lựa chọn phổ biến vì nó cung cấp một cách trực quan để xem vị trí của từng mục trong danh sách.
2. Nguyên Tắc Thiết Kế Cơ Bản
2.1. Độ dài cột phản ánh giá trị

Có thể bạn quan tâm: Cách Vẽ Biểu Đồ Activity Diagram: Hướng Dẫn Chi Tiết Từ A Đến Z
Đảm bảo rằng độ dài cột tỉ lệ chính xác với giá trị dữ liệu. Tránh các yếu tố làm méo mó, như trục không bắt đầu từ 0 (trừ khi bạn có lý do thống kê đặc biệt và muốn giải thích rõ ràng).
2.2. Sắp xếp hợp lý
- Tăng dần hoặc giảm dần: Giúp người xem nhanh chóng nhận ra xu hướng.
- Nhóm hợp lý: Nếu có nhiều nhóm, hãy phân tách bằng màu sắc hoặc khoảng cách.
2.3. Màu sắc và độ tương phản
- Sử dụng màu sắc nhất quán và tránh quá nhiều màu gây rối mắt.
- Đối với biểu đồ đa biến (multiple series), chọn màu sắc có độ tương phản đủ để phân biệt, nhưng vẫn hài hòa.
2.4. Nhãn và chú thích
- Nhãn cột: Đặt giá trị trên hoặc trong cột để người xem không cần nhìn vào trục.
- Tiêu đề và chú giải: Cung cấp tiêu đề ngắn gọn, mô tả nguồn dữ liệu và chú giải nếu có nhiều series.
2.5. Độ rộng cột (Bar width)
- Đặt độ rộng cột phù hợp để tránh cột quá dày (gây mất tính thẩm mỹ) hoặc quá mỏng (khó nhìn).
3. Hướng Dẫn Từng Bước Trong Các Công Cụ Phổ Biến
3.1. Microsoft Excel

Có thể bạn quan tâm: Cách Vẽ Biểu Tượng Cảm Xúc: Hướng Dẫn Từ Cơ Bản Đến Nâng Cao Cho Người Mới Bắt Đầu
Bước 1: Chuẩn bị dữ liệu
Giả sử bạn có bảng dữ liệu như sau:
| Danh mục | Giá trị |
|---|---|
| Sản phẩm A | 120 |
| Sản phẩm B | 85 |
| Sản phẩm C | 150 |
| Sản phẩm D | 60 |
| Sản phẩm E | 200 |
Bước 2: Chọn dữ liệu
- Bôi đen cả hai cột (Danh mục và Giá trị).
Bước 3: Chèn biểu đồ
- Vào Insert → Bar Chart → Clustered Bar (hoặc Stacked Bar nếu muốn chồng).
Bước 4: Định dạng trục
- Nhấp chuột phải vào trục Y (danh mục), chọn Format Axis.
- Đánh dấu Categories in reverse order nếu muốn danh mục bắt đầu từ trên xuống dưới.
Bước 5: Thêm nhãn dữ liệu
- Nhấp chuột phải vào một cột → Add Data Labels.
- Định dạng nhãn (font, màu) trong Format Data Labels.
Bước 6: Tùy chỉnh màu sắc
- Chọn cột → Format Data Series → Fill → chọn màu.
Bước 7: Đánh dấu trục X bắt đầu từ 0
- Nhấp chuột phải vào trục X → Format Axis → Minimum = 0.
Mẹo nâng cao:
- Conditional Formatting: Sử dụng công cụ Data Bars trong Conditional Formatting để tạo biểu đồ cột ngang nhanh trong ô.
- Dynamic Chart: Dùng bảng động (dynamic table) và công thức OFFSET để tự động cập nhật biểu đồ khi dữ liệu thay đổi.
3.2. Google Sheets
Bước 1: Nhập dữ liệu tương tự Excel.
Bước 2: Chọn dữ liệu → Insert → Chart.
Bước 3: Trong Chart editor, chọn Chart type → Bar chart.
Bước 4: Tùy chỉnh:
- Customize → Horizontal axis: đặt min = 0.
- Customize → Series: bật Data labels.
- Customize → Chart & axis titles: thêm tiêu đề, nhãn trục.
Mẹo:
- Sử dụng Chart ranges để tạo biểu đồ từ các dải dữ liệu động bằng công thức
FILTERhoặcQUERY.
3.3. Python – Matplotlib
import matplotlib.pyplot as plt
import numpy as np # Dữ liệu mẫu
categories = 'Sản phẩm A', 'Sản phẩm B', 'Sản phẩm C', 'Sản phẩm D', 'Sản phẩm E'
values = 120, 85, 150, 60, 200 # Sắp xếp giảm dần
sorted_idx = np.argsort(values)::-1
categories = np.array(categories)sorted_idx
values = np.array(values)sorted_idx fig, ax = plt.subplots(figsize=(8, 5))
bars = ax.barh(categories, values, color='steelblue')
ax.set_xlabel('Giá trị')
ax.set_title('Biểu đồ cột ngang - Doanh thu sản phẩm')
ax.set_xlim(0, max(values)1.1) # Đảm bảo trục X bắt đầu từ 0 # Thêm nhãn giá trị
for bar in bars: width = bar.get_width() ax.text(width + 5, bar.get_y() + bar.get_height()/2, f'{width}', va='center', fontsize=9) plt.tight_layout()
plt.show()
Giải thích:
barhtạo biểu đồ cột ngang.ax.textdùng để đặt nhãn giá trị ở cuối mỗi cột.ax.set_xlimbảo trục X bắt đầu từ 0 và có khoảng dư để hiển thị nhãn.
Tùy chỉnh nâng cao:
- Color map:
cmap = plt.cm.Bluesvàbars = ax.barh(..., color=cmap(values/np.max(values))). - Multiple series: Dùng
ax.barhnhiều lần vớileft=để tạo stacked bar.
3.4. Python – Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd df = pd.DataFrame({ 'Sản phẩm': categories, 'Giá trị': values
}).sort_values('Giá trị', ascending=False) plt.figure(figsize=(8,5))
sns.barplot(x='Giá trị', y='Sản phẩm', data=df, palette='viridis')
plt.title('Biểu đồ cột ngang - Doanh thu')
plt.xlabel('Giá trị')
plt.show()
Seaborn tự động sắp xếp và cung cấp màu sắc đẹp mắt.
3.5. Python – Plotly (Interactive)
import plotly.express as px df = pd.DataFrame({ 'Sản phẩm': categories, 'Giá trị': values
}) fig = px.bar(df, x='Giá trị', y='Sản phẩm', orientation='h', title='Biểu đồ cột ngang tương tác', text='Giá trị', color='Giá trị', color_continuous_scale='Blues')
fig.update_layout(yaxis=dict(autorange='reversed')) # Đảo ngược để hiển thị từ trên xuống
fig.show()
Plotly cho phép người dùng hover để xem chi tiết và zoom.
3.6. R – ggplot2
library(ggplot2) df <- data.frame( Danh_muc = factor(c('Sản phẩm A','Sản phẩm B','Sản phẩm C','Sản phẩm D','Sản phẩm E'), levels = c('Sản phẩm A','Sản phẩm B','Sản phẩm C','Sản phẩm D','Sản phẩm E')), Gia_tri = c(120,85,150,60,200)
) ggplot(df, aes(x = Gia_tri, y = reorder(Danh_muc, Gia_tri))) + geom_bar(stat='identity', fill='steelblue') + geom_text(aes(label=Gia_tri), hjust=-0.1) + labs(title='Biểu đồ cột ngang - Doanh thu', x='Giá trị', y='Sản phẩm') + theme_minimal() + xlim(0, max(df$Gia_tri)1.1)
reordersắp xếp danh mục theo giá trị.geom_textđặt nhãn giá trị.
3.7. JavaScript – Chart.js
<canvas id="myBarChart" width="800" height="400"></canvas>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
const ctx = document.getElementById('myBarChart').getContext('2d');
const data = { labels: 'Sản phẩm A','Sản phẩm B','Sản phẩm C','Sản phẩm D','Sản phẩm E', datasets: { label: 'Giá trị', data: 120,85,150,60,200, backgroundColor: 'rgba(54, 162, 235, 0.6)', borderColor: 'rgba(54,162,235,1)', borderWidth: 1 }
}; new Chart(ctx, { type: 'bar', data: data, options: { indexAxis: 'y', // Đặt trục ngang scales: { x: { beginAtZero: true } }, plugins: { legend: { display: false }, tooltip: { enabled: true }, datalabels: { anchor: 'end', align: 'right', formatter: Math.round } } }
});
</script>
indexAxis: 'y'chuyển sang cột ngang.- Có thể tích hợp chartjs-plugin-datalabels để hiển thị nhãn.
3.8. JavaScript – D3.js (Advanced)

Có thể bạn quan tâm: Cách Vẽ Biểu Cảm Gương Mặt: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
D3 cho phép tùy chỉnh sâu, ví dụ:
const data = {category: 'Sản phẩm A', value: 120}, {category: 'Sản phẩm B', value: 85}, {category: 'Sản phẩm C', value: 150}, {category: 'Sản phẩm D', value: 60}, {category: 'Sản phẩm E', value: 200}
; const margin = {top: 20, right: 30, bottom: 40, left: 120}, width = 800 - margin.left - margin.right, height = 400 - margin.top - margin.bottom; const svg = d3.select('body') .append('svg') .attr('width', width + margin.left + margin.right) .attr('height', height + margin.top + margin.bottom) .append('g') .attr('transform', `translate(${margin.left},${margin.top})`); const y = d3.scaleBand() .domain(data.map(d => d.category)) .range(0, height) .padding(0.1); const x = d3.scaleLinear() .domain(0, d3.max(data, d => d.value)1.1) .range(0, width); svg.append('g') .call(d3.axisLeft(y)); svg.append('g') .attr('transform', `translate(0,${height})`) .call(d3.axisBottom(x)); svg.selectAll('.bar') .data(data) .enter() .append('rect') .attr('class', 'bar') .attr('y', d => y(d.category)) .attr('height', y.bandwidth()) .attr('x', 0) .attr('width', d => x(d.value)) .attr('fill', '#69b3a2'); svg.selectAll('.label') .data(data) .enter() .append('text') .attr('class', 'label') .attr('y', d => y(d.category) + y.bandwidth()/2 + 4) .attr('x', d => x(d.value) + 5) .text(d => d.value);
D3 cho phép kiểm soát chi tiết từng thành phần: margin, padding, animation, tương tác.
4. Các Lỗi Thường Gặp Và Cách Khắc Phục
| Lỗi | Nguyên nhân | Cách khắc phục |
|---|---|---|
| Trục X không bắt đầu từ 0 | Tự động scaling của công cụ | Đặt minimum = 0 trong Format Axis (Excel) hoặc beginAtZero: true (Chart.js) |
| Nhãn danh mục bị cắt | Độ rộng cột quá hẹp hoặc nhãn quá dài | Tăng chiều cao biểu đồ, giảm độ rộng cột, hoặc đổi sang biểu đồ cột ngang |
| Các cột chồng lên nhau | Dữ liệu không được sắp xếp đúng hoặc thiếu left= trong stacked bar |
Kiểm tra thứ tự dữ liệu, sử dụng stacked=True (seaborn) hoặc barmode='stack' (plotly) |
| Màu sắc không phân biệt được | Quá nhiều series, màu tương đồng | Sử dụng palette chuyên biệt (viridis, Set2) hoặc tạo màu tùy chỉnh |
| Không hiển thị giá trị trên cột | Thiết lập nhãn dữ liệu chưa bật | Bật Data Labels trong Excel/Sheets, hoặc dùng ax.text trong matplotlib |
5. Thực Hành: Tạo Biểu Đồ Cột Ngang Cho Dữ Liệu Thực Tế
Giả sử bạn là nhà phân tích bán hàng và muốn trình bày doanh thu theo khu vực trong năm 2026. Dữ liệu mẫu:
| Khu vực | Doanh thu (triệu VND) |
|---|---|
| Hà Nội | 340 |
| Hồ Chí Minh | 420 |
| Đà Nẵng | 210 |
| Hải Phòng | 150 |
| Cần Thơ | 95 |
| Bình Dương | 180 |
| Vũng Tàu | 130 |
5.1. Excel
- Nhập dữ liệu vào sheet.
- Chọn toàn bộ bảng → Insert → Bar Chart → Clustered Bar.
- Đảo ngược thứ tự danh mục để khu vực có doanh thu cao nhất ở trên.
- Thêm nhãn doanh thu, đổi màu cột thành gradient từ xanh nhạt (doanh thu thấp) tới xanh đậm (cao).
5.2. Python (Plotly)
import plotly.express as px
df = px.data.tips() # thay bằng dữ liệu thực tế
df = pd.DataFrame({ 'Khu vực':'Hà Nội','Hồ Chí Minh','Đà Nẵng','Hải Phòng','Cần Thơ','Bình Dương','Vũng Tàu', 'Doanh_thu':340,420,210,150,95,180,130
}) fig = px.bar(df, x='Doanh_thu', y='Khu vực', orientation='h', title='Doanh thu bán hàng theo khu vực (2026)', text='Doanh_thu', color='Doanh_thu', color_continuous_scale='Blues')
fig.update_layout(yaxis=dict(autorange='reversed'))
fig.show()
Kết quả sẽ là một biểu đồ tương tác, cho phép người dùng hover để xem chi tiết, phóng to, hoặc tải về dưới dạng PNG.
6. Tối Ưu Hóa Cho Báo Cáo Và Bài Thuyết Trình

- Kích thước chuẩn: Đối với slide PowerPoint, thường dùng tỷ lệ 4:3 hoặc 16:9, chiều cao 5–6 inch, chiều rộng 8–10 inch.
- Font: Sử dụng font sans-serif (Arial, Calibri) để tăng độ rõ ràng. Kích thước ít nhất 10pt cho nhãn.
- Màu sắc công ty: Áp dụng palette màu thương hiệu để duy trì nhất quán.
- Export: Xuất biểu đồ ở định dạng vector (SVG, PDF) để không bị mất chất lượng khi phóng to.
- Thêm chú giải: Nếu biểu đồ có nhiều series, đặt chú giải ở vị trí dễ nhìn, tránh che cột.
- Kiểm tra độ màu cho người mù màu: Sử dụng công cụ kiểm tra độ tương phản (WebAIM) và cân nhắc sử dụng mẫu màu hỗ trợ (đỏ‑xanh‑vàng).
7. Các Ứng Dụng Thực Tiễn
| Ngành | Mục đích sử dụng biểu đồ cột ngang |
|---|---|
| Marketing | Phân tích hiệu suất chiến dịch theo kênh (Facebook, Google, Email). |
| Tài chính | So sánh lợi nhuận ròng của các chi nhánh hoặc sản phẩm. |
| Giáo dục | Xếp hạng điểm trung bình môn học của các lớp. |
| Y tế | Đánh giá tỷ lệ tiêm chủng theo khu vực. |
| Logistics | So sánh thời gian giao hàng trung bình giữa các kho. |
8. Tài Nguyên Tham Khảo Và Học Thêm
- Sách: “Data Visualization with Python and JavaScript” – Kyran Dale.
- Khóa học: Coursera – “Data Visualization with Tableau” (cũng có phần về bar chart ngang).
- Blog: “The Visual Display of Quantitative Information” – Edward Tufte (nguyên tắc thiết kế biểu đồ).
- Thư viện:
matplotlib,seaborn,plotly,ggplot2,Chart.js,D3.js. - Công cụ online: Datawrapper, Flourish, Canva – hỗ trợ tạo biểu đồ cột ngang mà không cần lập trình.
9. Kết luận
Biểu đồ cột ngang là một công cụ mạnh mẽ, linh hoạt và dễ dàng tùy chỉnh cho hầu hết các nhu cầu phân tích dữ liệu. Từ việc tạo nhanh trong Excel hay Google Sheets, tới việc lập trình chi tiết bằng Python, R hoặc JavaScript, bạn luôn có thể lựa chọn phương pháp phù hợp với môi trường làm việc và mức độ phức tạp của dự án.
Hãy nhớ áp dụng các nguyên tắc thiết kế cơ bản: sắp xếp dữ liệu hợp lý, bắt đầu trục từ 0, sử dụng màu sắc hài hòa và cung cấp nhãn giá trị rõ ràng. Khi làm theo những hướng dẫn chi tiết ở trên, bạn sẽ tạo ra những biểu đồ cột ngang không chỉ chính xác mà còn thu hút, giúp truyền tải thông điệp một cách hiệu quả nhất tới người xem.
Chúc bạn thành công trong việc trực quan hoá dữ liệu và tạo ra những bản báo cáo ấn tượng!
