Biểu đồ cột và biểu đồ tần số trong R kèm ví dụ.

⚡ Tóm tắt thông minh

Biểu đồ cột và biểu đồ tần số trong R được xây dựng bằng ggplot2, sử dụng geom_bar() cho số liệu phân loại và geom_histogram() cho phân bố liên tục. Hướng dẫn này sẽ hướng dẫn cách tùy chỉnh màu sắc, nhóm...pingbao gồm việc xếp chồng, định hướng, phân nhóm và ghi nhãn trong thanh biểu đồ trên tập dữ liệu mtcars.

  • 📊 Điểm khác biệt cốt lõi: Biểu đồ cột tóm tắt một biến định tính, trong khi biểu đồ tần số chia một biến định lượng thành các khoảng.
  • 🧱 Ngữ pháp đồ họa: Mỗi biểu đồ kết hợp một tập dữ liệu và một bản đồ aes().pingvà một đối tượng hình học được nối với dấu cộng.
  • 🎨 Kiểm soát màu sắc: Đặt hàm `fill` bên trong `geom_bar()` để có một màu đồng nhất, và bên trong `aes()` để tô màu các thanh theo nhóm.
  • 📐 Điều chỉnh vị trí: Tham số `position = “fill”` chuyển đổi số liệu thành tỷ lệ phần trăm, và hàm `position_dodge()` đặt các thanh được nhóm cạnh nhau.
  • 🔢 Vẽ đồ thị các giá trị: Truyền tham số stat = “identity” khi trục y đã chứa một thống kê được tính toán sẵn, chẳng hạn như giá trị trung bình của nhóm.
  • 📏 Phân nhóm biểu đồ tần số: Hãy đặt số lượng bin hoặc độ rộng bin trong hàm geom_histogram(), vì giá trị mặc định là 30 bin hiếm khi phù hợp với dữ liệu.

Biểu đồ cột và biểu đồ tần số trong R

Biểu đồ cột trong R là gì?

Biểu đồ thanh là một cách tuyệt vời để hiển thị các biến phân loại theo trục x. Loại biểu đồ này biểu thị hai khía cạnh trong trục y.

  1. Bước đầu tiên là đếm số lần xuất hiện trong mỗi nhóm.
  2. Biểu đồ thứ hai thể hiện thống kê tóm tắt (giá trị nhỏ nhất, lớn nhất, trung bình, v.v.) của một biến trên trục y.

Bạn sẽ sử dụng bộ dữ liệu mtcars, bao gồm các biến sau:

  • xi lanh: Số xi lanh trên xe. Biến số
  • am: Loại hộp số. 0 cho số tự động và 1 cho số sàn. Biến số
  • mpg: Dặm trên mỗi gallon. Biến số

Vì biểu đồ tần số trông rất giống nhau, nên việc phân biệt sự khác biệt trước khi viết mã là điều đáng làm.

So sánh biểu đồ cột và biểu đồ tần số trong R: Những điểm khác biệt chính

Hai biểu đồ này trông giống nhau và người ta thường nhầm lẫn chúng. Chúng trả lời các câu hỏi khác nhau và sử dụng các hình học khác nhau.

Tiêu chí Biểu đồ Histogram
Biến trục X Phân loại hoặc yếu tố Liên tục và số
Biểu đồ cột thể hiện điều gì? Một loại Một khoảng, hay một nhóm giá trị.
Khoảng cách giữa các thanh Đúng vậy, các danh mục được tách biệt. Không, các thùng rác nằm sát nhau.
Đơn đặt hàng tại quầy bar Có thể sắp xếp lại tự do Cố định theo thang đo số.
Câu hỏi đã được trả lời Các nhóm có những điểm tương đồng nào? Biến số đó được phân bổ như thế nào?
Đối tượng ggplot2 geom_bar () geom_histogram()

