Как да създадем диаграми в Excel с Python

Как да създадем диаграми в Excel с Python

Диаграмите превръщат суровите данни от електронни таблици във визуални прозрения. Aspose.Cells FOSS for Python ви позволява да създавате колонни, линейни, стълбови и пай диаграми програмено, с пълен контрол върху сериите от данни, етикетите на категориите, заглавието на диаграмата и позицията, без да се изисква Microsoft Excel.

Защо да създавате диаграми с Aspose.Cells FOSS?

  1. Не е необходим Excel: Създавайте графики изцяло в Python, на всяка ОС.
  2. API метод‑по‑тип: Използвайте add_bar(), add_line(), add_pie(), add_area() и други — по един метод за тип графика.
  3. Именувани серии: Конфигурирайте всяка серия с аргументи name=, category_data=.
  4. Точно позициониране: Управлявайте границите на графиката чрез координати на клетки (top_row, left_col, bottom_row, right_col).

Ръководство стъпка по стъпка

Стъпка 1: Инсталирайте Aspose.Cells FOSS за Python

pip install aspose-cells-foss

Стъпка 2: Създаване на работна книга и попълване на данни

Създайте нова работна книга и запишете числови данни плюс етикети за категории в клетки:

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

Стъпка 3: Добавете колонна диаграма

Използвайте ws.charts.add_bar(top_row, left_col, bottom_row, right_col), за да вмъкнете колонна диаграма. Методът връща обект на диаграма директно:

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

Индексите на редовете и колоните са нулево базирани.


Стъпка 4: Конфигуриране на серия от данни

Добавете всяка серия данни, използвайки chart.n_series.add() с аргументи по ключови думи:

##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")

Аргументът category_data определя диапазона от клетки за етикетите по оста X. Аргументът name задава етикета на легендата на серията.


Стъпка 5: Задаване на заглавието на диаграмата и данните за категориите

Задайте заглавието на диаграмата като обикновен низ:

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"

Стъпка 6: Запазете работната книга

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

Пълен пример за колонна диаграма:

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")

Стъпка 7: Създаване на линейна диаграма

Същият шаблон работи за 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")

Чести проблеми и решения

1. Диаграмата се показва празна или празна

Причина: Диапазонът от данни, предаден на n_series.add(), не съдържа стойности или низът за диапазона на клетките е неправилен.
Решение: Проверете дали диапазонът на клетките съответства на вашите данни. Уверете се, че ws.cells["B2"].value не е None.

2. Етикетите на категориите не се показват на оста x

Причина: chart.category_data не беше зададено, или диапазонът сочи към празни клетки.
Поправка: Задайте chart.category_data = "A2:A5", където колоната A съдържа вашите низове за етикети.

3. Позицията на диаграмата се припокрива с данните

Причина: Границите на редовете в add_bar() се припокриват с областта на данните.
Решение: Поставете диаграмата под данните: ws.charts.add_bar(data_last_row + 2, 0, data_last_row + 18, 7).

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

Причина: FOSS библиотеката използва API метод‑по‑тип, а не add(ChartType.COLUMN, ...).
Решение: Използвайте ws.charts.add_bar(...), ws.charts.add_line(...), ws.charts.add_pie(...) или ws.charts.add_area(...).


Често задавани въпроси

Кои типове диаграми се поддържат?

Използвайте add_bar(), add_line(), add_pie(), add_area() и add_stock() за най‑често срещаните типове. Тези пет имат пълна поддръжка за XML сериализация. Проверете класа ChartCollection за пълен списък на наличните add_* методи.

Мога ли да създавам диаграми в съществуващ Excel файл?

Да. Заредете работната книга с Workbook("existing.xlsx"), достъпете целевия лист и добавете диаграма, използвайки съответния метод ws.charts.add_*().

Как да зададем заглавието на диаграмата?

Присвоете прост низ: chart.title = "My Chart Title". Няма под‑свойство .text: заглавието е самият низ.

Този подход съвместим ли е с pandas?

Да. Запишете стойностите от pandas DataFrame в клетки в цикъл, след което добавете диаграма върху този диапазон от данни.


Свързани ресурси:

 Български