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

Cách tạo biểu đồ tần suất (Histogram) với Plotly

Tìm hiểu cách triển khai histogram trong Python bằng thư viện trực quan hóa dữ liệu Plotly.
Đã cập nhật 5 thg 10, 2026  · 12 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Biểu đồ tần suất (histogram) là dạng đồ thị phổ biến hiển thị các điểm dữ liệu được tổ chức theo những khoảng giá trị xác định. Ta thường thấy chúng trong thống kê, dùng để biểu diễn số lượng của một loại biến cụ thể xuất hiện trong một khoảng giá trị nhất định. Ví dụ, thầy cô toán ngày xưa của bạn có thể đã dùng biểu đồ tần suất để trực quan hóa số điểm mà tất cả học sinh trong lớp đạt được. 

Biểu đồ tần suất thể hiện phân bố điểm số

Hình 1: Ví dụ về biểu đồ tần suất thể hiện phân bố điểm số của một lớp. 

[Nguồn: Ví dụ Histogram với Matplotlib] 

Các cột có chiều cao khác nhau của histogram trông giống biểu đồ cột, nhưng histogram dùng để trực quan hóa dữ liệu định lượng thay vì dữ liệu phân loại – vốn là trường hợp của biểu đồ cột. 

Nhìn chung, dữ liệu số được trực quan hóa trong histogram là liên tục, nghĩa là có vô số giá trị. Cố gắng vẽ tất cả giá trị của biến liên tục thường không khả thi. Histogram khắc phục vấn đề này bằng cách nhóm nhiều điểm dữ liệu vào các khoảng giá trị hợp lý (gọi là bin) và cho phép chúng được trực quan hóa. 

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách triển khai histogram trong Python bằng thư viện trực quan hóa dữ liệu Plotly. Chúng ta cũng sẽ đề cập đến các cách khác nhau để tùy chỉnh histogram Plotly và vì sao trực quan hóa dữ liệu lại quan trọng ngay từ đầu. 

Xem sổ tay DataLab để làm theo phần mã trong bài hướng dẫn này. 

Tầm quan trọng của trực quan hóa dữ liệu trong phân tích dữ liệu

Không doanh nghiệp nào có thể nói rằng họ sẽ không được lợi từ việc hiểu dữ liệu của mình tốt hơn. Vai trò của phân tích dữ liệu là giúp doanh nghiệp tối ưu hóa hiệu suất và cải thiện lợi nhuận; lĩnh vực này vươn tới mọi nơi có dữ liệu bởi vì hiểu biết sâu sắc (insight) thường được coi là lợi thế cạnh tranh.   

Trực quan hóa dữ liệu là dạng biểu diễn đồ họa mà các nhà phân tích sử dụng để truyền đạt thông tin và dữ liệu. Mục đích là tóm tắt dữ liệu trong một định dạng dễ hiểu, làm nổi bật những bài học quan trọng rút ra từ dữ liệu cho người xem. 

Nói cách khác, doanh nghiệp sử dụng trực quan hóa dữ liệu để nhanh chóng nhận diện xu hướng mà nếu không có hỗ trợ hình ảnh thì sẽ khó nhận ra. Biểu diễn đồ họa giúp truyền tải thông tin một cách phổ quát, nhanh chóng và hiệu quả. 

Giới thiệu về Plotly

Plotly là một thư viện trực quan hóa dữ liệu tương tác, mã nguồn mở cho Python và R, được viết bằng JavaScript. Trong bài viết này, chúng ta sẽ tập trung vào Plotly Python, đôi khi được gọi là “plotly.py” để phân biệt với phiên bản JavaScript. 

Mẹo: Học các khóa Nhập môn trực quan hóa dữ liệu với Plotly trong Python hoặc Trực quan hóa dữ liệu tương tác với Plotly trong R để nắm vững Plotly.   

Nhiều người dùng Plotly thường nhận xét rằng ban đầu họ bị “cuốn hút” bởi tính thẩm mỹ hiện đại mà thư viện cho phép người kể chuyện triển khai khá dễ dàng. Plotly Python cho phép tạo các trực quan hóa web hấp dẫn, tương tác có thể: 

  • hiển thị trong sổ tay Jupyter, 
  • lưu thành tệp HTML độc lập, 
  • phục vụ như một phần của ứng dụng web thuần Python xây dựng bằng Dash.

