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:
| Metode | Diagramtype |
|---|---|
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øseNotImplementedError.
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)| Parameter | Betydning |
|---|---|
top_row | Nulbaseret indeks for den første række, som diagrammet optager |
left_col | Nulbaseret indeks for den venstre kolonne |
bottom_row | Nulbaseret indeks for den sidste række, som diagrammet optager |
right_col | Nulbaseret 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
| Forkert | Korrekt | Hvorfor |
|---|---|---|
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ække | Et diagram, der overlapper data, skjuler værdier og forårsager forvirrende layout. |
chart.legend_position = "bottom" uden chart.show_legend = True | Indstil chart.show_legend = True først | legend_position har ingen effekt, når show_legend er False. |
Se også
- API Reference: Fuld klasse- og metode-dokumentation for
aspose.cells_foss - Knowledge Base: Opgaveorienterede vejledninger
- Product Overview: Oversigt over funktioner og kapaciteter
- Getting Started / Installation: pip install og opsætning
- Blog: Python Excel Chart Tutorial: Trin-for-trin guide til oprettelse af diagrammer