Nguyên tắc chung: nếu việc sắp xếp lại các cột vẫn có ý nghĩa, bạn sẽ có biểu đồ cột. Nếu việc sắp xếp lại chúng làm mất đi ý nghĩa, bạn sẽ có biểu đồ tần số (histogram). Đối với các tóm tắt dựa trên tứ phân vị của cùng một biến liên tục, hãy sử dụng biểu đồ tần số (histogram). ô hộp.

Cách tạo biểu đồ cột trong R

Để tạo biểu đồ trong R, bạn có thể sử dụng thư viện ggplot để tạo các biểu đồ sẵn sàng xuất bản. Cú pháp cơ bản của thư viện này là:

ggplot(data, mapping = aes()) +
geometric object 

arguments: 
data: dataset used to plot the graph 
mapping: Control the x and y-axis 
geometric object: The type of plot you want to show. The most common objects are:

- Point: `geom_point()`
- Bar: `geom_bar()`
- Line: `geom_line()`
- Histogram: `geom_histogram()` 

Bài hướng dẫn này tập trung vào đối tượng hình học geom_bar(), dùng để vẽ biểu đồ cột, và geom_histogram() cho dữ liệu liên tục.

Biểu đồ thanh: đếm

Biểu đồ đầu tiên của bạn hiển thị tần số của hình trụ với geom_bar(). Đoạn mã dưới đây là cú pháp cơ bản nhất.

library(ggplot2)
# Most basic bar chart
ggplot(mtcars, aes(x = factor(cyl))) +
    geom_bar()

Code Giải thích

  • Bạn chuyển tập dữ liệu mtcars tới ggplot.
  • Bên trong đối số của hàm aes(), bạn đặt trục x thành biến yếu tố cyl.
  • 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_bar() cho đối tượng hình học.

Đầu ra:

Biểu đồ thanh: đếm

Lưu ý: hãy đảm bảo bạn chuyển đổi các biến thành một yếu tố nếu không R sẽ coi các biến là số. Xem ví dụ bên dưới.

Biểu đồ thanh: đếm

Tùy chỉnh biểu đồ

Bốn đối số có thể được truyền để tùy chỉnh biểu đồ:

- `stat`: Controls what is plotted on the y-axis. By default `count`, which tallies rows. To plot a value you already computed, pass `stat = "identity"`
- `alpha`: Control density of the color
- `fill`: Change the color of the bar
- `size`: Control the size the bar	

Thay đổi màu sắc của các thanh

Bạn có thể thay đổi màu sắc của các thanh. Lưu ý rằng màu sắc của các thanh đều giống nhau.

# Change the color of the bars
ggplot(mtcars, aes(x = factor(cyl))) +
    geom_bar(fill = "coral") +
    theme_classic()

Code Giải thích

  • Màu sắc của các thanh được điều khiển bởi bản đồ aes()ping Bên trong đối tượng hình học (tức là không phải trong hàm ggplot()). Bạn có thể thay đổi màu sắc bằng các tham số fill. Ở đây, bạn chọn màu san hô.

Đầu ra:

Thay đổi màu của thanh

Bạn có thể sử dụng mã này:

grDevices::colors()

để xem tất cả các màu có sẵn trong R. Có khoảng 650 màu.

Thay đổi cường độ

Bạn có thể tăng hoặc giảm cường độ màu của các thanh

# Change intensity
ggplot(mtcars,
        aes(factor(cyl))) +
    geom_bar(fill = "coral",
        alpha = 0.5) +
    theme_classic()

Code Giải thích

  • Để tăng/giảm cường độ của thanh màu, bạn có thể thay đổi giá trị của alpha. Alpha lớn sẽ tăng cường độ, và alpha nhỏ sẽ giảm cường độ. Giá trị alpha nằm trong khoảng từ 0 đến 1. Ở mức 1, màu sắc sẽ khớp chính xác với bảng màu; ở mức 0, thanh màu sẽ vô hình. Ở đây bạn chọn alpha = 0.5.

Đầu ra:

Thay đổi cường độ

Tô màu theo nhóm

