Práce s grafy
Přehled
Aspose.Cells FOSS používá API s metodou pro každý typ grafu. Místo obecného volání add(ChartType.X, ...) má každý typ grafu vlastní dedikovanou metodu ve sbírce charts listu:
| Method | Typ grafu |
|---|---|
ws.charts.add_bar(top_row, left_col, bottom_row, right_col) | Seskupený sloupec (sloupcový graf) |
ws.charts.add_line(top_row, left_col, bottom_row, right_col) | Čárový graf |
ws.charts.add_pie(top_row, left_col, bottom_row, right_col) | Koláčový graf |
ws.charts.add_area(top_row, left_col, bottom_row, right_col) | Plošný graf |
Všechny čtyři poziční parametry popisují obdélníkovou oblast v listu, kde bude graf vložen. Indexy řádků a sloupců jsou nulové. Každá metoda vrací objekt Chart, který dále nakonfigurujete před uložením.
Omezení: Pouze typy grafů LINE, BAR, PIE, AREA a STOCK lze uložit do XLSX. Volání
wb.save()s sešitem, který obsahuje jakýkoli jiný typ grafu (např. SCATTER, WATERFALL, RADAR, TREEMAP, HISTOGRAM), vyvoláNotImplementedError.
Přidání sloupcového grafu
Níže uvedený příklad zapíše malý dataset tržeb podle produktů a poté přidá sloupcový graf umístěný pod daty.
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")Data zabírají řádky 1–6 (řádky číslované od nuly 0–5), takže top_row=6 umístí graf ihned pod nimi, aniž by překrýval data.
Přidání čárového grafu
Čárové grafy dobře zobrazují trendy v čase.
Signatura volání je
identická s add_bar — mění se pouze název metody.
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")Název grafu a legenda
Nastavte název grafu přiřazením prostého řetězce přímo do chart.title. Vlastnost přijímá str — nepokoušejte se přistupovat k podvlastnosti, jako je .title.text, která v této knihovně neexistuje.
##Correct
chart.title = "Quarterly Sales"
##Wrong — raises AttributeError
##chart.title.text = "Quarterly Sales"Viditelnost a umístění legendy jsou řízeny dvěma vlastnostmi:
chart.show_legend = True # display the legend
chart.legend_position = "bottom" # "bottom", "top", "left", "right"Chcete-li legendu úplně skrýt, nastavte chart.show_legend = False. Hodnota legend_position se při skrytí legendy ignoruje.
Konfigurace datové řady
Použijte chart.n_series.add() k připojení datových rozsahů k diagramu. Předávejte všechny
argumenty jako klíčové argumenty, abyste se vyhnuli záměně pořadí argumentů:
chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")Můžete přidat více sérií do jednoho grafu voláním n_series.add více než jednou. Každé volání přidá novou sérii:
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")Data kategorie
Popisky kategorií lze nastavit na úrovni grafu nebo na úrovni jednotlivých sérií.
Data kategorií na úrovni grafu platí pro všechny řady jako výchozí:**
chart.category_data = "A2:A5"Data kategorie na úrovni řady (via the category_data keyword argument to
n_series.add) přepíše nastavení na úrovni grafu pro tuto konkrétní řadu:
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")Když všechny řady sdílejí stejný rozsah kategorií, nastavení chart.category_data
jednou je stručnější. Když mají řady různé rozsahy kategorií — například
dvě datové sady s různými časovými obdobími — použijte místo toho klíčový argument
per-series.
Umístění grafu
Čtyři poziční parametry každé metody add_* definují ohraničující obdélník v listu, měřený v nulových indexech řádků a sloupců:
add_bar(top_row, left_col, bottom_row, right_col)| Parametr | Význam |
|---|---|
top_row | Nulový index prvního řádku obsazeného grafem |
left_col | Nulový index levého sloupce |
bottom_row | Nulový index posledního řádku obsazeného grafem |
right_col | Nulový index pravého sloupce |
Běžný vzor je umístit graf přímo pod data. Pokud vaše data
končí v řádku Excelu 6 (index řádku od nuly 5), začněte graf na 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")Udělejte graf dostatečně vysoký, aby byl čitelný: výška alespoň 15 řádků (bottom_row - top_row >= 15) a šířka alespoň 6 sloupců je rozumný výchozí bod.
Časté chyby
| Špatně | Správně | Proč |
|---|---|---|
ws.charts.add(ChartType.COLUMN, ...) | ws.charts.add_bar(...) | Nevolejte ws.charts.add(ChartType.X, ...) přímo pro nepodporované typy — vyvolá NotImplementedError pro 11 z 16 typů grafů. Použijte add_bar(), add_line(), add_pie(), add_area() nebo add_stock() místo toho. |
chart.title.text = "My Chart" | chart.title = "My Chart" | chart.title je prostá řetězcová vlastnost, nikoli objekt s podvlastností .text. |
chart.n_series.add("B2:B5", "A2:A5", "Revenue") | chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue") | Druhý a třetí parametr musí být předány jako pojmenované argumenty, aby se předešlo nejasnostem. |
chart = ws.charts.add_bar(0, 0, 15, 7) (překrývá data) | Umístěte top_row pod poslední řádek dat | Graf, který překrývá data, zakrývá hodnoty a způsobuje zmatené rozvržení. |
chart.legend_position = "bottom" bez chart.show_legend = True | Nejprve nastavte chart.show_legend = True | legend_position nemá žádný účinek, když je show_legend False. |
Viz také
- Reference API: Úplná dokumentace tříd a metod pro
aspose.cells_foss - Znalostní báze: Průvodci zaměřenými na úkoly
- Přehled produktu: Shrnutí funkcí a schopností
- Začínáme / Instalace: pip install a nastavení
- Blog: Návod na grafy v Pythonu pro Excel: Krok za krokem průvodce tvorbou grafu