Arbeide med diagrammer

Oversikt

Aspose.Cells FOSS uses a method-per-chart-type API. Instead of a generic add(ChartType.X, ...) kall, har hver diagramtype sin egen dedikerte metode på regnearkets charts samling:

MetodeDiagramtype
ws.charts.add_bar(top_row, left_col, bottom_row, right_col)Klynget kolonne (stolpediagram)
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)Kakediagram
ws.charts.add_area(top_row, left_col, bottom_row, right_col)Areal

Alle fire posisjonsparametere beskriver det rektangulære området i arket hvor diagrammet vil bli innebygd. Rad- og kolonneindekser er nullbaserte. Hver metode returnerer en Chart objekt som du konfigurerer videre før lagring.

Begrensning: Kun LINE, BAR, PIE, AREA og STOCK diagramtyper kan lagres til XLSX. Å kalle wb.save() med en arbeidsbok som inneholder en annen diagramtype (f.eks. SCATTER, WATERFALL, RADAR, TREEMAP, HISTOGRAM) vil utløse NotImplementedError.


Legge til et stolpediagram

Eksemplet nedenfor skriver et lite inntekts‑per‑produkt‑datasett og legger deretter til et stolpediagram plassert 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 opptar radene 1–6 (nullbaserte rader 0–5), så top_row=6 plasserer den diagrammet umiddelbart under uten å overlappe dataene.


Legge til et linjediagram

Linjediagrammer fungerer bra for å vise trender over tid. Kallsignaturen er identisk med add_bar — kun metodenavnet endres.

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

Diagramtittel og forklaring

Angi diagramtittelen ved å tilordne en enkel streng direkte til chart.title. Den egenskapen godtar en str — ikke forsøk å få tilgang til en under‑egenskap som .title.text, som ikke finnes i dette biblioteket.

##Correct
chart.title = "Quarterly Sales"

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

Synlighet og posisjon for forklaring styres av to egenskaper:

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

For å skjule legenden helt, sett chart.show_legend = False. Den legend_position verdien blir ignorert når legenden er skjult.


Konfigurasjon av dataserier

Bruk chart.n_series.add() for å knytte dataintervaller til et diagram. Send alle argumenter som nøkkelordargumenter for å unngå forvirring om posisjonsrekkefølge:

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

Du kan legge til flere serier i ett diagram ved å kalle n_series.add mer enn én gang. Hvert kall legger til 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")

Kategoridata

Kategorietiketter kan settes på diagramnivå eller på enkeltserienivå.

Kategoridata på diagramnivå gjelder for alle serier som standard:

chart.category_data = "A2:A5"

Kategoridata på serienivå (via category_data nøkkelordargument til n_series.add) overstyrer diagramnivå‑innstillingen for den spesifikke serien:

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

Når alle serier deler samme kategorirange, gir innstilling av chart.category_data det én gang en mer konsis løsning. Når serier har ulike kategoriranger — for eksempel, to datasett med ulike tidsperioder — bruk per-serie nøkkelordargumentet i stedet.


Diagramplassering

De fire posisjonelle parameterne til hver add_* metode definerer en avgrensende rektangel i arket, målt i nullbaserte rad- og kolonneindekser:

add_bar(top_row, left_col, bottom_row, right_col)
ParameterBetydning
top_rowNullbasert indeks for den første raden som diagrammet opptar
left_colNullbasert indeks for den venstre kolonnen
bottom_rowNullbasert indeks for den siste raden som er opptatt av diagrammet
right_colNullbasert indeks for den høyre kolonnen

Et vanlig mønster er å plassere diagrammet rett under dataene. Hvis dataene dine slutter på Excel‑rad 6 (nullbasert radindeks 5), start diagrammet på 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")

Gjør diagrammet høyt nok til å være lesbart: en høyde på minst 15 rader (bottom_row - top_row >= 15) og en bredde på minst 6 kolonner er et fornuftig utgangspunkt.


Vanlige feil

FeilRiktigHvorfor
ws.charts.add(ChartType.COLUMN, ...)ws.charts.add_bar(...)Ikke kall ws.charts.add(ChartType.X, ...) direkte for ikke‑støttede typer — den vil kaste NotImplementedError for 11 av 16 diagramtyper. Bruk add_bar(), add_line(), add_pie(), add_area(), eller add_stock() i stedet.
chart.title.text = "My Chart"chart.title = "My Chart"chart.title er en enkel streng‑egenskap, ikke et objekt med en .text under‑egenskap.
chart.n_series.add("B2:B5", "A2:A5", "Revenue")chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")Den andre og tredje parameteren må sendes som nøkkelord‑argumenter for å unngå tvetydighet.
chart = ws.charts.add_bar(0, 0, 15, 7) (overlapper data)Plasser top_row under siste dataradEt diagram som overlapper data skjuler verdier og forårsaker forvirrende oppsett.
chart.legend_position = "bottom" uten chart.show_legend = TrueSett chart.show_legend = True førstelegend_position har ingen effekt når show_legend er False.

Se også

 Norsk