Bạn có thể thay đổi màu của các thanh, nghĩa là mỗi nhóm có một màu khác nhau. Ví dụ: biến hình trụ có ba cấp độ, sau đó bạn có thể vẽ biểu đồ thanh bằng ba màu.

# Color by group
ggplot(mtcars, aes(factor(cyl),
        fill = factor(cyl))) +
    geom_bar()

Code Giải thích

  • Tham số `fill` bên trong hàm `aes()` thay đổi màu sắc của thanh. Bạn thay đổi màu bằng cách đặt `fill = x-axis variable`. Trong ví dụ của bạn, biến trục x là `cyl`; `fill = factor(cyl)`

Đầu ra:

Tô màu theo nhóm

Thêm một nhóm vào các thanh

Bạn có thể chia nhỏ trục y dựa trên một cấp độ yếu tố khác. Ví dụ, bạn có thể đếm số hộp số tự động và hộp số sàn dựa trên loại xi-lanh.

Bạn sẽ tiến hành như sau:

  • Bước 1: Tạo khung dữ liệu với tập dữ liệu mtcars
  • Bước 2: Gắn nhãn biến am bằng auto cho hộp số tự động và man cho hộp số sàn. Chuyển đổi am và cyl thành một hệ số để bạn không cần sử dụng factor() trong hàm ggplot().
  • Bước 3: Vẽ biểu đồ thanh để đếm số lượng truyền động theo xi lanh
library(dplyr)
# Step 1
data <- mtcars %>% 
#Step 2
mutate(am = factor(am, labels = c("auto", "man")),
    cyl = factor(cyl))

Sau khi chuẩn bị xong bộ dữ liệu, bạn có thể vẽ đồ thị:

# Bước 3

ggplot(data, aes(x = cyl, fill = am)) +
    geom_bar() +
    theme_classic()

Code Giải thích

  • Lệnh gọi ggplot() nhận dữ liệu từ tập dữ liệu và bản đồ aes().ping.
  • Trong aes() bạn bao gồm biến x-axis và biến nào được yêu cầu để điền vào thanh (tức là am)
  • geom_bar(): Tạo biểu đồ thanh

Đầu ra:

Thêm một nhóm trong quán bar

Bản đôping Thanh biểu đồ sẽ được tô bằng hai màu, mỗi màu tương ứng với một cấp độ. Việc thay đổi nhóm rất dễ dàng bằng cách chọn các biến yếu tố khác trong tập dữ liệu.

Biểu đồ thanh theo tỷ lệ phần trăm

Bạn có thể hình dung thanh theo tỷ lệ phần trăm thay vì số liệu thô.

# Biểu đồ thanh theo tỷ lệ phần trăm

ggplot(data, aes(x = cyl, fill = am)) +
    geom_bar(position = "fill") +
    theme_classic()

Code Giải thích

  • Sử dụng vị trí = “điền” trong đối số geom_bar() để tạo đồ họa có phần trăm theo trục y.

Đầu ra:

Biểu đồ thanh theo tỷ lệ phần trăm

Các thanh cạnh nhau

Thật dễ dàng để vẽ biểu đồ thanh với biến nhóm cạnh nhau.

# Bar chart side by side
ggplot(data, aes(x = cyl, fill = am)) +
    geom_bar(position = position_dodge()) +
    theme_classic()

Code Giải thích

  • vị trí=position_dodge(): Cho biết rõ ràng cách sắp xếp các thanh

Đầu ra:

Thanh cạnh nhau

Biểu đồ cột kèm số liệu thống kê tóm tắt

Trong phần thứ hai của hướng dẫn, trục y hiển thị một giá trị được tính toán thay vì số lượng. Lưu ý rằng đây vẫn là biểu đồ cột: biểu đồ tần số thực sự sẽ được đề cập ở phần sau, và nó sử dụng một đối tượng hình học khác.

