Arbejde med diagrammer

Oversigt

Aspose.Cells FOSS bruger et metode-per-diagramtype API. I stedet for et generisk add(ChartType.X, ...)‑kald, har hver diagramtype sin egen dedikerede metode på regnearkets charts‑samling:

MetodeDiagramtype
ws.charts.add_bar(top_row, left_col, bottom_row, right_col)Klynget søjle (søjlediagram)
ws.charts.add_line(top_row, left_col, bottom_row, right_col)Linje
ws.charts.add_pie(top_row, left_col, bottom_row, right_col)Cirkeldiagram
ws.charts.add_area(top_row, left_col, bottom_row, right_col)Område

Alle fire positionsparametre beskriver det rektangulære område i arket, hvor diagrammet vil blive indlejret. Række- og kolonneindekser er nulbaserede. Hver metode returnerer et Chart-objekt, som du konfigurerer yderligere, før du gemmer.

Begrænsning: Kun LINE, BAR, PIE, AREA og STOCK diagramtyper kan gemmes til XLSX. Kald af wb.save() med en projektmappe, der indeholder en anden diagramtype (fx SCATTER, WATERFALL, RADAR, TREEMAP, HISTOGRAM) vil udløse NotImplementedError.


Tilføjelse af et søjlediagram

Eksemplet nedenfor skriver et lille omsætning‑pr‑produkt‑datasæt og tilføjer derefter et søjlediagram placeret under dataene.

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

Dataene optager rækker 1–6 (nulbaserede rækker 0–5), så top_row=6 placerer diagrammet umiddelbart nedenunder uden at overlappe dataene.


Tilføj et linjediagram

Linjediagrammer fungerer godt til at vise tendenser over tid. Signaturen for kaldet er identisk med add_bar — kun metodenavnet ændres.

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

Diagramtitel og forklaring

Indstil diagramtitel ved at tildele en simpel streng direkte til chart.title. Egenskaben accepterer en str — prøv ikke at få adgang til en under‑egenskab som .title.text, som ikke findes i dette bibliotek.

##Correct
chart.title = "Quarterly Sales"

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

Legende synlighed og position styres af to egenskaber:

chart.show_legend = True          # display the legend
chart.legend_position = "bottom"  # "bottom", "top", "left", "right"

For at skjule forklaringen helt, indstil chart.show_legend = False. legend_position‑værdien ignoreres, når forklaringen er skjult.


Konfiguration af dataserier

Brug chart.n_series.add() til at vedhæfte dataområder til et diagram. Overfør alle argumenter som keyword arguments for at undgå forvirring med positionsrækkefølge:

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

Du kan tilføje flere serier til et enkelt diagram ved at kalde n_series.add mere end én gang. Hvert kald tilføjer en ny 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")

Kategori Data

Kategorietiketter kan indstilles på diagramniveau eller på det enkelte serieniveau.

Chart-level category data gælder for alle serier som standard:

chart.category_data = "A2:A5"

Kategori-data på serieniveau (via category_data nøgleargumentet til n_series.add) overskriver diagramniveau‑indstillingen for den specifikke serie:

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

Når hver serie deler den samme kategorirække, er det mere kortfattet at sætte chart.category_data én gang. Når serier har forskellige kategorirækker — for eksempel to datasæt med forskellige tidsperioder — brug i stedet per‑serie nøgleordargumentet.


Diagramplacering

De fire positionsparametre til hver add_*‑metode definerer et afgrænsende rektangel i arket, målt i nulbaserede række‑ og kolonneindekser:

add_bar(top_row, left_col, bottom_row, right_col)
ParameterBetydning
top_rowNulbaseret indeks for den første række, som diagrammet optager
left_colNulbaseret indeks for den venstre kolonne
bottom_rowNulbaseret indeks for den sidste række, som diagrammet optager
right_colNulbaseret indeks for den højre kolonne

Et almindeligt mønster er at placere diagrammet direkte under dataene. Hvis dine data slutter ved Excel‑række 6 (nulbaseret række‑indeks 5), start diagrammet ved 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")

Gør diagrammet højt nok til at være læsbart: en højde på mindst 15 rækker
(bottom_row - top_row >= 15) og en bredde på mindst 6 kolonner er et rimeligt
udgangspunkt.


Almindelige fejl

ForkertKorrektHvorfor
ws.charts.add(ChartType.COLUMN, ...)ws.charts.add_bar(...)Kald ikke ws.charts.add(ChartType.X, ...) direkte for ikke‑understøttede typer — det vil udløse NotImplementedError for 11 af 16 diagramtyper. Brug i stedet add_bar(), add_line(), add_pie(), add_area() eller add_stock().
chart.title.text = "My Chart"chart.title = "My Chart"chart.title er en simpel streng‑egenskab, ikke et objekt med en .text‑underegenskab.
chart.n_series.add("B2:B5", "A2:A5", "Revenue")chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")Den anden og tredje parameter skal videregives som nøgleords‑argumenter for at undgå tvetydighed.
chart = ws.charts.add_bar(0, 0, 15, 7) (overlapper data)Placer top_row under sidste datarækkeEt diagram, der overlapper data, skjuler værdier og forårsager forvirrende layout.
chart.legend_position = "bottom" uden chart.show_legend = TrueIndstil chart.show_legend = True førstlegend_position har ingen effekt, når show_legend er False.

Se også

 Dansk