Sử Dụng Python Để Tạo Biểu Đồ và Đồ Thị Trong Excel


Hướng dẫn chi tiết – cầm tay chỉ việc – dành cho dân văn phòng, kế toán, HR, analyst muốn tự động hóa quy trình vẽ chart


1. Tại Sao Nên Tạo Biểu Đồ Excel Bằng Python?

Trong công việc văn phòng, biểu đồ giúp bạn:

  • Trình bày dữ liệu đẹp và dễ hiểu
  • Phân tích xu hướng nhanh chóng
  • Làm báo cáo tuần/tháng/năm chuyên nghiệp

Nhưng… vẽ chart bằng tay mỗi lần rất tốn thời gian: phải chọn range, chỉnh màu, đổi tên series, đặt nhãn…

Python giải quyết vấn đề này:

  • Tự động tạo biểu đồ chỉ với 1 lệnh
  • Tự chọn vùng dữ liệu
  • Áp dụng format, màu sắc, kiểu biểu đồ đồng nhất
  • Tự tạo file Excel kèm chart → CHẠY LẠI BẤT CỨ LÚC NÀO

Đúng nghĩa “bấm 1 cái – có chart đẹp ngay”.


2. Chuẩn Bị Môi Trường

Bạn cần các thư viện:

pip install openpyxl pandas matplotlib
  • pandas → xử lý dữ liệu
  • openpyxl → ghi Excel & vẽ chart
  • matplotlib → tạo hình ảnh biểu đồ nếu bạn muốn chèn vào Excel

3. Dữ Liệu Mẫu Sử Dụng

Giả sử bạn có file:

DoanhThu_Thang.xlsx

ThángDoanhThu
1120000000
2150000000
3180000000
4220000000

4. Tạo Biểu Đồ Excel Bằng Python (Cầm Tay Chỉ Việc)

Bước 1 – Đọc dữ liệu từ Excel

import pandas as pd

df = pd.read_excel("DoanhThu_Thang.xlsx")
print(df)

Giải thích:
pandas đọc file → trả về DataFrame có 2 cột ThángDoanhThu.


Bước 2 – Ghi bảng dữ liệu sang file Excel mới

from openpyxl import Workbook

wb = Workbook()
ws = wb.active
ws.title = "Data"

# Ghi header
ws.append(list(df.columns))

# Ghi từng dòng dữ liệu
for row in df.values:
    ws.append(list(row))

Bước 3 – Tạo biểu đồ cột (Column Chart)

from openpyxl.chart import BarChart, Reference

chart = BarChart()
chart.title = "Biểu đồ doanh thu theo tháng"
chart.x_axis.title = "Tháng"
chart.y_axis.title = "Doanh thu (VND)"

# Vùng nhãn & vùng giá trị
cats = Reference(ws, min_col=1, min_row=2, max_row=ws.max_row)
data = Reference(ws, min_col=2, min_row=1, max_row=ws.max_row)

chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)

# Chèn biểu đồ vào vị trí E2
ws.add_chart(chart, "E2")

Giải thích từng dòng:

  • BarChart() → tạo chart dạng cột
  • Reference() → chọn vùng dữ liệu
  • titles_from_data=True → dùng dòng 1 làm tên Series
  • ws.add_chart() → gắn chart vào sheet

Bước 4 – Lưu file

wb.save("DoanhThu_Chart.xlsx")

Kết quả:
File Excel chứa bảng dữ liệu + biểu đồ tự động, format chuẩn, không lo sai sót.


5. Tạo Biểu Đồ Đường (Line Chart)

Chỉ cần đổi BarChart() thành LineChart():

from openpyxl.chart import LineChart

line_chart = LineChart()
line_chart.title = "Xu hướng doanh thu"
line_chart.x_axis.title = "Tháng"
line_chart.y_axis.title = "Doanh thu"

line_chart.add_data(data, titles_from_data=True)
line_chart.set_categories(cats)

ws.add_chart(line_chart, "E18")

6. Tạo Biểu Đồ Matplotlib và Chèn Vào Excel (Pro hơn)

Dùng khi bạn muốn style đẹp như Power BI.

Bước 1 – Tạo hình bằng matplotlib

import matplotlib.pyplot as plt

plt.figure(figsize=(6,4))
plt.plot(df['Tháng'], df['DoanhThu'], marker='o')
plt.title("Doanh thu theo tháng")
plt.xlabel("Tháng")
plt.ylabel("Doanh thu")
plt.grid(True)

plt.savefig("chart.png")
plt.close()

Bước 2 – Chèn hình vào Excel

from openpyxl.drawing.image import Image

img = Image("chart.png")
ws.add_image(img, "H2")

7. Mẫu Script Tự Động Hoàn Chỉnh (Copy-Paste Là Chạy)

import pandas as pd
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
from openpyxl.drawing.image import Image
import matplotlib.pyplot as plt

df = pd.read_excel("DoanhThu_Thang.xlsx")

# Tạo Excel
wb = Workbook()
ws = wb.active
ws.title = "Data"
ws.append(list(df.columns))
for row in df.values:
    ws.append(list(row))

# Tạo biểu đồ cột
chart = BarChart()
chart.title = "Doanh thu theo tháng"
cats = Reference(ws, min_col=1, min_row=2, max_row=ws.max_row)
data = Reference(ws, min_col=2, min_row=1, max_row=ws.max_row)
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)
ws.add_chart(chart, "E2")

# Tạo biểu đồ matplotlib
plt.figure(figsize=(6,4))
plt.plot(df['Tháng'], df['DoanhThu'], marker='o')
plt.title("Doanh thu theo tháng")
plt.xlabel("Tháng")
plt.ylabel("Doanh thu")
plt.grid(True)
plt.savefig("chart.png")
plt.close()

# Chèn hình
ws.add_image(Image("chart.png"), "H2")

wb.save("DoanhThu_Chart.xlsx")

8. Ứng Dụng Thực Tế Cho Dân Văn Phòng

✔ Kế toán

  • Vẽ biểu đồ doanh thu – chi phí
  • Tự động hóa báo cáo tháng/quý/năm

✔ HR

  • Biểu đồ headcount
  • Biểu đồ attrition rate theo tháng

✔ Sale – Marketing

  • Chart KPI doanh số
  • Chart tăng trưởng khách hàng

✔ Quản lý dự án

  • Chart tiến độ
  • Burn-down chart

Code tham khảo thêm:

import pandas as pd

from openpyxl import Workbook

from openpyxl.chart import BarChart, LineChart, Reference

from openpyxl.utils.dataframe import dataframe_to_rows

# ===============================

# BƯỚC 1: ĐỌC FILE DỮ LIỆU GỐC

# ===============================

# Đảm bảo file DoanhThu_30k.xlsx nằm cùng thư mục với file .py này

input_file = “DoanhThu_30k.xlsx”

print(“Đang đọc dữ liệu từ:”, input_file)

df = pd.read_excel(input_file)

# Kiểm tra nhanh vài dòng

print(df.head())

# ======================================

# BƯỚC 2: TỔNG HỢP DỮ LIỆU CHO BIỂU ĐỒ

# ======================================

# 1) Doanh thu ròng theo Tháng

df_thang = (

    df.groupby(“Thang”, as_index=False)[“DoanhThuRong”]

      .sum()

      .sort_values(“Thang”)

)

# 2) Doanh thu ròng theo Khu Vực

df_khuvuc = (

    df.groupby(“KhuVuc”, as_index=False)[“DoanhThuRong”]

      .sum()

      .sort_values(“KhuVuc”)

)

# 3) Doanh thu ròng theo Chi Nhánh

df_chinhanh = (

    df.groupby(“MaChiNhanh”, as_index=False)[“DoanhThuRong”]

      .sum()

      .sort_values(“MaChiNhanh”)

)

print(“Tổng hợp xong dữ liệu cho biểu đồ.”)

# =======================================

# BƯỚC 3: TẠO FILE EXCEL BÁO CÁO MỚI

# =======================================

wb = Workbook()

# — Sheet 1: Theo tháng —

ws_thang = wb.active

ws_thang.title = “TheoThang”

ws_thang.append([“Thang”, “DoanhThuRong”])