Mục tiêu của bạn là tạo một biểu đồ với số dặm trung bình trên mỗi gallon cho từng loại xi lanh. Để vẽ một biểu đồ thông tin, bạn sẽ làm theo các bước sau:

  • Bước 1: Tạo biến mới tính số dặm trung bình trên gallon theo xi lanh
  • Bước 2: Tạo biểu đồ cơ bản
  • Bước 3: Thay đổi hướng
  • Bước 4: Thay đổi màu sắc
  • Bước 5: Thay đổi kích thước
  • Bước 6: Thêm nhãn vào biểu đồ

Bước 1) Tạo một biến mới

Bạn tạo một khung dữ liệu có tên data_histogram, khung này chỉ đơn giản trả về số dặm trung bình trên mỗi gallon theo số lượng xi-lanh trong ô tô. Bạn gọi biến mới này là Mean_mpg và làm tròn giá trị trung bình bằng hai số thập phân.

# Bước 1

data_histogram <- mtcars %>%
mutate(cyl = factor(cyl)) %>%
group_by(cyl) %>%
summarize(mean_mpg = round(mean(mpg), 2))

Bước 2) Tạo biểu đồ cơ bản

Bạn có thể vẽ biểu đồ tần số. Biểu đồ này chưa đủ hoàn thiện để gửi cho khách hàng, nhưng nó đã thể hiện được xu hướng.

ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) +
    geom_bar(stat = "identity")

Code Giải thích

  • aes() hiện có hai biến. Biến hình trụ đề cập đến trục x và giá trị trung bình_mpg là trục y.
  • Bạn truyền tham số stat = “identity” để hàm geom_bar() sử dụng biến trục y như hiện có thay vì đếm số hàng. Giá trị mặc định cho hàm geom_bar() là stat = “count”.

Đầu ra:

Histogram

Bước 3) Thay đổi hướng

Bạn thay đổi hướng của đồ thị từ dọc sang ngang.

ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) +
    geom_bar(stat = "identity") +
    coord_flip()

Code Giải thích

  • Bạn có thể điều khiển hướng của biểu đồ bằng coord_flip().

Đầu ra:

Histogram

Bước 4) Thay đổi màu sắc

Bạn có thể phân biệt màu sắc của các thanh theo mức hệ số của biến trục x.

ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) +
    geom_bar(stat = "identity") +
    coord_flip() +
    theme_classic()

Code Giải thích

  • Bạn có thể vẽ đồ thị theo nhóm bằng cách sử dụng fill=cyl mapping. R tự động xử lý màu sắc dựa trên mức độ của biến cyl.

Đầu ra:

Histogram

Bước 5) Thay đổi kích thước

Để làm cho đồ thị trông đẹp hơn, bạn giảm độ rộng của thanh.

graph <- ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) +
    geom_bar(stat = "identity",
        width = 0.5) +
    coord_flip() +
    theme_classic()

Code Giải thích

  • Tham số width bên trong hàm geom_bar() điều khiển độ dày của thanh. Giá trị càng lớn thì thanh càng rộng.
  • Đồ thị được lưu trữ trong đối tượng đồ thị, vì bước tiếp theo sử dụng lại nó mà không thay đổi. Việc lưu trữ các đồ thị trung gian giúp mã dễ đọc hơn.

Đầu ra:

Histogram

Bước 6) Thêm nhãn vào biểu đồ

Bước cuối cùng là thêm giá trị của mean_mpg làm nhãn bên trong mỗi cột.

graph +
    geom_text(aes(label = mean_mpg),
        hjust = 1.5,
        color = "white",
        size = 3) +
    theme_classic()

Code Giải thích

  • Hàm geom_text() rất hữu ích để kiểm soát tính thẩm mỹ của văn bản.
    • label=: Thêm nhãn bên trong các thanh
    • Mean_mpg: Sử dụng biến Mean_mpg cho nhãn
  • hjust điều khiển vị trí của nhãn trên thanh biểu đồ. Giá trị gần 1 sẽ đặt nhãn gần cuối thanh, và giá trị lớn hơn sẽ đẩy nhãn về phía trục. Nếu hướng của biểu đồ là hướng dọc, hãy thay đổi hjust thành vjust.
  • color=”white”: Thay đổi màu sắc của văn bản. Ở đây bạn sử dụng màu trắng.
  • size=3: Đặt kích thước của văn bản.

