Arbeiten mit Diagrammen
Übersicht
Aspose.Cells FOSS uses a method-per-chart-type API. Instead of a generic add(ChartType.X, ...) Aufruf, jeder Diagrammtyp hat seine eigene dedizierte Methode auf des Arbeitsblatts charts Sammlung:
| Methode | Diagrammtyp |
|---|---|
ws.charts.add_bar(top_row, left_col, bottom_row, right_col) | Gruppierte Säule (Balkendiagramm) |
ws.charts.add_line(top_row, left_col, bottom_row, right_col) | Linie |
ws.charts.add_pie(top_row, left_col, bottom_row, right_col) | Kreis |
ws.charts.add_area(top_row, left_col, bottom_row, right_col) | Fläche |
Alle vier Positionsparameter beschreiben den rechteckigen Bereich im Blatt, in dem das Diagramm eingebettet wird. Zeilen- und Spaltenindizes sind nullbasiert. Jeder Methode gibt ein Chart Objekt, das Sie vor dem Speichern weiter konfigurieren.
Einschränkung: Nur die Diagrammtypen LINE, BAR, PIE, AREA und STOCK können in XLSX gespeichert werden. Aufruf von wb.save() mit einer Arbeitsmappe, die einen anderen Diagrammtyp enthält (z. B. SCATTER, WATERFALL, RADAR, TREEMAP, HISTOGRAM), wird einen Fehler auslösen NotImplementedError.
Hinzufügen eines Säulendiagramms
Das nachstehende Beispiel schreibt einen kleinen Umsatz‑nach‑Produkt‑Datensatz und fügt anschließend ein Säulendiagramm hinzu, das unter den Daten positioniert wird.
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")Die Daten belegen die Zeilen 1–6 (nullbasierte Zeilen 0–5), sodass top_row=6 platziert das Diagramm sofort darunter, ohne die Daten zu überlappen.
Hinzufügen eines Liniendiagramms
Liniendiagramme eignen sich gut, um Trends im Zeitverlauf darzustellen. Die Aufrufsignatur lautet identisch mit add_bar — nur der Methodenname ändert sich.
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")Diagrammtitel und Legende
Setzen Sie den Diagrammtitel, indem Sie einen einfachen String direkt zuweisen an chart.title. Die Eigenschaft akzeptiert eine str — versuchen Sie nicht, auf eine Untereigenschaft wie .title.text, die in dieser Bibliothek nicht existiert.
##Correct
chart.title = "Quarterly Sales"
##Wrong — raises AttributeError
##chart.title.text = "Quarterly Sales"Die Sichtbarkeit und Position der Legende werden durch zwei Eigenschaften gesteuert:
chart.show_legend = True # display the legend
chart.legend_position = "bottom" # "bottom", "top", "left", "right"Um die Legende vollständig zu verbergen, setzen Sie chart.show_legend = False. Die legend_position Wert wird ignoriert, wenn die Legende ausgeblendet ist.
Konfiguration der Datenreihen
Verwenden Sie chart.n_series.add() um Datenbereiche an ein Diagramm anzuhängen. Übergeben Sie alle Argumente als Schlüsselwortargumente um Verwirrungen durch Positionsreihenfolge zu vermeiden:
chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")Sie können mehrere Reihen zu einem einzelnen Diagramm hinzufügen, indem Sie n_series.add mehr als einmal aufrufen. Jeder Aufruf fügt eine neue Reihe hinzu:
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")Kategoriedaten
Kategorienbeschriftungen können auf Diagrammebene oder auf Ebene der einzelnen Serien festgelegt werden.
Diagrammbezogene Kategoriedaten gilt standardmäßig für alle Reihen:
chart.category_data = "A2:A5"Reihenbezogene Kategoriedaten (über die category_data Keyword-Argument für n_series.add) überschreibt die Diagrammebene-Einstellung für diese spezifische Serie:
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")Wenn jede Serie denselben Kategorienbereich teilt, ist das Festlegen chart.category_data einmal ist prägnanter. Wenn Serien unterschiedliche Kategorienbereiche haben — zum Beispiel, zwei Datensätze mit unterschiedlichen Zeiträumen — verwenden Sie das pro-Serie-Keyword-Argument stattdessen.
Diagrammpositionierung
Die vier Positionsparameter für jede add_* Methode definieren ein begrenzendes Rechteck im Blatt, gemessen in nullbasierten Zeilen- und Spaltenindizes:
add_bar(top_row, left_col, bottom_row, right_col)| Parameter | Bedeutung |
|---|---|
top_row | Nullbasierter Index der ersten Zeile, die vom Diagramm belegt wird |
left_col | Nullbasierter Index der linken Spalte |
bottom_row | Nullbasierter Index der letzten Zeile, die vom Diagramm belegt wird |
right_col | Nullbasierter Index der rechten Spalte |
Ein gängiges Muster ist, das Diagramm direkt unter den Daten zu platzieren. Wenn Ihre Daten bei Excel‑Zeile 6 (nullbasierter Zeilenindex 5) enden, starten Sie das Diagramm bei 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")Stellen Sie das Diagramm hoch genug ein, damit es lesbar ist: Eine Höhe von mindestens 15 Zeilen (bottom_row - top_row >= 15) und eine Breite von mindestens 6 Spalten ist ein vernünftiger Ausgangspunkt.
Häufige Fehler
| Falsch | Richtig | Warum |
|---|---|---|
ws.charts.add(ChartType.COLUMN, ...) | ws.charts.add_bar(...) | Rufen Sie nicht auf ws.charts.add(ChartType.X, ...) direkt für nicht unterstützte Typen — es wird einen Fehler auslösen NotImplementedError für 11 von 16 Diagrammtypen. Verwenden Sie add_bar(), add_line(), add_pie(), add_area(), oder add_stock() stattdessen. |
chart.title.text = "My Chart" | chart.title = "My Chart" | chart.title ist eine einfache Zeichenketten‑Eigenschaft, kein Objekt mit einer .text Unter‑Eigenschaft. |
chart.n_series.add("B2:B5", "A2:A5", "Revenue") | chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue") | Die zweiten und dritten Parameter müssen als benannte Argumente übergeben werden, um Mehrdeutigkeiten zu vermeiden. |
chart = ws.charts.add_bar(0, 0, 15, 7) (überlappt Daten) | Platzieren top_row unter der letzten Datenzeile | Ein Diagramm, das Daten überlappt, verdeckt Werte und führt zu verwirrenden Layouts. |
chart.legend_position = "bottom" ohne chart.show_legend = True | Setzen chart.show_legend = True Erste | legend_position hat keine Wirkung, wenn show_legend ist False. |
Siehe auch
- API-Referenz: Vollständige Klassen- und Methodendokumentation für
aspose.cells_foss - Wissensdatenbank: Aufgabenorientierte Anleitungen
- Produktübersicht: Zusammenfassung der Funktionen und Fähigkeiten
- Erste Schritte / Installation: pip-Installation und Einrichtung
- Blog: Python Excel-Diagramm-Tutorial: Schritt-für-Schritt-Anleitung zur Diagrammerstellung