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:
| Metode | Diagrammas 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)| Parametrs | Nozīme |
|---|---|
top_row | Nulles bāzes indekss pirmajai rindai, ko aizņem diagramma |
left_col | Nulles bāzes indekss pa kreisi esošajai kolonnai |
bottom_row | Nulles bāzes indekss pēdējai rindai, ko aizņem diagramma |
right_col | Nulles 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ļūdains | Pareizi | Kā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 rindas | Diagramma, kas pārklājas ar datiem, noslēpj vērtības un izraisa neskaidru izkārtojumu. |
chart.legend_position = "bottom" bez chart.show_legend = True | Iestatīt chart.show_legend = True pirmais | legend_position nav ietekmes, kad show_legend ir False. |
Skatīt arī
- API atsauce: Pilna klases un metodes dokumentācija par
aspose.cells_foss - Zināšanu bāze: Uzdevumu orientētas pamācības
- Produkta pārskats: Iezīmju un iespēju kopsavilkums
- Sākums / Instalēšana: pip instalēšana un iestatīšana
- Blogs: Python Excel diagrammu pamācība: Soli pa solim diagrammas izveides ceļvedis