Chuyển đến nội dung chính

Hướng dẫn Histogram trong R: Tạo và tùy chỉnh biểu đồ với Base R

Học cách tạo và tùy chỉnh histogram trong base R bằng hàm hist(). Bao gồm màu sắc, nhãn, ngăn (bins), đường mật độ và thống kê mô tả.
Đã cập nhật 5 thg 10, 2026  · 10 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Trong hướng dẫn này, tôi sẽ dẫn bạn qua cách tạo và tùy chỉnh biểu đồ tần suất (histogram) trong ngôn ngữ R. Chúng ta sẽ đề cập histogram là gì, cách chuẩn bị dữ liệu, cách dựng một histogram cơ bản, và cách điều chỉnh màu sắc, nhãn, số ngăn (bins) và giới hạn trục.

Chúng ta sẽ dùng base R mà không cần gói bổ sung. Cách này đặc biệt hữu ích khi bạn không thể dùng thêm gói hoặc khi cần phân tích thăm dò nhanh. Trong các trường hợp khác, bạn có thể cân nhắc dùng ggplot2, như đã đề cập trong hướng dẫn Cách tạo biểu đồ tần suất ggplot2 trong R.

Tóm tắt nhanh

  • Dùng hist(x) để tạo một histogram cơ bản trong base R mà không cần gói bổ sung

  • Tùy chỉnh giao diện với col (màu tô), border (viền), main (tiêu đề), xlab và ylab

  • Kiểm soát cách chia ngăn bằng đối số breaks: truyền một số, một vector mốc chia, hoặc tên phương pháp ("Sturges", "Scott", "Freedman-Diaconis")

  • Chồng các thống kê mô tả bằng abline() cho giá trị trung bình và lines(density()) cho đường mật độ

  • Với histogram theo nhóm hoặc chất lượng xuất bản, hãy chuyển sang ggplot2

Histogram là gì?

Histogram là một biểu đồ cho thấy phân bố tần suất của các biến liên tục (số). Histogram cho phép chúng ta thấy số quan sát trong dữ liệu rơi vào các khoảng giá trị mà biến bao phủ.

Histogram trông giống biểu đồ cột. Khác biệt chính là biểu đồ cột gắn giá trị với một danh mục cụ thể hoặc biến rời rạc, trong khi histogram trực quan hóa tần suất cho các biến liên tục.

Chuẩn bị dữ liệu cho histogram

Chúng ta sẽ dùng bộ dữ liệu nhà ở bao gồm thông tin về các tin rao bán nhà, như diện tích, số phòng, giá và vị trí. Ta có thể đọc dữ liệu bằng hàm read.csv(), trực tiếp từ URL hoặc tải tệp csv về một thư mục rồi đọc từ bộ nhớ cục bộ. Ta cũng có thể chỉ định chỉ lưu các cột dùng trong hướng dẫn này: price và condition.

home_data <- read.csv("https://raw.githubusercontent.com/rashida048/Datasets/master/home_data.csv")[ ,c('price', 'condition')]

Hãy xem vài dòng đầu của dữ liệu bằng hàm head().

head(home_data, 5)

Những dòng đầu của bộ dữ liệu nhà ở hiển thị các cột price và condition trong R

Tạo histogram với Base R

Tiếp theo, chúng ta sẽ tạo một histogram bằng hàm hist() để xem phân bố giá trong bộ dữ liệu.

hist(home_data$price)

Tạo histogram giá nhà trong base R

Histogram cơ bản của giá nhà. Ảnh: Tác giả.

Thêm thống kê mô tả

Chúng ta có thể thêm các thống kê mô tả vào histogram bằng hàm abline(). Hàm này thêm một đường thẳng đứng vào biểu đồ.

  • Đặt đối số v bằng vị trí trên trục x cho đường thẳng đứng. Ở đây, ta lấy giá nhà trung bình bằng mean().

  • Đối số col đặt màu đường, ở đây là đỏ.

  • Đối số lwd đặt độ dày đường. Giá trị 3 làm đường dày hơn để dễ thấy.

hist(home_data$price)

abline(v = mean(home_data$price), col='red', lwd = 3)

Vẽ đường mật độ xác suất

Để thêm đường mật độ xác suất vào histogram, trước hết ta đổi trục y sang tỉ lệ mật độ. Trong lời gọi hist(), đặt đối số probability thành TRUE.

Đường mật độ xác suất được tạo bằng kết hợp density(), hàm tính vị trí đường cong mật độ, và lines(), hàm thêm đường vào biểu đồ hiện có.

hist(home_data$price, probability = TRUE)
abline(v = mean(home_data$price), col='red', lwd = 3)
lines(density(home_data$price), col = 'green', lwd = 3)

Histogram base R của giá nhà với giá trị trung bình được làm nổi bật
Histogram giá nhà với giá trị trung bình được làm nổi bật. Ảnh: Tác giả.

Lưu ý rằng các con số trên trục y đã thay đổi.

Tùy chỉnh màu sắc

Tham số col của hist() đặt màu tô của các cột, và border đặt màu viền. Ở đây tôi sẽ đặt màu tô là xanh dương và viền là trắng.

hist(home_data$price, col = 'blue', border = "white")

Histogram base R của giá nhà với màu sắcHistogram giá nhà với màu sắc. Ảnh: Tác giả.

Thêm nhãn và tiêu đề

Chúng ta có thể thay đổi nhãn trên biểu đồ để dễ đọc và trình bày hơn. Điều này hữu ích khi bạn chia sẻ biểu đồ với người khác.

  • xlab đặt nhãn trục x

  • ylab đặt nhãn trục y

  • main đặt tiêu đề biểu đồ

hist(home_data$price, xlab = 'Price (USD)', ylab = 'Number of Listings', main = 'Distribution of House Prices')

Histogram base R với nhãn trụcHistogram giá nhà với nhãn trục. Ảnh: Tác giả.

Chia ngăn bằng breaks

Với các đối số mặc định, thật khó để thấy trọn vẹn phân bố giá nhà trên toàn dải giá. Ta thấy chúng tập trung ở vài ngăn đầu, nhưng chưa mấy diễn giải được.

Ta có thể thêm nhiều ngăn hơn bằng tham số breaks. Với đối số này, ta có thể truyền một vector các mốc chia cụ thể, một hàm tính mốc chia, một số lượng ngăn mong muốn, hoặc một hàm tính số ô.

Trong ví dụ này, ta sẽ truyền số ngăn mong muốn. Con số này phụ thuộc ngữ cảnh dựa trên điều bạn muốn thể hiện trong biểu đồ.

hist(home_data$price, breaks = 100)

Histogram base R với bề rộng ngăn được thay đổiHistogram giá nhà với bề rộng ngăn thay đổi. Ảnh: Tác giả.

Với breaks đặt là 100, chúng ta nhìn rõ hơn đáng kể phân bố trong vài nhóm đầu.

Ta cũng có thể chỉ định số ngăn bằng tên các phép tính thường dùng để xác định số ngăn tối ưu cho histogram. Mặc định, hist() dùng phương pháp “Sturges”. Ở đây ta chỉ định rõ phương pháp.

hist(home_data$price, breaks = "Sturges")

Histogram base R dùng phương pháp SturgesHistogram giá nhà dùng phương pháp Sturges. Ảnh: Tác giả.

Ta cũng có thể truyền “Scott” làm đối số cho thuộc tính breaks để dùng phương pháp Scott.

hist(home_data$price, breaks = "Scott")

Histogram base R dùng phương pháp Scott
Histogram giá nhà dùng phương pháp Scott. Ảnh: Tác giả.

Cuối cùng, ta cũng có thể dùng phương pháp Freedman-Diaconis (FD).

hist(home_data$price, breaks = "Freedman-Diaconis")

Histogram base R dùng phương pháp Freedman-DiaconisHistogram giá nhà dùng phương pháp Freedman-Diaconis. Ảnh: Tác giả.

So sánh các phương pháp chia ngăn

Bảng dưới đây tóm tắt ba phương pháp chia ngăn có tên sẵn trong hist(). Mặc định là Sturges.

