Arbeiten mit Diagrammen

Übersicht über die

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 die Arbeitsblätter charts Sammlung:

VerfahrenDiagrammtyp
ws.charts.add_bar(top_row, left_col, bottom_row, right_col)Klustergesteckte Spalte (Streckdiagramm)
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)Torte .
ws.charts.add_area(top_row, left_col, bottom_row, right_col)Fläche

Alle vier Positionsparameter beschreiben die rechteckige Fläche des Blattes, in der Die Zeilen und Spalten sind in die Tabelle eingebettet. auf Nullbasis.Jeder von uns . Die Methode gibt a zurück. Chart Objekt, das Sie vor dem Speichern weiter konfigurieren.

Beschränkung: Nur LINE, BAR, PIE, AREA und STOCK Diagramm-Typen können auf XLSX gespeichert werden. Aufrufen wb.save() Die Datenbank wird mit einem Arbeitsbuch, das einen anderen Diagrammtyp enthält (z. B. SCATTER, WATERFALL, RADAR, TREEMAP, HISTOGRAM) angezeigt werden. NotImplementedError.


Hinzufügen eines Spaltendiagramms

Das folgende Beispiel schreibt einen kleinen Datensatz von Einnahmen nach Produkten und fügt dann eine Spaltendiagramm hinzu, die unter den Daten steht.

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 besetzen die Zeilen 1 bis 6 (Zell-basierte Zeiten 0 bis 5), so dass top_row=6 die Die Daten werden in der Tabelle unmittelbar unten ohne Überlappung ermittelt.


Hinzufügen einer Zeichentypdiagramm

Die Liniendiagramme sind gut geeignet, um Trends im Laufe der Zeit zu zeigen. identisch mit add_bar Nur der Name des Methods ä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")

Titel und Legende der Tabelle

Setzen Sie den Diagramm-Titel, indem Sie eine einfache Zeichenfolge direkt an die chart.title.Die . Eigentum akzeptiert eine str • nicht versuchen, auf eine Unter-Eigenschaft wie .title.text, die in dieser Bibliothek nicht vorhanden ist.

##Correct
chart.title = "Quarterly Sales"

##Wrong — raises AttributeError
##chart.title.text = "Quarterly Sales"

Die Sichtbarkeit und die 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 zu verbergen, wurde ein chart.show_legend = False.Die . legend_position Der Wert wird ignoriert, wenn die Legende verborgen ist.


Datenreihenkonfiguration

Verwendung chart.n_series.add() Um Datenbereiche an ein Diagramm anzubringen. Argumente wie Schlüsselwort-Argumente Um Verwirrung hinsichtlich der Positionsreihenfolge zu vermeiden:

chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")

Sie können mehrere Serien zu einem einzelnen Diagramm hinzufügen, indem Sie aufrufen: n_series.add mehr Jeder Anruf ergänzt sich mit einer neuen Serie:

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

Kategorie-Daten

Kategorie-Etiketten können auf der Ebene des Diagramms oder auf einzelner Serien festgelegt werden.

Kategorie-Daten auf Diagrammebene gilt standardmäßig für alle Serien:

chart.category_data = "A2:A5"

Daten der Kategorie auf Serienebene (über die category_data Schlüsselwort-Argument für n_series.add) überschreitet die Grafik-Ebeneinstellung für diese spezifische Reihe:

chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")

Wenn alle Serien den gleichen Kategorienabschnitt haben, wird die Einstellung “Einheitliche” verwendet. chart.category_data Wenn Serien unterschiedliche Kategorienbereiche haben, zum Beispiel:, zwei Datensätze mit unterschiedlichen Zeiträumen - verwenden Sie das Keyword-Argument pro Reihe. Stattdessen.


Kartenposition

Die vier Positionsparameter für jeden add_* Methode definiert eine Begrenzung Rechteck im Blatt, gemessen in Zeilen- und Spaltenindizes auf Nullbasis:

add_bar(top_row, left_col, bottom_row, right_col)
ParameterBedeutung
top_rowNullbasierter Index der ersten Zeile, die von dem Diagramm besetzt wird.
left_colIndex auf Basis von Null der linksesten Spalte
bottom_rowNullbasierter Index der letzten Zeile des Diagramms
right_colNullbasierter Index der rechtsesten Spalte

Ein übliches Muster ist, die Grafik direkt unter den Daten zu platzieren. Endet in Excel Zeile 6 (Zero-basierter Zeilenindex 5), beginnt 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")

Die Größe des Diagramms sollte so hoch sein, dass er lesbar ist: eine Höhe von mindestens 15 Zeilen (bottom_row - top_ro >= 15) und eine Breite von wenigstens 6 Spalten sind angemessene Ausgangspunktpunkte.


Häufige Fehler

Falsch .- Ja .Warum ?
ws.charts.add(ChartType.COLUMN, ...)ws.charts.add_bar(...)Rufen Sie nicht an . ws.charts.add(ChartType.X, ...) direkt für nicht unterstützte Typen erhöhen wird. NotImplementedError für 11 von 16 Diagrammtypen. 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 String-Eigenschaft, kein Objekt mit einem .text Unterbesitz.
chart.n_series.add("B2:B5", "A2:A5", "Revenue")chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")Die zweite und dritte Parameter müssen als Schlüsselwortargumente übermittelt werden, um Zweideutigkeiten zu vermeiden.
chart = ws.charts.add_bar(0, 0, 15, 7) (Überlappungsdaten)Ort der Veranstaltung top_row unter der letzten DatenzeileEin Diagramm, das Daten überschneidet, verschleiert Werte und verursacht verwirrende Layouts.
chart.legend_position = "bottom" ohne chart.show_legend = TrueSetz chart.show_legend = True Erster Schritt:legend_position keine Wirkung hat, wenn: show_legend ist . False.

Siehe auch:

 Deutsch