Як створювати діаграми в Excel за допомогою Python
Діаграми перетворюють необроблені дані електронних таблиць у візуальні інсайти. Aspose.Cells FOSS for Python дозволяє створювати стовпчикові, лінійні, барові та кругові діаграми програмно, з повним контролем над серіями даних, мітками категорій, заголовком діаграми та її розташуванням, без необхідності використання Microsoft Excel.
Чому створювати діаграми з Aspose.Cells FOSS?
- Не потрібен Excel: Створюйте діаграми повністю в Python, на будь‑якій ОС.
- API «метод‑за‑типом»: Використовуйте
add_bar(),add_line(),add_pie(),add_area()та інші — один метод на тип діаграми. - Іменовані серії: Налаштовуйте кожну серію за допомогою ключових аргументів
name=,category_data=. - Точне розташування: Керуйте межами діаграми за координатами клітинок (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. Діаграма відображається порожньою або порожньою
Cause: Діапазон даних, переданий у n_series.add(), не містить значень або рядок діапазону клітинок неправильний.
Fix: Перевірте, чи діапазон клітинок відповідає вашим даним. Переконайтеся, що ws.cells["B2"].value не є None.
2. Мітки категорій не відображаються на осі X
Cause: chart.category_data не було встановлено або діапазон вказує на порожні клітинки.
Fix: Встановіть 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 у клітини в циклі, потім додайте діаграму над цим діапазоном даних.
Пов’язані ресурси: