Darbs ar diagrammām

Pārskats

Aspose.Cells FOSS uses a method-per-chart-type API. Instead of a generic add(ChartType.X, ...) izsaucot, katram diagrammas tipam ir sava veltītā metode uz darblapas charts kolekcija:

MetodeDiagrammas veids
ws.charts.add_bar(top_row, left_col, bottom_row, right_col)Klasterizēta kolonna (stabiņu diagramma)
ws.charts.add_line(top_row, left_col, bottom_row, right_col)Līnija
ws.charts.add_pie(top_row, left_col, bottom_row, right_col)Sektoru diagramma
ws.charts.add_area(top_row, left_col, bottom_row, right_col)Laukuma diagramma

Visi četri pozīcijas parametri apraksta taisnstūra apgabalu darblapā, kur diagramma tiks iegulta. Rindu un kolonnu indeksi ir nulles bāzē. Katrs metode atgriež Chart objektu, ko jūs varat turpmāk konfigurēt pirms saglabāšanas.

Ierobežojums: Tikai LINE, BAR, PIE, AREA un STOCK diagrammu veidus var saglabāt XLSX. Izsaucot wb.save() ar darblapu, kas satur jebkuru citu diagrammu veidu (piemēram SCATTER, WATERFALL, RADAR, TREEMAP, HISTOGRAM), tiks izraisīts NotImplementedError.


Kolonnas diagrammas pievienošana

Zemāk esošais piemērs ieraksta mazu ieņēmumu-pēc-produkta datu kopu, un pēc tam pievieno kolonnas diagrammu, kas novietota zem datiem.

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

Dati aizņem rindas 1–6 (nulles bāzes rindas 0–5), tāpēc top_row=6 novieto the diagrammu uzreiz zemāk, nepārklājot datus.


Līnijas diagrammas pievienošana

Līniju diagrammas labi piemērotas laika gaitā notiekošo tendences parādīšanai. Izsaukuma paraksts ir identisks ar add_bar — tikai metodes nosaukums mainās.

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

Diagrammas virsraksts un leģenda

Iestatiet diagrammas nosaukumu, piešķirot vienkāršu virkni tieši chart.title. Īpašība īpašība pieņem a str — ne mēģiniet piekļūt apakšīpašībai, piemēram .title.text, kas neeksistē šajā bibliotēkā.

##Correct
chart.title = "Quarterly Sales"

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

Leģendas redzamību un pozīciju kontrolē divas īpašības:

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

Lai pilnībā paslēptu leģendu, iestatiet chart.show_legend = False. Īpašība legend_position vērtība tiek ignorēta, kad leģenda ir paslēpta.


Datu sēriju konfigurācija

Izmantojiet chart.n_series.add() lai pievienotu datu diapazonus diagrammai. Pārsūtiet visus argumentus kā atslēgvārdu argumentus lai izvairītos no pozīcijas kārtības neskaidrības:

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

Jūs varat pievienot vairākas sērijas vienam diagrammai, izsaucot n_series.add vairāk vairāk nekā vienu reizi. Katrs izsaukums pievieno jaunu sēriju:

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

Kategoriju dati

Kategoriju etiķetes var iestatīt diagrammas līmenī vai atsevišķas sērijas līmenī.

Diagrammas līmeņa kategoriju dati attiecas uz visām sērijām kā noklusējums:

chart.category_data = "A2:A5"

Sērijas līmeņa kategoriju dati (caur category_data atslēgvārda argumentu uz n_series.add) pārraksta diagrammas līmeņa iestatījumu konkrētajai sērijai:

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

Kad katra sērija koplieto vienu un to pašu kategoriju diapazonu, iestatot chart.category_data vienreiz ir kodolīgāk. Kad sērijām ir dažādi kategoriju diapazoni — piemēram, divi datu kopumi ar dažādiem laika periodiem — izmantojiet katras sērijas atsevišķo atslēgvārda argumentu tā vietā.


Diagrammas novietojums

Četri pozicionālie parametri katram add_* metodam definē robežošanu taisnstūri darblapā, mērīts ar nulles bāzes rindu un kolonnas indeksiem:

add_bar(top_row, left_col, bottom_row, right_col)
ParametrsNozīme
top_rowNulles bāzes indekss pirmajai rindai, ko aizņem diagramma
left_colNulles bāzes indekss pa kreisi esošajai kolonnai
bottom_rowNulles bāzes indekss pēdējai rindai, ko aizņem diagramma
right_colNulles bāzes indekss pa labi esošajai kolonnai

Bieži sastopams modelis ir novietot diagrammu tieši zem datiem. Ja jūsu dati beidzas Excel rindā 6 (nulles bāzes rindas indekss 5), sāciet diagrammu no 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")

Padariet diagrammu pietiekami augstu, lai būtu salasāma: augstums vismaz 15 rindas (bottom_row - top_row >= 15) un platums vismaz 6 kolonnas ir saprātīgs sākuma punkts.


Biežāk sastopamās kļūdas

KļūdainsPareiziKāpēc
ws.charts.add(ChartType.COLUMN, ...)ws.charts.add_bar(...)Neizsauciet ws.charts.add(ChartType.X, ...) tieši neatbalstītiem tipiem — tas izraisīs NotImplementedError 11 no 16 diagrammu tipiem. Izmantojiet add_bar(), add_line(), add_pie(), add_area(), vai add_stock() tā vietā.
chart.title.text = "My Chart"chart.title = "My Chart"chart.title ir vienkāršs virknes īpašums, nevis objekts ar .text apakšīpašība.
chart.n_series.add("B2:B5", "A2:A5", "Revenue")chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")Otrajiem un trešajiem parametriem jābūt nodotiem kā atslēgvārdu argumenti, lai izvairītos no neskaidrības.
chart = ws.charts.add_bar(0, 0, 15, 7) (pārklāj datus)Vieta top_row zem pēdējās datu rindasDiagramma, kas pārklājas ar datiem, noslēpj vērtības un izraisa neskaidru izkārtojumu.
chart.legend_position = "bottom" bez chart.show_legend = TrueIestatīt chart.show_legend = True pirmaislegend_position nav ietekmes, kad show_legend ir False.

Skatīt arī

 Latviešu