Работа с диаграми
Преглед
Aspose.Cells FOSS uses a method-per-chart-type API. Instead of a generic add(ChartType.X, ...) извикайте, всеки тип диаграма има собствен специализиран метод в на работния лист charts колекция:
| Метод | Тип диаграма |
|---|---|
ws.charts.add_bar(top_row, left_col, bottom_row, right_col) | Clustered column (bar chart) |
ws.charts.add_line(top_row, left_col, bottom_row, right_col) | Line |
ws.charts.add_pie(top_row, left_col, bottom_row, right_col) | Pie |
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. Свойството свойството приема a 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 веднъж е по-кратко. Когато сериите имат различни диапазони от категории — например, два набора от данни с различни периоди — използвайте аргумента per-series вместо.
Позициониране на диаграмата
Четирите позиционни параметъра за всеки add_* метод определя ограничителен правоъгълник в листа, измерен в нулево-базирани индекси на редове и колони:
add_bar(top_row, left_col, bottom_row, right_col)| Параметър | Значение |
|---|---|
top_row | Нулево-базиран индекс на първия ред, зает от диаграмата |
left_col | Нулево базиран индекс на най-лявата колона |
bottom_row | Нулево базиран индекс на последния ред, зает от диаграмата |
right_col | Нулево базиран индекс на най-дясната колона |
Често срещан модел е да се постави диаграмата директно под данните. Ако вашите данни завършват на ред 6 в Excel (нулево базиран индекс на ред 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 колони е разумна начална точка.
Чести грешки
| Грешно | Вярно | Защо |
|---|---|---|
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 справка: Пълна документация за класове и методи за
aspose.cells_foss - База от знания: Ръководства, ориентирани към задачи
- Преглед на продукта: Обобщение на функциите и възможностите
- Започване / Инсталация: pip install и настройка
- Блог: Python Урок за диаграми в Excel: Ръководство за създаване на диаграми стъпка по стъпка