Jak tworzyć wykresy w Excelu przy użyciu Pythona

Jak tworzyć wykresy w Excelu przy użyciu Pythona

Wykresy przekształcają surowe dane arkusza kalkulacyjnego w wizualne wnioski. Aspose.Cells FOSS for Python umożliwia programowe tworzenie wykresów kolumnowych, liniowych, słupkowych i kołowych, z pełną kontrolą nad seriami danych, etykietami kategorii, tytułem wykresu i pozycją, bez konieczności używania Microsoft Excel.

Dlaczego tworzyć wykresy przy użyciu Aspose.Cells FOSS?

  1. No Excel required: Brak wymaganego Excela: Twórz wykresy w pełni w Pythonie, na dowolnym systemie operacyjnym.
  2. Method-per-type API: API metod‑po‑typie: Użyj add_bar(), add_line(), add_pie(), add_area() i innych — jedna metoda na typ wykresu.
  3. Named series: Nazwane serie: Konfiguruj każdą serię przy użyciu argumentów słów kluczowych name=, category_data=.
  4. Precise placement: Precyzyjne rozmieszczenie: Kontroluj granice wykresu za pomocą współrzędnych komórek (top_row, left_col, bottom_row, right_col).

Przewodnik krok po kroku

Krok 1: Zainstaluj Aspose.Cells FOSS dla Pythona

pip install aspose-cells-foss

Krok 2: Utwórz skoroszyt i wypełnij dane

Utwórz nowy skoroszyt i zapisz dane liczbowe oraz etykiety kategorii w komórkach:

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

Krok 3: Dodaj wykres słupkowy

Użyj ws.charts.add_bar(top_row, left_col, bottom_row, right_col), aby wstawić wykres słupkowy. Metoda zwraca obiekt wykresu bezpośrednio:

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

Indeksy wierszy i kolumn są zerowe.


Krok 4: Konfiguracja serii danych

Dodaj każdą serię danych przy użyciu chart.n_series.add() z argumentami nazwanymi:

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

Argument category_data określa zakres komórek dla etykiet osi X. Argument name ustawia etykietę legendy serii.


Krok 5: Ustaw tytuł wykresu i dane kategorii

Ustaw tytuł wykresu jako zwykły ciąg znaków:

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"

Krok 6: Zapisz skoroszyt

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

Pełny przykład wykresu kolumnowego:

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

Krok 7: Utwórz wykres liniowy

Ten sam wzorzec działa dla 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")

Typowe problemy i rozwiązania

1. Wykres jest pusty lub wyświetla się pusty

Przyczyna: Zakres danych przekazany do n_series.add() nie zawiera wartości lub ciąg zakresu komórek jest nieprawidłowy.
Rozwiązanie: Sprawdź, czy zakres komórek odpowiada Twoim danym. Upewnij się, że ws.cells["B2"].value nie jest None.

2. Etykiety kategorii nie wyświetlają się na osi X

Przyczyna: chart.category_data nie został ustawiony, lub zakres wskazuje na puste komórki.
Rozwiązanie: Ustaw chart.category_data = "A2:A5", gdzie kolumna A zawiera Twoje ciągi etykiet.

3. Pozycja wykresu zachodzi na dane

Przyczyna: Granice wiersza w add_bar() nakładają się na obszar danych.
Naprawa: Umieść wykres poniżej danych: ws.charts.add_bar(data_last_row + 2, 0, data_last_row + 18, 7).

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

Przyczyna: Biblioteka FOSS używa API metod‑dla‑każdego‑typu, a nie add(ChartType.COLUMN, ...).
Rozwiązanie: Użyj ws.charts.add_bar(...), ws.charts.add_line(...), ws.charts.add_pie(...) lub ws.charts.add_area(...).


Najczęściej zadawane pytania

Jakie typy wykresów są obsługiwane?

Użyj add_bar(), add_line(), add_pie(), add_area() i add_stock() dla najczęstszych typów. Te pięć ma pełne wsparcie serializacji XML. Sprawdź klasę ChartCollection, aby uzyskać pełną listę dostępnych metod add_*.

Czy mogę tworzyć wykresy w istniejącym pliku Excel?

Tak. Załaduj skoroszyt przy użyciu Workbook("existing.xlsx"), uzyskaj dostęp do docelowego arkusza i dodaj wykres, używając odpowiedniej ws.charts.add_*() metody.

Jak ustawić tytuł wykresu?

Przypisz zwykły ciąg znaków: chart.title = "My Chart Title". Nie ma pod‑właściwości .text: tytuł jest samym ciągiem.

Czy to podejście jest kompatybilne z pandas?

Tak. Zapisz wartości pandas DataFrame do komórek w pętli, a następnie dodaj wykres nad tym zakresem danych.


Powiązane zasoby:

 Polski