Một điểm hấp dẫn khác của Plotly là dải biểu đồ phong phú. Thư viện hỗ trợ hơn 40 loại biểu đồ độc đáo cho nhiều trường hợp sử dụng, bao gồm thống kê, tài chính, địa lý, khoa học và biểu đồ 3 chiều. 

Việc xuất trực quan hóa tạo bằng Plotly rất dễ dàng nhờ tích hợp sâu với Kaleido – tiện ích xuất ảnh. Cũng có hỗ trợ rộng cho bối cảnh ngoài web, bao gồm các trình soạn thảo desktop (ví dụ: Spyder, PyCharm, v.v.) và xuất tài liệu tĩnh (ví dụ: xuất sổ tay Jupyter sang PDF). 

Cài đặt plotly.py khá đơn giản; có thể cài bằng pip: 

pip install plotly>=5.11.0, <5.12.0

Hoặc dùng Conda: 

conda install -c plotly plotly>=5.11.0, <5.12.0

Lưu ý: Khuyến nghị cài đặt thư viện trong môi trường ảo để giữ các phụ thuộc của những dự án khác nhau tách biệt. Bạn cũng có thể bắt đầu với sổ tay DataLab - một IDE Khoa học dữ liệu Python & R trên đám mây. 

Sử dụng DataLab

DataLab là Môi trường Phát triển Tích hợp (IDE) trực tuyến cho phép người dùng viết mã, phân tích dữ liệu cá nhân hoặc theo nhóm, và chia sẻ insight dữ liệu. Nói cách khác, bạn có thể xem DataLab như một dạng Google Docs dành riêng cho khoa học dữ liệu; tìm hiểu thêm về cách hoạt động trong bài viết Sử dụng DataLab trong lớp học.

Với tác vụ này, chúng ta cần tạo một sổ tay từ một tập dữ liệu. May mắn là DataCamp cung cấp một kho dữ liệu phong phú và ngày càng tăng để phân tích. Khi chúng ta tạo sổ tay từ một tập dữ liệu, môi trường sẽ có sẵn toàn bộ dữ liệu cấu hình trước và mô tả ngắn gọn để bạn có thể bắt tay vào làm ngay từ đầu.   

Các bước để tạo sổ tay bằng tập dữ liệu của DataCamp như sau: 

  • Từ ứng dụng DataLab, chọn "Datasets" trong thanh bên.
  • Chọn một tập dữ liệu bạn quan tâm. Một hộp thoại sẽ hiển thị. Nó cung cấp xem trước tập dữ liệu đã chọn, bao gồm từ điển dữ liệu và liên kết nguồn tập dữ liệu, tùy chọn ngôn ngữ (Python hoặc R), và tổng quan về các ấn phẩm mà người dùng khác đã tạo với tập dữ liệu này.
  • Chọn Create workbook.

tạo DataCamp Workspace

Hình 2: GIF minh họa các bước tạo sổ tay từ một tập dữ liệu.

Lưu ý: Xem Tạo Plotly Histogram với dữ liệu Olympics để theo dõi đoạn mã.

Chúng ta sẽ sử dụng tập dữ liệu Olympics Data từ bộ sưu tập dữ liệu nội bộ của DataCamp. Theo mô tả, đây là tập dữ liệu lịch sử về Thế vận hội hiện đại, từ Athens 1896 đến Rio 2016. Mỗi hàng tương ứng với một vận động viên (271116 bản ghi) tham gia một nội dung thi Olympic và huy chương đạt được (nếu có).

Các cột bao gồm như sau: 

Cột

Giải thích

id

Mã duy nhất cho mỗi vận động viên

name

Tên vận động viên

sex

M hoặc F

age

Tuổi của vận động viên

height

Tính bằng xen-ti-mét

weight

Tính bằng ki-lô-gam

team

Tên đội

noc

Ủy ban Olympic Quốc gia (3 ký tự)

games

Năm và mùa

year

Số nguyên

season

Hè hoặc Đông

city

Thành phố đăng cai

sport

Môn thể thao

event

Nội dung thi

medal

Vàng, Bạc, Đồng hoặc NA

Dựa trên hiểu biết hiện tại, các cột mà ta có thể kỳ vọng để xây dựng histogram là: age, height, weight và year. Lý do là histogram được tạo từ các giá trị số liên tục – chúng được dùng để biểu diễn phân bố dữ liệu số, trong đó dữ liệu được phân vào các bin và hiển thị số đếm cho mỗi bin. 

Chúng ta sẽ dùng cột age để tạo histogram. 

Tạo Plotly Histogram