Đầu ra:

Histogram

Cách sắp xếp và đặt nhãn cho các cột trong biểu đồ cột trong R

Hai bước hoàn thiện cuối cùng phân biệt biểu đồ nháp với biểu đồ có thể xuất bản: sắp xếp các cột theo giá trị và dán nhãn trục một cách chính xác.

Sắp xếp lại các thanh. Theo mặc định, ggplot2 sắp xếp các cấp độ yếu tố theo thứ tự bảng chữ cái, nhưng thứ tự này hiếm khi cung cấp thông tin tốt nhất. Hãy bao bọc biến x trong hàm reorder() để sắp xếp theo biến thứ hai:

# Sort the bars from lowest to highest mean_mpg
ggplot(data_histogram, aes(x = reorder(cyl, mean_mpg), y = mean_mpg)) +
    geom_bar(stat = "identity", fill = "coral") +
    theme_classic()

Thêm dấu trừ vào trước biến sắp xếp, ví dụ: reorder(cyl, -mean_mpg), để đảo ngược hướng sắp xếp.

Thêm tiêu đề và nhãn trục. Hàm labs() thiết lập mọi phần tử văn bản trong một lần gọi duy nhất:

ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) +
    geom_bar(stat = "identity") +
    labs(title = "Average fuel economy by cylinder count",
        subtitle = "mtcars dataset",
        x = "Number of cylinders",
        y = "Mean miles per gallon",
        fill = "Cylinders",
        caption = "Source: mtcars") +
    theme_classic()

Đặt fill = NULL bên trong labs() để loại bỏ hoàn toàn tiêu đề chú thích và sử dụng theme(legend.position = “none”) để loại bỏ chú thích khi trục x đã đặt tên cho các nhóm.

Bạn có thể tự chọn màu sắc. Hãy thay thế bảng màu mặc định bằng một bảng màu cụ thể để biểu đồ phù hợp với phong cách của công ty bạn:

scale_fill_manual(values = c("4" = "#0e9cd1", "6" = "coral", "8" = "grey40"))

Cách tạo biểu đồ tần số trong R bằng hàm geom_histogram()

Biểu đồ tần số (histogram) thể hiện sự phân bố của một biến liên tục duy nhất. Thay vì đếm số lượng các danh mục, ggplot2 chia phạm vi số thành các khoảng (bin) và đếm số lượng quan sát thuộc mỗi khoảng.

library(ggplot2)
# Most basic histogram
ggplot(mtcars, aes(x = mpg)) +
    geom_histogram()

R sẽ in ra một thông báo khuyên bạn nên chọn số lượng ô (bin count) tốt hơn, vì giá trị mặc định là 30 ô là tùy ý. Có hai tham số để điều khiển việc này:

  • thùng: Số lượng khoảng chia phạm vi.
  • băng thông: Độ rộng của mỗi khoảng, được biểu thị bằng đơn vị của biến. Sử dụng tham số này khi đơn vị có ý nghĩa.
# Set the number of bins
ggplot(mtcars, aes(x = mpg)) +
    geom_histogram(bins = 10, fill = "coral", color = "white") +
    theme_classic()

# Or set the width of each bin instead
ggplot(mtcars, aes(x = mpg)) +
    geom_histogram(binwidth = 4, fill = "coral", color = "white") +
    theme_classic()

Việc phân nhóm (binning) là lựa chọn quan trọng nhất trong biểu đồ tần số. Quá ít nhóm sẽ che khuất cấu trúc thực sự, chẳng hạn như đỉnh thứ hai; quá nhiều nhóm sẽ biến biểu đồ thành nhiễu. Hãy thử một vài giá trị trước khi chọn một giá trị cố định.

