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:

MethodeDiagrammtyp
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)
ParameterBedeutung
top_rowNullbasierter Index der ersten Zeile, die vom Diagramm belegt wird
left_colNullbasierter Index der linken Spalte
bottom_rowNullbasierter Index der letzten Zeile, die vom Diagramm belegt wird
right_colNullbasierter 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

FalschRichtigWarum
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 DatenzeileEin Diagramm, das Daten überlappt, verdeckt Werte und führt zu verwirrenden Layouts.
chart.legend_position = "bottom" ohne chart.show_legend = TrueSetzen chart.show_legend = True Erstelegend_position hat keine Wirkung, wenn show_legend ist False.

Siehe auch

 Deutsch