Làm việc với Biểu đồ
Tổng quan
Aspose.Cells FOSS uses a method-per-chart-type API. Instead of a generic add(ChartType.X, ...) gọi, mỗi loại biểu đồ đều có phương thức riêng dành cho nó trên của worksheet charts bộ sưu tập:
| Phương thức | Loại biểu đồ |
|---|---|
ws.charts.add_bar(top_row, left_col, bottom_row, right_col) | Cột nhóm (biểu đồ thanh) |
ws.charts.add_line(top_row, left_col, bottom_row, right_col) | Đường |
ws.charts.add_pie(top_row, left_col, bottom_row, right_col) | Tròn |
ws.charts.add_area(top_row, left_col, bottom_row, right_col) | Diện tích |
Bốn tham số vị trí mô tả vùng hình chữ nhật trong sheet nơi biểu đồ sẽ được nhúng. Chỉ số hàng và cột là bắt đầu từ 0. Mỗi phương thức trả về một Chart đối tượng mà bạn cấu hình thêm trước khi lưu.
Hạn chế: Chỉ các loại biểu đồ LINE, BAR, PIE, AREA và STOCK mới có thể được lưu dưới dạng XLSX. Gọi wb.save() với một workbook chứa bất kỳ loại biểu đồ nào khác (ví dụ: SCATTER, WATERFALL, RADAR, TREEMAP, HISTOGRAM) sẽ gây ra NotImplementedError.
Thêm biểu đồ cột
Ví dụ dưới đây ghi một bộ dữ liệu doanh thu‑theo‑sản‑phẩm nhỏ và sau đó thêm một biểu đồ cột được đặt phía dưới dữ liệu.
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##--- Data ---
ws.cells["A1"].value = "Product"
ws.cells["B1"].value = "Revenue"
products = ["Widget A", "Widget B", "Widget C", "Widget D", "Widget E"]
revenues = [12_500, 18_200, 9_800, 21_400, 15_600]
for i, (product, revenue) in enumerate(zip(products, revenues), start=2):
ws.cells[f"A{i}"].value = product
ws.cells[f"B{i}"].value = revenue
##--- Chart (rows 7–22, columns A–H, all zero-based) ---
##top_row=6, left_col=0, bottom_row=22, right_col=7
chart = ws.charts.add_bar(6, 0, 22, 7)
chart.title = "Revenue by Product"
chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue (USD)")
chart.show_legend = True
chart.legend_position = "bottom"
workbook.save("column_chart.xlsx")
print("Saved column_chart.xlsx")Dữ liệu chiếm các hàng 1–6 (các hàng dựa trên chỉ số 0 là 0–5), vì vậy top_row=6 đặt the biểu đồ ngay bên dưới mà không chồng lấn dữ liệu.
Thêm biểu đồ đường
Biểu đồ đường hoạt động tốt cho việc hiển thị xu hướng theo thời gian. Chữ ký gọi là giống hệt với add_bar — chỉ tên phương thức thay đổi.
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##--- Monthly trend data ---
ws.cells["A1"].value = "Month"
ws.cells["B1"].value = "Page Views"
ws.cells["C1"].value = "Conversions"
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
page_views = [4_200, 5_100, 4_800, 6_300, 7_100, 6_800]
conversions = [ 210, 255, 230, 340, 390, 360]
for i, (month, pv, cv) in enumerate(zip(months, page_views, conversions), start=2):
ws.cells[f"A{i}"].value = month
ws.cells[f"B{i}"].value = pv
ws.cells[f"C{i}"].value = cv
##--- Line chart below the data ---
chart = ws.charts.add_line(8, 0, 24, 8)
chart.title = "Monthly Website Metrics"
chart.n_series.add("B2:B7", category_data="A2:A7", name="Page Views")
chart.n_series.add("C2:C7", category_data="A2:A7", name="Conversions")
chart.show_legend = True
chart.legend_position = "bottom"
workbook.save("line_chart.xlsx")
print("Saved line_chart.xlsx")Tiêu đề biểu đồ và chú giải
Đặt tiêu đề biểu đồ bằng cách gán một chuỗi thuần trực tiếp cho chart.title. Thuộc tính thuộc tính chấp nhận một str — không cố gắng truy cập vào thuộc tính con như .title.text, mà không tồn tại trong thư viện này.
##Correct
chart.title = "Quarterly Sales"
##Wrong — raises AttributeError
##chart.title.text = "Quarterly Sales"Hiển thị và vị trí của chú giải được điều khiển bởi hai thuộc tính:
chart.show_legend = True # display the legend
chart.legend_position = "bottom" # "bottom", "top", "left", "right"Để ẩn hoàn toàn chú giải, đặt chart.show_legend = False. Thuộc tính legend_position giá trị bị bỏ qua khi chú giải được ẩn.
Cấu hình chuỗi dữ liệu
Sử dụng chart.n_series.add() để gắn các phạm vi dữ liệu vào biểu đồ. Truyền tất cả đối số dưới dạng đối số khóa để tránh nhầm lẫn về thứ tự vị trí:
chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")Bạn có thể thêm nhiều chuỗi vào một biểu đồ duy nhất bằng cách gọi n_series.add thêm hơn một lần. Mỗi lần gọi sẽ thêm một chuỗi mới:
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##Headers
ws.cells["A1"].value = "Quarter"
ws.cells["B1"].value = "North"
ws.cells["C1"].value = "South"
ws.cells["D1"].value = "East"
data = [
("Q1", 8_400, 6_100, 7_200),
("Q2", 9_200, 7_400, 8_100),
("Q3", 10_500, 8_900, 9_600),
("Q4", 11_800, 9_300, 10_200),
]
for i, row in enumerate(data, start=2):
ws.cells[f"A{i}"].value = row[0]
ws.cells[f"B{i}"].value = row[1]
ws.cells[f"C{i}"].value = row[2]
ws.cells[f"D{i}"].value = row[3]
chart = ws.charts.add_bar(6, 0, 22, 8)
chart.title = "Regional Sales by Quarter"
chart.n_series.add("B2:B5", category_data="A2:A5", name="North")
chart.n_series.add("C2:C5", category_data="A2:A5", name="South")
chart.n_series.add("D2:D5", category_data="A2:A5", name="East")
chart.show_legend = True
chart.legend_position = "bottom"
workbook.save("multi_series_chart.xlsx")
print("Saved multi_series_chart.xlsx")Dữ liệu danh mục
Nhãn danh mục có thể được đặt ở mức biểu đồ hoặc ở mức chuỗi riêng lẻ.
Dữ liệu danh mục cấp biểu đồ được áp dụng cho tất cả các chuỗi theo mặc định:
chart.category_data = "A2:A5"Dữ liệu danh mục cấp chuỗi (qua category_data đối số từ khóa cho n_series.add) ghi đè cài đặt cấp biểu đồ cho chuỗi cụ thể đó:
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")Khi mọi chuỗi chia sẻ cùng một phạm vi danh mục, việc thiết lập chart.category_data một lần là ngắn gọn hơn. Khi các chuỗi có các phạm vi danh mục khác nhau — ví dụ, hai bộ dữ liệu với các khoảng thời gian khác nhau — hãy sử dụng đối số từ khóa cho từng chuỗi thay vào đó.
Vị trí biểu đồ
Bốn tham số vị trí cho mỗi add_* phương thức định nghĩa một hình chữ nhật trong bảng, được đo bằng chỉ số hàng và cột bắt đầu từ 0:
add_bar(top_row, left_col, bottom_row, right_col)| Tham số | Ý nghĩa |
|---|---|
top_row | Chỉ số bắt đầu từ 0 của hàng đầu tiên mà biểu đồ chiếm. |
left_col | Chỉ mục bắt đầu từ 0 của cột bên trái nhất |
bottom_row | Chỉ mục bắt đầu từ 0 của hàng cuối cùng mà biểu đồ chiếm |
right_col | Chỉ mục bắt đầu từ 0 của cột bên phải nhất |
Một mẫu phổ biến là đặt biểu đồ ngay dưới dữ liệu. Nếu dữ liệu của bạn kết thúc tại hàng Excel 6 (chỉ mục hàng bắt đầu từ 0 là 5), bắt đầu biểu đồ tại top_row=6:
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##Data in rows 1–5 (zero-based 0–4)
labels = ["Alpha", "Beta", "Gamma", "Delta", "Epsilon"]
values = [30, 45, 28, 60, 52]
ws.cells["A1"].value = "Category"
ws.cells["B1"].value = "Score"
for i, (label, val) in enumerate(zip(labels, values), start=2):
ws.cells[f"A{i}"].value = label
ws.cells[f"B{i}"].value = val
##Data ends at zero-based row 5 (Excel row 6).
##Place chart from row 6 to row 22, columns A–H (0–7).
chart = ws.charts.add_bar(6, 0, 22, 7)
chart.title = "Category Scores"
chart.n_series.add("B2:B6", category_data="A2:A6", name="Score")
chart.show_legend = False
workbook.save("positioned_chart.xlsx")
print("Saved positioned_chart.xlsx")Đặt chiều cao biểu đồ đủ để đọc được: chiều cao ít nhất 15 hàng (bottom_row - top_row >= 15) và chiều rộng ít nhất 6 cột là điểm khởi đầu hợp lý.
Những lỗi thường gặp
| Sai | Đúng | Tại sao |
|---|---|---|
ws.charts.add(ChartType.COLUMN, ...) | ws.charts.add_bar(...) | Không gọi ws.charts.add(ChartType.X, ...) trực tiếp cho các kiểu không được hỗ trợ — nó sẽ gây lỗi NotImplementedError cho 11 trong số 16 loại biểu đồ. Sử dụng add_bar(), add_line(), add_pie(), add_area(), hoặc add_stock() thay thế. |
chart.title.text = "My Chart" | chart.title = "My Chart" | chart.title là một thuộc tính chuỗi thuần, không phải một đối tượng có .text thuộc tính phụ. |
chart.n_series.add("B2:B5", "A2:A5", "Revenue") | chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue") | Tham số thứ hai và thứ ba phải được truyền dưới dạng đối số khóa để tránh mơ hồ. |
chart = ws.charts.add_bar(0, 0, 15, 7) (đè dữ liệu) | Đặt top_row bên dưới hàng dữ liệu cuối cùng | Biểu đồ chồng lên dữ liệu làm ẩn các giá trị và gây bố cục rối rắm. |
chart.legend_position = "bottom" không chart.show_legend = True | Đặt chart.show_legend = True đầu tiên | legend_position không có tác dụng khi show_legend là False. |
Xem Thêm
- Tham chiếu API: Tài liệu đầy đủ về lớp và phương thức cho
aspose.cells_foss - Cơ sở Kiến thức: Hướng dẫn cách thực hiện theo nhiệm vụ
- Tổng quan Sản phẩm: Tóm tắt tính năng và khả năng
- Bắt đầu / Cài đặt: cài đặt và thiết lập pip
- Blog: Python Hướng dẫn Biểu đồ Excel: Hướng dẫn tạo biểu đồ từng bước