for r in dataframe_to_rows(df_thang, index=False, header=False):

    ws_thang.append(r)

# — Sheet 2: Theo khu vực —

ws_khuvuc = wb.create_sheet(“TheoKhuVuc”)

ws_khuvuc.append([“KhuVuc”, “DoanhThuRong”])

for r in dataframe_to_rows(df_khuvuc, index=False, header=False):

    ws_khuvuc.append(r)

# — Sheet 3: Theo chi nhánh —

ws_cn = wb.create_sheet(“TheoChiNhanh”)

ws_cn.append([“MaChiNhanh”, “DoanhThuRong”])

for r in dataframe_to_rows(df_chinhanh, index=False, header=False):

    ws_cn.append(r)

print(“Đã ghi dữ liệu tổng hợp vào file Excel.”)

# =======================================

# BƯỚC 4: TẠO BIỂU ĐỒ TRONG EXCEL

# =======================================

# ———- Biểu đồ 1: LineChart theo Tháng ———-

line_chart = LineChart()

line_chart.title = “Doanh thu ròng theo tháng”

line_chart.x_axis.title = “Tháng”

line_chart.y_axis.title = “Doanh thu ròng”

# Chọn vùng dữ liệu cho biểu đồ

# Cột 1: Tháng (nhãn trục X)

# Cột 2: DoanhThuRong (giá trị)

cats_thang = Reference(ws_thang, min_col=1, min_row=2, max_row=ws_thang.max_row)

data_thang = Reference(ws_thang, min_col=2, min_row=1, max_row=ws_thang.max_row)

line_chart.add_data(data_thang, titles_from_data=True)

line_chart.set_categories(cats_thang)

# Chèn biểu đồ vào sheet TheoThang tại ô E2

ws_thang.add_chart(line_chart, “E2”)

# ———- Biểu đồ 2: BarChart theo Khu Vực ———-

bar_kv = BarChart()

bar_kv.title = “Doanh thu ròng theo khu vực”

bar_kv.x_axis.title = “Khu vực”

bar_kv.y_axis.title = “Doanh thu ròng”

cats_kv = Reference(ws_khuvuc, min_col=1, min_row=2, max_row=ws_khuvuc.max_row)

data_kv = Reference(ws_khuvuc, min_col=2, min_row=1, max_row=ws_khuvuc.max_row)

bar_kv.add_data(data_kv, titles_from_data=True)

bar_kv.set_categories(cats_kv)

ws_khuvuc.add_chart(bar_kv, “E2”)

# ———- Biểu đồ 3: BarChart theo Chi Nhánh ———-

bar_cn = BarChart()

bar_cn.title = “Doanh thu ròng theo chi nhánh”

bar_cn.x_axis.title = “Chi nhánh”

bar_cn.y_axis.title = “Doanh thu ròng”

cats_cn = Reference(ws_cn, min_col=1, min_row=2, max_row=ws_cn.max_row)

data_cn = Reference(ws_cn, min_col=2, min_row=1, max_row=ws_cn.max_row)

bar_cn.add_data(data_cn, titles_from_data=True)

bar_cn.set_categories(cats_cn)

ws_cn.add_chart(bar_cn, “E2”)

# =======================================

# BƯỚC 5: LƯU FILE KẾT QUẢ

# =======================================

output_file = “BaoCao_DoanhThu_Chart.xlsx”

wb.save(output_file)

print(“Đã tạo xong file báo cáo:”, output_file)

Sau khi chạy xong sẽ có file:

✅ BaoCao_DoanhThu_Chart.xlsx

Mở file này lên, bạn sẽ thấy:

Sheet TheoThang: bảng + biểu đồ đường

Sheet TheoKhuVuc: bảng + biểu đồ cột

Sheet TheoChiNhanh: bảng + biểu đồ cột


9. Kết Luận: Bạn Nên Dùng Python Tạo Chart Nếu…

  • Bạn muốn báo cáo đẹp và tự động
  • Dữ liệu thay đổi liên tục
  • Bạn muốn tăng tốc công việc và giảm sai sót
  • Bạn thích quy trình “1 nút chạy → ra file hoàn chỉnh”

Scroll to Top