So sánh các nhóm. Hãy ánh xạ một yếu tố cần điền và thiết lập vị trí sao cho các phân bố vẫn dễ đọc:

ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) +
    geom_histogram(bins = 10, position = "identity", alpha = 0.5) +
    theme_classic()

Với thuộc tính `position = “identity”` và giá trị alpha giảm, các biểu đồ sẽ chồng lên nhau để bạn có thể so sánh trực tiếp hình dạng của chúng. Sử dụng `position = “dodge”` nếu bạn muốn xem các ô dữ liệu cạnh nhau.

Mật độ thay vì số lượng. Khi các nhóm có kích thước khác nhau, hãy vẽ biểu đồ mật độ sao cho diện tích tương đương nhau, và chồng lên một đường cong được làm mịn:

ggplot(mtcars, aes(x = mpg)) +
    geom_histogram(aes(y = after_stat(density)), bins = 10,
        fill = "coral", alpha = 0.6) +
    geom_density(color = "steelblue", linewidth = 1) +
    theme_classic()

Biểu đồ cột và biểu đồ tần số trong R: Code Tài liệu tham khảo

Biểu đồ cột phù hợp với trục x biểu thị số liệu phân loại, trong đó trục y biểu thị số lượng hoặc số liệu thống kê tóm tắt. Bảng dưới đây liệt kê lệnh gọi ggplot2 cho từng biến thể đã đề cập ở trên:

Mục tiêu Code
Đếm
ggplot(df, aes(x = factor(x1))) + geom_bar()
Đếm với màu tô khác nhau
ggplot(df, aes(x = factor(x1), fill = factor(x1))) + geom_bar()
Đếm theo nhóm, xếp chồng lên nhau
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar()
Đếm theo nhóm, cạnh nhau
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = position_dodge())
Đếm theo nhóm, xếp chồng lên nhau theo %
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = "fill")
Giá trị (thống kê tóm tắt)
ggplot(df, aes(x = factor(x1), y = x2)) + geom_bar(stat = "identity")
Biểu đồ tần suất của một biến liên tục
ggplot(df, aes(x = x1)) + geom_histogram(bins = 30)

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

Sử dụng biểu đồ tần số (histogram) khi biến số trên trục x là biến liên tục và bạn muốn xem sự phân bố của nó. Sử dụng biểu đồ cột (bar chart) khi trục x chứa các danh mục riêng biệt và bạn muốn so sánh chúng.

Bên trong hàm `aes()`, tham số `fill` ánh xạ một biến đến màu sắc, do đó mỗi nhóm sẽ có một sắc thái riêng. Bên ngoài hàm `aes()`, bên trong hàm `geom_bar()`, `fill` là một giá trị cố định được áp dụng cho mọi thanh.

Không có câu trả lời chung cho tất cả. Hãy bắt đầu bằng cách lấy căn bậc hai của số lượng quan sát, sau đó điều chỉnh. Quá ít khoảng phân loại sẽ che khuất cấu trúc như đỉnh thứ hai, và quá nhiều sẽ tạo ra biểu đồ nhiễu, gồ ghề.

Biểu đồ tần số (histogram) là bước đầu tiên tiêu chuẩn trong phân tích dữ liệu thăm dò cho các dự án AI, giúp phát hiện độ lệch, các giá trị ngoại lệ và sự mất cân bằng lớp trước khi huấn luyện bất kỳ mô hình nào. Biểu đồ cột (bar chart) sau đó tóm tắt tầm quan trọng của các đặc trưng và tần suất của các danh mục.

Đúng vậy. Trợ lý AI có thể tạo các lớp ggplot2 từ mô tả đơn giản về biểu đồ và giải thích các lỗi như thiếu đối số stat. Luôn chạy mã được tạo trên dữ liệu của riêng bạn để xác nhận bản đồ.ping đúng.

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