Tạo một histogram trong Python với Plotly khá đơn giản; ta có thể dùng Plotly Express, là một giao diện cấp cao, dễ sử dụng…

import plotly.express as px

# Create a histogram
fig = px.histogram(olympic_data.age, x="age",
                  title="Distribution of Athletes age")
fig.show()

Histogram tạo bằng Plotly ExpressHình 3: Một histogram được tạo bằng Plotly Express

Chúng ta cũng có tùy chọn dùng Graph Objects.

import plotly.graph_objects as go

fig = go.Figure(data=[go.Histogram(x=olympic_data.age)])

# add the title
fig.update_layout(title=dict(text="Distribution of Athletes age"))
fig.show()

histogram tạo bằng Plotly Graph ObjectsHình 4: Histogram tạo bằng Plotly Graph Objects. 

Các hàm Plotly express bên trong sẽ gọi đến graph_objects và trả về một giá trị. Vì vậy, các hàm Plotly express hữu ích vì chúng cho phép người dùng vẽ trực quan hóa dữ liệu mà thường sẽ cần nhiều dòng mã hơn nếu vẽ bằng graph_objects. 

“Mô-đun plotly.express (thường được import là px) chứa các hàm có thể tạo toàn bộ figure cùng lúc và được gọi là Plotly Express hoặc PX. Plotly Express là một phần tích hợp sẵn của thư viện Plotly và là điểm khởi đầu được khuyến nghị để tạo hầu hết các figure phổ biến. Mỗi hàm Plotly Express đều sử dụng graph objects bên trong và trả về một thể hiện plotly.graph_objects.Figure.”

Nguồn: Plotly Express trong Python. 

Mặc dù Plotly express là điểm vào được khuyến nghị, chúng ta sẽ dùng graph_objects để tùy chỉnh giao diện của histogram vì nó linh hoạt hơn.  

Tùy chỉnh giao diện của Plotly histogram

Hiện tại, histogram của chúng ta khá đơn điệu. Hãy làm cho nó sinh động hơn bằng cách thay đổi phông chữ cho tiêu đề và thêm nhãn trục. 

# Create histogram
fig = go.Figure(data=[go.Histogram(x=olympic_data.age)])

fig.update_layout(
    # Set the global font
    font = {
        "family":"Times new Roman",
        "size":16
    },
    # Update title font
    title = {
        "text": "Distribution of Athletes age",
        "y": 0.9, # Sets the y position with respect to `yref`
        "x": 0.5, # Sets the x position of title with respect to `xref`
        "xanchor":"center", # Sets the title's horizontal alignment with respect to its x position
        "yanchor": "top", # Sets the title's vertical alignment with respect to its y position. "      
        "font": { # Only configures font for title
            "family":"Arial",
            "size":20,
            "color": "red"
        }
    }
)

# Add X and Y labels
fig.update_xaxes(title_text="Age")
fig.update_yaxes(title_text="Number of Athletes")

# Display plot
fig.show()

Plotly histogram với tiêu đề được cập nhậtHình 5: Plotly histogram với tiêu đề được cập nhật và đã thêm nhãn trục. 

Histogram của chúng ta trở nên nhiều thông tin hơn với những bổ sung này. 

Tiếp theo, hãy thay đổi kích thước mỗi bin. 

# Create histogram
fig = go.Figure(data = [
    go.Histogram(
        x = olympic_data.age,
        xbins=go.histogram.XBins(size=5) # Change the bin size to 5
    )
  ]
)

Plotly histogram với kích thước bin bằng 5Hình 6: Plotly histogram với kích thước bin bằng 5. 

Trong đoạn mã trên, chúng ta đặt tham số xbins trong thể hiện go.Histogram thành một thể hiện go.histogram.Xbins và xác định kích thước bin mong muốn như một tham số của thể hiện đó. Lưu ý rằng ta cũng có thể thực hiện bước này bằng một đối tượng dict với các thuộc tính tương thích. 

Cuối cùng, hãy đổi màu các bin sang cam để trực quan hóa nổi bật hơn một chút. 

# Create histogram
fig = go.Figure(data = [
    go.Histogram(
        x = olympic_data.age,
        xbins=go.histogram.XBins(size=5), # Change the bin size
        marker=go.histogram.Marker(color="orange") # Change the color
    )
  ]
)

Plotly histogram với bin màu camHình 7: Plotly histogram với bin màu cam.

Ổn hơn nhiều. 

Trong đoạn mã trên, chúng ta đặt tham số marker trong thể hiện go.Histogram thành một thể hiện go.histogram.Marker và xác định màu mong muốn như một tham số của thể hiện đó. 

Tuy nhiên, còn rất nhiều tùy chỉnh khác có thể áp dụng cho Plotly histogram, chẳng hạn như thêm văn bản khi di chuột (hover). 

Bật văn bản hover

Khi bạn di chuột qua một cột trong histogram hiện tại, văn bản chi tiết về ý nghĩa của từng cột sẽ hiển thị – xem Hình 8. 

văn bản hover hiện tại

Hình 8: Văn bản hover hiện tại khi di chuột qua histogram của chúng ta. 

Điều này chưa thật直 quan. Khi trực quan hóa dữ liệu, ta muốn biểu đồ có thể tự giải thích – kể cả ở mức văn bản hover. Do đó, hãy cập nhật thông tin hiển thị khi di chuột qua một bin. 

# Create histogram
fig = go.Figure(data = [
    go.Histogram(
        x = olympic_data.age,
        xbins=go.histogram.XBins(size=5), # Change the bin size
        marker=go.histogram.Marker(color="orange"), # Change the color
        hovertemplate="<br>".join([
            "Age Range: %{x}",
            "Number of Athletes: %{y}"]) # Make hover text more informative
    )
  ]
)

văn bản hover được cập nhậtHình 9: Thông tin hover đã được cập nhật. 

Văn bản hiển thị khi di chuột qua một bin giờ đã nhiều thông tin hơn, giúp trực quan hóa dễ diễn giải hơn. Chúng ta làm điều này bằng cách cập nhật tham số hovertemplate trong thể hiện go.Histogram. 

Thêm tùy chọn lọc

Trước đó trong hướng dẫn, ta đã nói có thể xây dựng histogram cho các thuộc tính age, height, weight và year. Không cần tạo riêng từng histogram cho mỗi thuộc tính. 

Thay vào đó, ta có thể tạo một histogram duy nhất và thêm các nút lọc cho phép bạn chuyển đổi thuộc tính hiển thị trên trực quan hóa. 

Dưới đây là cách thực hiện trong mã.

"""
Starter code provided by vestland on StackOverflow
Link: https://bit.ly/3ipqOMo
"""
# continuous features
continuous_vars = ["age", "height", "weight", "year"]

# plotly
fig = go.Figure()

# set up ONE trace
fig.add_trace(
    go.Histogram(x = olympic_data.age,
                xbins=go.histogram.XBins(size=5), # Change the bin size
                marker=go.histogram.Marker(color="orange"), # Change the color
            )
)

buttons = []

# button with one option for each dataframe
for col in continuous_vars:
    buttons.append(dict(method='restyle',
                        label=col,
                        visible=True,
                        args=[{"x":[olympic_data[col]],
                              "type":'histogram', [0]],
                        )
                  )

# some adjustments to the updatemenus
updatemenu = []
your_menu = dict()
updatemenu.append(your_menu)

updatemenu[0]['buttons'] = buttons
updatemenu[0]['direction'] = 'down'
updatemenu[0]['showactive'] = True

# add dropdown menus to the figure
fig.update_layout(showlegend=False, updatemenus=updatemenu)
fig.show()

histogram với bộ lọc được áp dụngHình 10: Histogram với các bộ lọc cho phép người dùng chuyển đổi giữa nhiều thuộc tính trên một trực quan hóa duy nhất.

Vậy là xong; nhớ xem sổ tay Tạo Plotly Histogram với dữ liệu Olympics và thử nghiệm những gì chúng ta đã xây dựng trong hướng dẫn này. 

Tổng kết 

Bạn đã biết cách tạo histogram trong Plotly Python; trong hướng dẫn này, chúng ta đã đề cập:

  • Histogram là gì và cách hoạt động
  • Tầm quan trọng của trực quan hóa dữ liệu trong phân tích dữ liệu
  • Cách bắt đầu với DataLab
  • Cách tạo histogram trong Plotly 
  • Các cách khác nhau để tùy chỉnh histogram
  • Cách áp dụng bộ lọc 

Nếu bạn muốn tìm hiểu thêm về việc tạo histogram hoặc sử dụng Plotly, hãy xem các liên kết dưới đây:

Chủ đề
Python
Trực quan hóa Dữ liệu

Các khóa học về Plotly

Khóa học

Nhập môn Trực quan hóa Dữ liệu với Plotly trong Python

4 giờ
22K
Tạo trực quan hóa dữ liệu tương tác trong Python bằng Plotly.
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow