Работа с диаграми
Преглед
Aspose.Cells FOSS използва API, базирано на метод за всеки тип диаграма. Вместо общо извикване add(ChartType.X, ...), всеки тип диаграма има собствен специализиран метод в колекцията charts на работния лист:
| Метод | Тип диаграма |
|---|---|
ws.charts.add_bar(top_row, left_col, bottom_row, right_col) | Групирана колона (стълбовидна диаграма) |
ws.charts.add_line(top_row, left_col, bottom_row, right_col) | Линия |
ws.charts.add_pie(top_row, left_col, bottom_row, right_col) | Кръгова |
ws.charts.add_area(top_row, left_col, bottom_row, right_col) | Област |
Всички четири позиционни параметъра описват правоъгълната област в листа, където графиката ще бъде вградена. Индексите на редовете и колоните са нулево-базирани. Всеки метод връща обект Chart, който можете да конфигурирате допълнително преди запазване.
Ограничение: Само типове диаграми LINE, BAR, PIE, AREA и STOCK могат да се запазват в XLSX. Извикването на
wb.save()с работна книга, която съдържа друг тип диаграма (например SCATTER, WATERFALL, RADAR, TREEMAP, HISTOGRAM) ще предизвикаNotImplementedError.
Добавяне на колонна диаграма
Примерът по-долу записва малък набор от данни за приходите по продукти и след това добавя колонна диаграма, разположена под данните.
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")Данните заемат редове 1–6 (редове с нулева индексация 0–5), така че top_row=6 поставя диаграмата непосредствено под тях, без да се припокрива с данните.
Добавяне на линейна диаграма
Линейните диаграми са подходящи за показване на тенденции във времето. Подписът на извикването е
идентичен на add_bar — само името на метода се променя.
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")Заглавие на диаграмата и легенда
Задайте заглавието на диаграмата, като присвоите обикновен низ директно на chart.title. Свойството приема str — не се опитвайте да достъпвате под‑свойство като .title.text, което не съществува в тази библиотека.
##Correct
chart.title = "Quarterly Sales"
##Wrong — raises AttributeError
##chart.title.text = "Quarterly Sales"Видимостта и позицията на легендата се контролират от две свойства:
chart.show_legend = True # display the legend
chart.legend_position = "bottom" # "bottom", "top", "left", "right"За да скриете легендата изцяло, задайте chart.show_legend = False. Стойността legend_position се игнорира, когато легендата е скрита.
Конфигурация на серия от данни
Използвайте chart.n_series.add(), за да прикрепите диапазони от данни към диаграма. Предавайте всички аргументи като ключови аргументи, за да избегнете объркване с позиционния ред:
chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")Можете да добавяте множество серии към една диаграма, като извикате n_series.add повече от веднъж. Всяко извикване добавя нова серия:
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")Данни за категория
Етикетите за категории могат да се задават на ниво диаграма или на ниво отделна серия.
Данните за категории на ниво диаграма се прилагат за всички серии по подразбиране:
chart.category_data = "A2:A5"Данни за категория на ниво серия (чрез аргумента за ключова дума category_data към
n_series.add) заменят настройката на ниво диаграма за конкретната серия:
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")Когато всяка серия споделя един и същи диапазон на категориите, задаването на chart.category_data
еднократно е по‑кратко. Когато сериите имат различни диапазони на категориите — например,
два набора от данни с различни периоди — използвайте аргумента за ключова дума за всяка серия
вместо това.
Позициониране на диаграмата
Четирите позиционни параметъра на всеки add_* метод определят ограничителен правоъгълник в листа, измерен в индекси на редове и колони, започващи от нула:
add_bar(top_row, left_col, bottom_row, right_col)| Parameter | Meaning |
|---|---|
top_row | Нулево-базиран индекс на първия ред, зает от диаграмата |
left_col | Нулево-базиран индекс на най-лявата колона |
bottom_row | Нулево-базиран индекс на последния ред, зает от диаграмата |
right_col | Нулево-базиран индекс на най-дясната колона |
Обича се да се поставя диаграмата директно под данните. Ако вашите данни
завършват на ред 6 в Excel (индекс на реда, започващ от 0, е 5), започнете диаграмата на 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")Направете диаграмата достатъчно висока, за да бъде четлива: височина поне 15 реда
(bottom_row - top_row >= 15) и ширина поне 6 колони е разумна
начална точка.
Чести грешки
| Wrong | Right | Why |
|---|---|---|
ws.charts.add(ChartType.COLUMN, ...) | ws.charts.add_bar(...) | Не извиквайте ws.charts.add(ChartType.X, ...) директно за неподдържани типове — ще предизвика NotImplementedError за 11 от 16 типа диаграми. Вместо това използвайте add_bar(), add_line(), add_pie(), add_area() или add_stock(). |
chart.title.text = "My Chart" | chart.title = "My Chart" | chart.title е обикновено свойство от тип низ, а не обект с подпомощно свойство .text. |
chart.n_series.add("B2:B5", "A2:A5", "Revenue") | chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue") | Вторият и третият параметър трябва да се предават като аргументи с име, за да се избегне двусмислие. |
chart = ws.charts.add_bar(0, 0, 15, 7) (препокрива данни) | Поставете top_row под последния ред с данни | Диаграма, която препокрива данните, скрива стойностите и причинява объркващи оформления. |
chart.legend_position = "bottom" без chart.show_legend = True | Задайте chart.show_legend = True първо | legend_position няма ефект, когато show_legend е False. |
Виж също
- API Reference: Пълна документация за класове и методи за
aspose.cells_foss - Knowledge Base: Ръководства за изпълнение на задачи
- Product Overview: Обобщение на функциите и възможностите
- Getting Started / Installation: pip install и настройка
- Blog: Python Excel Chart Tutorial: Ръководство за създаване на графика стъпка по стъпка