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?
- 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.
- 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 đồ. - Series có tên: Cấu hình mỗi series bằng các đối số từ khóa
name=,category_data=. - Đặ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-fossBướ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 = 47000Bướ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() và 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: