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:
| Metodas | Diagramos 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)| Parametras | Reikšmė |
|---|---|
top_row | Nulinis pirmosios diagramą užimančios eilutės indeksas |
left_col | Nulio pagrindo indeksas kairiausio stulpelio |
bottom_row | Nulio pagrindo indeksas paskutinės eilutės, kurią užima diagrama |
right_col | Nulio 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
| Klaidinga | Teisinga | Kodė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ės | Diagrama, kuri perdengia duomenis, užgožia reikšmes ir sukelia painius išdėstymus. |
chart.legend_position = "bottom" be chart.show_legend = True | Nustatyti chart.show_legend = True pirmas | legend_position neturi jokio poveikio, kai show_legend yra False. |
Žr. taip pat
- API nuoroda: Pilna klasių ir metodų dokumentacija
aspose.cells_foss - Žinių bazė: Užduočių orientuoti vadovai
- Produkto apžvalga: Savybių ir galimybių santrauka
- Pradžia / Įdiegimas: pip įdiegimas ir konfigūracija
- Tinklaraštis: Python Excel diagramos pamoka: Žingsnis po žingsnio diagramos kūrimo vadovas