Diagramok kezelése
Áttekintés
Aspose.Cells FOSS uses a method-per-chart-type API. Instead of a generic add(ChartType.X, ...) híváskor minden diagramtípusnak saját dedikált metódusa van a a munkalap charts gyűjteménye:
| Metódus | Diagramtípus |
|---|---|
ws.charts.add_bar(top_row, left_col, bottom_row, right_col) | Csoportosított oszlop (oszlopdiagram) |
ws.charts.add_line(top_row, left_col, bottom_row, right_col) | Vonal |
ws.charts.add_pie(top_row, left_col, bottom_row, right_col) | Kör |
ws.charts.add_area(top_row, left_col, bottom_row, right_col) | Terület |
A négy pozíciós paraméter leírja a munkalapon lévő téglalap alakú területet, ahol a diagram be lesz ágyazva. A sor- és oszlopindexek nulláról induló. Minden metódus egy Chart objektumot, amelyet a mentés előtt tovább konfigurálhat.
Korlátozás: Csak a LINE, BAR, PIE, AREA és STOCK diagramtípusok menthetők XLSX-be. A hívás wb.save() egy munkafüzet, amely bármely más diagramtípust tartalmaz (pl. SCATTER, WATERFALL, RADAR, TREEMAP, HISTOGRAM), kivételt dob NotImplementedError.
Oszlopdiagram hozzáadása
Az alábbi példa egy kis termékenkénti bevételi adatkészletet ír, majd egy oszlopdiagramot ad hozzá, amely az adatok alá helyezkedik el.
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")Az adatok az 1–6. sorokat foglalják el (nulla-alapú sorok 0–5), ezért top_row=6 helyezi a diagramot közvetlenül alul, anélkül, hogy átfedné az adatokat.
Vonaldiagram hozzáadása
Vonaldiagramok jól alkalmasak az időbeli trendek megjelenítésére. A hívási aláírás a következő: azonos a add_bar — csak a metódus neve változik.
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")Diagramcím és jelmagyarázat
Állítsd be a diagram címét úgy, hogy egy egyszerű karakterláncot közvetlenül hozzárendelsz a chart.title. A tulajdonság egy str — ne próbálj meg egy al‑tulajdonsághoz hozzáférni, például .title.text, amely nem létezik ebben a könyvtárban.
##Correct
chart.title = "Quarterly Sales"
##Wrong — raises AttributeError
##chart.title.text = "Quarterly Sales"A jelmagyarázat láthatóságát és pozícióját két tulajdonság szabályozza:
chart.show_legend = True # display the legend
chart.legend_position = "bottom" # "bottom", "top", "left", "right"A legendát teljesen elrejtéshez állítsd be chart.show_legend = False. A legend_position érték figyelmen kívül marad, ha a legenda rejtve van.
Adatsorok konfigurálása
Használd a chart.n_series.add() adatintervallumok csatolásához egy diagramhoz. Add meg az összes argumentumot úgy, hogy kulcsszó argumentumként az elhelyezési sorrend zavarának elkerülése érdekében:
chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")Több sorozatot is hozzáadhatsz egyetlen diagramhoz a hívással n_series.add több egyszernél többször. Minden hívás egy új sorozatot fűz hozzá:
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")Kategóriaadatok
A kategória címkéket beállíthatja a diagram szintjén vagy az egyes sorozatok szintjén.
Diagram-szintű kategóriaadatok alapértelmezésként minden sorozatra érvényes:
chart.category_data = "A2:A5"Sorozatszintű kategóriaadatok (a category_data kulcsszó argumentummal a n_series.add) felülírja a diagram-szintű beállítást az adott sorozatra:
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")Ha minden sorozat ugyanazt a kategóriatartományt használja, a beállítás chart.category_data egyszeri megadása tömörebb. Ha a sorozatok különböző kategóriatartományokkal rendelkeznek — például, két adatkészlet különböző időszakokkal — használja a sorozatonkénti kulcsszó argumentumot helyette.
Diagram elhelyezése
Minden add_* metódus határoló téglalapot a munkalapon, amelyet nullától indexelt sor- és oszlopszámok határoznak meg:
add_bar(top_row, left_col, bottom_row, right_col)| Paraméter | Jelentés |
|---|---|
top_row | Nulla-alapú index az első sorhoz, amelyet a diagram elfoglal |
left_col | A balra legszélső oszlop nulla-alapú indexe |
bottom_row | A diagram által elfoglalt legutolsó sor nulla-alapú indexe |
right_col | A jobbra legszélső oszlop nulla-alapú indexe |
Gyakori minta, hogy a diagramot közvetlenül az adatok alá helyezzük. Ha az adataid az Excel 6. során (nulla-alapú sorindex 5) ér véget, indítsa a diagramot a 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")Tegye a diagramot elég magasra ahhoz, hogy olvasható legyen: legalább 15 sor magasság (bottom_row - top_row >= 15) és legalább 6 oszlop szélesség jó kiindulási pont.
Gyakori hibák
| Helytelen | Helyes | Miért |
|---|---|---|
ws.charts.add(ChartType.COLUMN, ...) | ws.charts.add_bar(...) | Ne hívja ws.charts.add(ChartType.X, ...) közvetlenül nem támogatott típusok esetén — hibát dob NotImplementedError 16 diagramtípus közül 11-re. Használja add_bar(), add_line(), add_pie(), add_area(), vagy add_stock() helyette. |
chart.title.text = "My Chart" | chart.title = "My Chart" | chart.title egyszerű karakterlánc tulajdonság, nem egy objektum, amely .text alkellék. |
chart.n_series.add("B2:B5", "A2:A5", "Revenue") | chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue") | A második és harmadik paramétert kulcsszóargumentumként kell átadni a félreérthetőség elkerülése érdekében. |
chart = ws.charts.add_bar(0, 0, 15, 7) (átfedés az adatokkal) | Helyezze top_row az utolsó adat sor alá | Az adatokat átfedő diagram elrejti az értékeket és zavaros elrendezést eredményez. |
chart.legend_position = "bottom" nélkül chart.show_legend = True | Beállítás chart.show_legend = True első | legend_position nincs hatása, ha show_legend van False. |
Lásd még
- API-referencia: Teljes osztály- és metódusdokumentáció a
aspose.cells_foss - Tudásbázis: Feladatorientált útmutatók
- Termékáttekintés: Funkciók és képességek összefoglalása
- Első lépések / Telepítés: pip install és beállítás
- Blog: Python Excel diagram oktató: Lépésről lépésre útmutató a diagram létrehozásához