Phương pháp Cách hoạt động Phù hợp nhất cho
Sturges Số ngăn = 1 + log₂(n). Giả định dữ liệu xấp xỉ chuẩn. Tập dữ liệu nhỏ đến vừa, phân bố gần chuẩn
Scott Bề rộng ngăn = 3,49 × sd × n⁻¹ᐟ³. Tối thiểu hóa sai số bình phương trung bình tích phân. Dữ liệu phân bố chuẩn, khi phương sai quan trọng
Freedman-Diaconis Bề rộng ngăn = 2 × IQR × n⁻¹ᐟ³. Dùng khoảng tứ phân vị thay cho độ lệch chuẩn. Dữ liệu lệch hoặc có ngoại lệ

Đặt giới hạn trục

Chúng ta có thể đặt giới hạn trục x của biểu đồ bằng đối số xlim để phóng to vùng dữ liệu quan tâm. Ví dụ, đôi khi hữu ích khi tập trung vào phần trung tâm của phân bố, thay vì phần đuôi dài như khi xem toàn bộ biểu đồ.

Thay đổi giới hạn trục y cũng khả thi (dùng đối số ylim), nhưng điều này ít hữu ích với histogram vì các giá trị tính tự động hầu như luôn hợp lý.

Chúng ta sẽ phóng to khoảng giá từ $0 đến $2M.

hist(home_data$price, breaks = 100, xlim = c(0, 2000000))

Histogram base R của giá nhà phóng to trong khoảng 0 đến 2 triệu đô laHistogram giá nhà với giới hạn trục thay đổi. Ảnh: Tác giả.

Các bước tiếp theo trong trực quan hóa histogram

Khi bạn quen hơn với R, bạn có thể thử các gói trực quan hóa chuyên dụng mang lại nhiều quyền kiểm soát hơn về thẩm mỹ, bố cục và tính tương tác. Thư viện rất phổ biến và dễ dùng để vẽ trong R là ggplot2. Dưới đây, chúng ta tạo một góc nhìn thú vị về phân bố giá theo số phòng ngủ của ngôi nhà.


Histogram phân mảnh theo số phòng ngủ dùng ggplot2 trong RHistogram giá nhà dùng ggplot2. Ảnh: Tác giả.

ggplot2 là gói trực quan hóa được dùng rộng rãi nhất trong R. Bạn có thể học cách tạo histogram với gói này trong hướng dẫn Cách tạo biểu đồ tần suất ggplot2 trong R, hoặc khám phá hướng dẫn Đồ họa với ggplot2 để có phần giới thiệu rộng hơn. Xem thêm khóa Nhập môn ggplot2 và ggplot2 trung cấp để học sâu hơn.

Kết luận

Trong hướng dẫn này, chúng ta đã học rằng histogram là trực quan hóa tuyệt vời để xem phân bố của các biến liên tục. Chúng ta đã học cách tạo histogram trong R, cách vẽ các thống kê tóm tắt lên trên histogram, cách tùy chỉnh các yếu tố như tiêu đề trục, màu sắc, cách chia ngăn trên trục x và cách đặt giới hạn trục. Cuối cùng, chúng ta đã minh họa phần nào sức mạnh của thư viện ggplot2.

Để đọc thêm trên DataCamp và tham khảo tài nguyên, hãy xem các khóa học tương tác sau:


Author
Kevin Babitz
LinkedIn

Tác giả về Khoa học Dữ liệu | Chuyên viên Phân tích Tiếp thị Kỹ thuật Cấp cao tại Wayfair | Thạc sĩ Khoa học Dữ liệu tại University of Pennsylvania

Chủ đề
R
Trực quan hóa Dữ liệu
Phân tích dữ liệu

Học R với DataCamp

Khóa học

Nhập môn trực quan hóa dữ liệu với ggplot2

4 giờ
191.3K
Học cách tạo ra các biểu đồ dữ liệu có ý nghĩa và đẹp mắt bằng ggplot2 thông qua việc nắm vững ngữ pháp đồ họa.
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow
Liên quan

blog

Claude Opus 4.6: Tính năng, Điểm chuẩn, Bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu ở mã hóa tác tử và lập luận phức tạp. Thêm vào đó, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem ThêmXem Thêm