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:
| Metode | Diagramtype |
|---|---|
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)| Parameter | Betydning |
|---|---|
top_row | Nullbasert indeks for den første raden som diagrammet opptar |
left_col | Nullbasert indeks for den venstre kolonnen |
bottom_row | Nullbasert indeks for den siste raden som er opptatt av diagrammet |
right_col | Nullbasert 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
| Feil | Riktig | Hvorfor |
|---|---|---|
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 datarad | Et diagram som overlapper data skjuler verdier og forårsaker forvirrende oppsett. |
chart.legend_position = "bottom" uten chart.show_legend = True | Sett chart.show_legend = True første | legend_position har ingen effekt når show_legend er False. |
Se også
- API-referanse: Full klasse- og metodedokumentasjon for
aspose.cells_foss - Kunnskapsbase: Oppgaveorienterte veiledninger
- Produktoversikt: Sammendrag av funksjoner og muligheter
- Kom i gang / Installering: pip install og oppsett
- Blogg: Python Excel-diagramveiledning: Trinnvis veiledning for diagramoppretting