Cách Tạo Biểu Đồ trong Excel bằng Python

Cách Tạo Biểu Đồ trong Excel bằng Python

Biểu đồ biến dữ liệu bảng tính thô thành những hiểu biết trực quan. Aspose.Cells FOSS for Python cho phép bạn tạo các biểu đồ cột, đường, thanh và tròn một cách lập trình, với khả năng kiểm soát đầy đủ các chuỗi dữ liệu, nhãn danh mục, tiêu đề biểu đồ và vị trí, mà không cần Microsoft Excel.

Tại sao tạo biểu đồ với Aspose.Cells FOSS?

  1. Không cần Excel: Xây dựng biểu đồ hoàn toàn bằng Python, trên bất kỳ hệ điều hành nào.
  2. API theo phương pháp cho từng loại: Sử dụng add_bar(), add_line(), add_pie(), add_area(), và hơn nữa — một phương pháp cho mỗi loại biểu đồ.
  3. Series có tên: Cấu hình mỗi series bằng các đối số từ khóa name=, category_data=.
  4. Đặt vị trí chính xác: Kiểm soát giới hạn biểu đồ bằng tọa độ ô (top_row, left_col, bottom_row, right_col).

Hướng Dẫn Từng Bước

Bước 1: Cài đặt Aspose.Cells FOSS cho Python

pip install aspose-cells-foss

Bước 2: Tạo một Workbook và Điền dữ liệu

Tạo một workbook mới và ghi dữ liệu số cùng nhãn danh mục vào các ô:

from aspose.cells_foss import Workbook, Cell

workbook = Workbook()
ws = workbook.worksheets[0]
ws.name = "Sales Data"

##Category labels in column A (rows 2-5, leaving row 1 for a header)
ws.cells["A1"].value = "Quarter"
ws.cells["A2"].value = "Q1"
ws.cells["A3"].value = "Q2"
ws.cells["A4"].value = "Q3"
ws.cells["A5"].value = "Q4"

##Revenue series in column B
ws.cells["B1"].value = "Revenue"
ws.cells["B2"].value = 50000
ws.cells["B3"].value = 62000
ws.cells["B4"].value = 71000
ws.cells["B5"].value = 89000

##Expense series in column C
ws.cells["C1"].value = "Expenses"
ws.cells["C2"].value = 32000
ws.cells["C3"].value = 38000
ws.cells["C4"].value = 41000
ws.cells["C5"].value = 47000

Bước 3: Thêm biểu đồ cột

Sử dụng ws.charts.add_bar(top_row, left_col, bottom_row, right_col) để chèn biểu đồ cột. Phương thức trả về một đối tượng biểu đồ trực tiếp:

##Insert a column chart occupying rows 7-22, columns 0-7
chart = ws.charts.add_bar(6, 0, 22, 7)

Các chỉ số hàng và cột được đánh số bắt đầu từ 0.


Bước 4: Cấu hình Data Series

Thêm mỗi chuỗi dữ liệu bằng cách sử dụng chart.n_series.add() với các đối số từ khóa:

##Add Revenue series
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")

##Add Expenses series
chart.n_series.add("C2:C5", category_data="A2:A5", name="Expenses")

Tham số category_data chỉ định phạm vi ô cho các nhãn trục x. Tham số name thiết lập nhãn chú giải chuỗi.


Bước 5: Đặt tiêu đề biểu đồ và dữ liệu danh mục

Đặt tiêu đề biểu đồ dưới dạng chuỗi thuần:

chart.title = "Quarterly Sales vs Expenses"
chart.category_data = "A2:A5"   # x-axis labels at chart level
chart.show_legend = True
chart.legend_position = "bottom"

Bước 6: Lưu Workbook

workbook.save("sales_chart.xlsx")
print("Workbook with chart saved.")

Ví dụ biểu đồ cột hoàn chỉnh:

from aspose.cells_foss import Workbook, Cell

workbook = Workbook()
ws = workbook.worksheets[0]

##Data
labels = ["Q1", "Q2", "Q3", "Q4"]
revenue = [50000, 62000, 71000, 89000]
expenses = [32000, 38000, 41000, 47000]

ws.cells["A1"].value = "Quarter"
ws.cells["B1"].value = "Revenue"
ws.cells["C1"].value = "Expenses"

for i, (label, rev, exp) in enumerate(zip(labels, revenue, expenses), start=2):
    ws.cells[f"A{i}"].value = label
    ws.cells[f"B{i}"].value = rev
    ws.cells[f"C{i}"].value = exp

chart = ws.charts.add_bar(6, 0, 22, 7)
chart.title = "Quarterly Sales vs Expenses"
chart.category_data = "A2:A5"
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")
chart.n_series.add("C2:C5", category_data="A2:A5", name="Expenses")
chart.show_legend = True
chart.legend_position = "bottom"

workbook.save("quarterly_chart.xlsx")

Bước 7: Tạo biểu đồ đường

Mẫu tương tự cũng hoạt động cho add_line():

from aspose.cells_foss import Workbook, Cell

workbook = Workbook()
ws = workbook.worksheets[0]

months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
revenue = [42000, 47500, 53000, 49000, 61000, 68000]

ws.cells["A1"].value = "Month"
ws.cells["B1"].value = "Revenue"

for i, (m, r) in enumerate(zip(months, revenue), start=2):
    ws.cells[f"A{i}"].value = m
    ws.cells[f"B{i}"].value = r

chart = ws.charts.add_line(8, 0, 24, 8)
chart.title = "Monthly Revenue Trend"
chart.category_data = "A2:A7"
chart.n_series.add("B2:B7", category_data="A2:A7", name="Revenue")
chart.show_legend = True

workbook.save("trend_chart.xlsx")

Các vấn đề thường gặp và cách khắc phục

1. Biểu đồ hiển thị trống hoặc không có dữ liệu

Cause: Phạm vi dữ liệu được truyền tới n_series.add() không chứa giá trị, hoặc chuỗi phạm vi ô không đúng.
Fix: Xác minh phạm vi ô khớp với dữ liệu của bạn. Kiểm tra ws.cells["B2"].value không phải là None.

2. Nhãn danh mục không hiển thị trên trục x

Cause: chart.category_data chưa được đặt, hoặc phạm vi trỏ tới các ô trống.
Fix: Đặt chart.category_data = "A2:A5" ở nơi cột A chứa các chuỗi nhãn của bạn.

3. Vị trí biểu đồ chồng lên dữ liệu

Nguyên nhân: Giới hạn hàng trong add_bar() trùng lặp với vùng dữ liệu.
Cách khắc phục: Đặt biểu đồ bên dưới dữ liệu: ws.charts.add_bar(data_last_row + 2, 0, data_last_row + 18, 7).

4. AttributeError: 'ChartCollection' object has no attribute 'add'

Cause: Thư viện FOSS sử dụng API method-per-type, không phải add(ChartType.COLUMN, ...).
Fix: Sử dụng ws.charts.add_bar(...), ws.charts.add_line(...), ws.charts.add_pie(...), hoặc ws.charts.add_area(...).


Câu hỏi thường gặp

Các loại biểu đồ nào được hỗ trợ?

Sử dụng add_bar(), add_line(), add_pie(), add_area()add_stock() cho các kiểu phổ biến nhất. Năm loại này có hỗ trợ tuần tự hoá XML đầy đủ. Kiểm tra lớp ChartCollection để biết danh sách đầy đủ các phương thức add_* có sẵn.

Tôi có thể tạo biểu đồ trong một tệp Excel hiện có không?

Vâng. Tải workbook bằng Workbook("existing.xlsx"), truy cập sheet mục tiêu và thêm biểu đồ bằng phương pháp ws.charts.add_*() thích hợp.

Làm thế nào để đặt tiêu đề biểu đồ?

Gán một chuỗi thuần: chart.title = "My Chart Title". Không có thuộc tính phụ .text: tiêu đề là chính chuỗi đó.

Phương pháp này có tương thích với pandas không?

Có. Ghi các giá trị pandas DataFrame vào các ô trong một vòng lặp, sau đó thêm biểu đồ trên phạm vi dữ liệu đó.


Tài nguyên liên quan:

 Tiếng Việt