Darbas su diagramomis

Apžvalga

Aspose.Cells FOSS uses a method-per-chart-type API. Instead of a generic add(ChartType.X, ...) kvietimas, kiekvienas diagramos tipas turi savo atskirą metodą darbalapio charts kolekcija:

MetodasDiagramos tipas
ws.charts.add_bar(top_row, left_col, bottom_row, right_col)Klasterizuota stulpelinė (juostinė diagrama)
ws.charts.add_line(top_row, left_col, bottom_row, right_col)Linija
ws.charts.add_pie(top_row, left_col, bottom_row, right_col)Skritulinė
ws.charts.add_area(top_row, left_col, bottom_row, right_col)Plotas

Visi keturi padėties parametrai aprašo stačiakampę sritį lape, kur diagrama bus įterpta. Eilučių ir stulpelių indeksai yra nulio pagrindu. Kiekvienas metodas grąžina Chart objektą, kurį toliau konfigūruojate prieš išsaugodami.

Apribojimas: Tik LINE, BAR, PIE, AREA ir STOCK diagramos tipai gali būti išsaugoti į XLSX. Iškviečiant wb.save() su darbaknyge, kuriame yra bet koks kitas diagramos tipas (pvz., SCATTER, WATERFALL, RADAR, TREEMAP, HISTOGRAM), sukels NotImplementedError.


Stulpelinės diagramos pridėjimas

Žemiau pateiktas pavyzdys įrašo nedidelį pajamų‑pagal‑produktą duomenų rinkinį ir tada prideda stulpelinę diagramą, patalpintą po duomenimis.

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

Duomenys užima eilutes 1–6 (nulio pagrindu eilutės 0–5), todėl top_row=6 įdeda the chart iš karto žemiau, neperdengiant duomenų.


Linijinės diagramos pridėjimas

Linijinės diagramos gerai tinka rodyti tendencijas laikui bėgant. Call signature yra identiška add_bar — tik metodo pavadinimas keičiasi.

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

Diagramos pavadinimas ir legenda

Nustatykite diagramų pavadinimą priskirdami paprastą eilutę tiesiogiai į chart.title. The savybė priima str — nebandykite pasiekti sub-savybės, pvz. .title.text, kuri neegzistuoja šioje bibliotekoje.

##Correct
chart.title = "Quarterly Sales"

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

Legandos matomumas ir pozicija valdomi dviem savybėmis:

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

Norėdami visiškai paslėpti legendą, nustatykite chart.show_legend = False. The legend_position reikšmė yra ignoruojama, kai legenda paslėpta.


Duomenų serijų konfigūracija

Naudokite chart.n_series.add() prijungti duomenų intervalus prie diagramos. Perduokite visus argumentus kaip raktinius argumentus kad išvengtumėte pozicijos tvarkos painiavos:

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

Galite pridėti kelias serijas į vieną diagramą, iškviečiant n_series.add daugiau daugiau nei vieną kartą. Kiekvienas iškvietimas prideda naują seriją:

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

Kategorijų duomenys

Kategorijų etiketės gali būti nustatytos diagramų lygiu arba atskirų serijų lygiu.

Diagramų lygmens kategorijos duomenys taikoma visoms serijoms kaip numatyta:

chart.category_data = "A2:A5"

Serijų lygmens kategorijos duomenys (per category_data raktinį argumentą n_series.add) perrašo diagramų lygmens nustatymą konkrečiai šiai serijai:

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

Kai visos serijos turi tą patį kategorijų intervalą, nustatant chart.category_data vieną kartą yra glaustiau. Kai serijos turi skirtingus kategorijų intervalus — pavyzdžiui, du duomenų rinkinius su skirtingais laikotarpiais — naudokite serijai skirtą raktinį argumentą vietoj to.


Diagramų pozicionavimas

Keturi poziciniai parametrai, skirti kiekvienam add_* metodui apibrėžia ribinį stačiakampį lakšte, matuojamą nuliniais eilutės ir stulpelio indeksais:

add_bar(top_row, left_col, bottom_row, right_col)
ParametrasReikšmė
top_rowNulinis pirmosios diagramą užimančios eilutės indeksas
left_colNulio pagrindo indeksas kairiausio stulpelio
bottom_rowNulio pagrindo indeksas paskutinės eilutės, kurią užima diagrama
right_colNulio pagrindo indeksas dešiniausio stulpelio

Dažnas modelis yra padėti diagramą tiesiai po duomenimis. Jei jūsų duomenys baigiasi Excel eilutėje 6 (nulinio indekso eilutės indeksas 5), pradėkite diagramą nuo 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")

Padarykite diagramą pakankamai aukštą, kad būtų įskaitoma: aukštis bent 15 eilučių (bottom_row - top_row >= 15) ir plotis bent 6 stulpeliai yra pagrįstas pradinės taškas.


Dažnos klaidos

KlaidingaTeisingaKodėl
ws.charts.add(ChartType.COLUMN, ...)ws.charts.add_bar(...)Nekviečkite ws.charts.add(ChartType.X, ...) tiesiogiai nepalaikomų tipų — tai sukels NotImplementedError 11 iš 16 diagramų tipų. Naudokite add_bar(), add_line(), add_pie(), add_area(), arba add_stock() vietoje.
chart.title.text = "My Chart"chart.title = "My Chart"chart.title yra paprasto tipo eilutės savybė, o ne objektas su .text sub-savybe.
chart.n_series.add("B2:B5", "A2:A5", "Revenue")chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")Antrasis ir trečiasis parametrai turi būti perduodami kaip raktiniai argumentai, kad būtų išvengta dviprasmybės.
chart = ws.charts.add_bar(0, 0, 15, 7) (perdengia duomenis)Vieta top_row žemiau paskutinės duomenų eilutėsDiagrama, kuri perdengia duomenis, užgožia reikšmes ir sukelia painius išdėstymus.
chart.legend_position = "bottom" be chart.show_legend = TrueNustatyti chart.show_legend = True pirmaslegend_position neturi jokio poveikio, kai show_legend yra False.

Žr. taip pat

 Lietuvių