Vytvořit nebo aktualizovat grafy v PowerPoint prezentacích v Pythonu
Přehled
Tento článek poskytuje komplexní průvodce, jak vytvářet a přizpůsobovat grafy pomocí Aspose.Slides for Python via .NET. Naučíte se, jak programově přidat graf na snímek, naplnit jej daty a použít různé možnosti formátování, aby vyhovoval vašim konkrétním požadavkům na design. V celém článku podrobné ukázky kódu ilustrují každý krok, od inicializace prezentace a objektu grafu po konfiguraci sérií, os a legend. Po absolvování tohoto průvodce získáte pevné pochopení, jak integrovat dynamické generování grafů do vašich Python aplikací a zjednodušit tvorbu prezentací založených na datech.
Vytvořit graf
Grafy pomáhají lidem rychle vizualizovat data a získat poznatky, které nemusí být okamžitě zřejmé z tabulky nebo tabulkového výkazu.
Proč vytvářet grafy?
Používáním grafů můžete:
- agregovat, zhušťovat nebo shrnout velké množství dat na jediném snímku v prezentaci;
- odhalovat vzory a trendy v datech;
- určit směr a dynamiku dat v čase nebo vzhledem k konkrétní jednotce měření;
- zaznamenat odlehlé hodnoty, odchylky, chyby a nesmyslná data;
- komunikovat nebo prezentovat složitá data.
V PowerPointu můžete grafy vytvářet funkcí Insert, která poskytuje šablony pro návrh mnoha typů grafů. Pomocí Aspose.Slides můžete vytvářet jak běžné grafy (založené na populárních typech), tak i vlastní grafy.
Note
Použijte výčtový typ ChartType v modulu aspose.slides.charts. Hodnoty v tomto výčtu odpovídají různým typům grafů.Vytvořit seskupené sloupcové grafy
Tento příklad používá add_chart k vytvoření seskupeného sloupcového grafu, který porovnává dvě série napříč třemi kategoriemi. Série používají červené a zelené výplně a jednotlivé popisky zobrazují názvy kategorií, názvy sérií a hodnoty. Index listu 0 odkazuje na první list v zabudovaném sešitu grafu.
import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 20, 20, 500, 300)
chart.chart_title.add_text_frame_for_overriding("Sample Title")
chart.chart_title.text_frame_for_overriding.text_frame_format.center_text = slides.NullableBool.TRUE
chart.chart_title.height = 20
chart.has_title = True
workbook = chart.chart_data.chart_data_workbook
worksheet_index = 0
chart.chart_data.series.clear()
chart.chart_data.categories.clear()
series_name_cell = workbook.get_cell(worksheet_index, 0, 1, "Series 1")
chart.chart_data.series.add(series_name_cell, chart.type)
series_name_cell = workbook.get_cell(worksheet_index, 0, 2, "Series 2")
chart.chart_data.series.add(series_name_cell, chart.type)
category_cell = workbook.get_cell(worksheet_index, 1, 0, "Category 1")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(worksheet_index, 2, 0, "Category 2")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(worksheet_index, 3, 0, "Category 3")
chart.chart_data.categories.add(category_cell)
series = chart.chart_data.series[0]
value_cell = workbook.get_cell(worksheet_index, 1, 1, 20)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 2, 1, 50)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 3, 1, 30)
series.data_points.add_data_point_for_bar_series(value_cell)
series.format.fill.fill_type = slides.FillType.SOLID
series.format.fill.solid_fill_color.color = draw.Color.red
series = chart.chart_data.series[1]
value_cell = workbook.get_cell(worksheet_index, 1, 2, 30)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 2, 2, 10)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 3, 2, 60)
series.data_points.add_data_point_for_bar_series(value_cell)
series.format.fill.fill_type = slides.FillType.SOLID
series.format.fill.solid_fill_color.color = draw.Color.green
label = series.data_points[0].label
label.data_label_format.show_category_name = True
label = series.data_points[1].label
label.data_label_format.show_series_name = True
label = series.data_points[2].label
label.data_label_format.show_value = True
label.data_label_format.show_series_name = True
label.data_label_format.separator = "/"
presentation.save("AsposeChart.pptx", slides.export.SaveFormat.PPTX)
Výsledek:

Vytvořit bodové grafy
Bodové grafy (také známé jako scatter ploty nebo x‑y grafy) se často používají k ověření vzorů nebo demonstraci korelací mezi dvěma proměnnými.
Použijte bodový graf, když:
- máte spárovaná číselná data;
- máte dvě proměnné, které spolu dobře korespondují;
- chcete zjistit, zda jsou dvě proměnné vzájemně propojené;
- máte nezávislou proměnnou, která má pro závislou proměnnou více hodnot.
Tento příklad vykresluje dvě sady hodnot x‑y. První série používá přímé čáry s hvězdicovými značkami, zatímco druhá používá hladké čáry s kruhovými značkami; obě používají size 10. Vlastnost symbol určuje tvar značky.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.SCATTER_WITH_SMOOTH_LINES, 20, 20, 500, 300)
workbook = chart.chart_data.chart_data_workbook
worksheet_index = 0
chart.chart_data.series.clear()
series_name_cell = workbook.get_cell(worksheet_index, 1, 1, "Series 1")
chart.chart_data.series.add(series_name_cell, chart.type)
series_name_cell = workbook.get_cell(worksheet_index, 1, 3, "Series 2")
chart.chart_data.series.add(series_name_cell, chart.type)
series = chart.chart_data.series[0]
x_value_cell = workbook.get_cell(worksheet_index, 2, 1, 1)
y_value_cell = workbook.get_cell(worksheet_index, 2, 2, 3)
series.data_points.add_data_point_for_scatter_series(x_value_cell, y_value_cell)
x_value_cell = workbook.get_cell(worksheet_index, 3, 1, 2)
y_value_cell = workbook.get_cell(worksheet_index, 3, 2, 10)
series.data_points.add_data_point_for_scatter_series(x_value_cell, y_value_cell)
series.type = charts.ChartType.SCATTER_WITH_STRAIGHT_LINES_AND_MARKERS
series.marker.size = 10
series.marker.symbol = charts.MarkerStyleType.STAR
series = chart.chart_data.series[1]
x_value_cell = workbook.get_cell(worksheet_index, 2, 3, 5)
y_value_cell = workbook.get_cell(worksheet_index, 2, 4, 2)
series.data_points.add_data_point_for_scatter_series(x_value_cell, y_value_cell)
x_value_cell = workbook.get_cell(worksheet_index, 3, 3, 3)
y_value_cell = workbook.get_cell(worksheet_index, 3, 4, 1)
series.data_points.add_data_point_for_scatter_series(x_value_cell, y_value_cell)
x_value_cell = workbook.get_cell(worksheet_index, 4, 3, 2)
y_value_cell = workbook.get_cell(worksheet_index, 4, 4, 2)
series.data_points.add_data_point_for_scatter_series(x_value_cell, y_value_cell)
x_value_cell = workbook.get_cell(worksheet_index, 5, 3, 5)
y_value_cell = workbook.get_cell(worksheet_index, 5, 4, 1)
series.data_points.add_data_point_for_scatter_series(x_value_cell, y_value_cell)
series.marker.size = 10
series.marker.symbol = charts.MarkerStyleType.CIRCLE
presentation.save("AsposeChart.pptx", slides.export.SaveFormat.PPTX)
Výsledek:

Vytvořit koláčové grafy
Koláčové grafy jsou nejvhodnější pro zobrazení vztahu část‑celku v datech, zejména když data obsahují kategoriální štítky s číselnými hodnotami. Pokud však vaše data obsahují mnoho částí nebo štítků, můžete zvážit použití sloupcového grafu místo toho.
Tento příklad vytváří koláčový graf se třemi čtvrtletními hodnotami. Každý výsek má vlastní výplň a okraj a popisky zobrazují různé kombinace hodnot, procent a informací o sérii. Vlastnost first_slice_angle nastavuje první výsek tak, aby začínal při 180 stupních.
import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.PIE, 20, 20, 500, 300)
chart.chart_title.add_text_frame_for_overriding("Sample Title")
chart.chart_title.text_frame_for_overriding.text_frame_format.center_text = slides.NullableBool.TRUE
chart.chart_title.height = 20
chart.has_title = True
chart.chart_data.series[0].labels.default_data_label_format.show_value = True
workbook = chart.chart_data.chart_data_workbook
worksheet_index = 0
chart.chart_data.series.clear()
chart.chart_data.categories.clear()
category_cell = workbook.get_cell(0, 1, 0, "1st Qtr")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, 2, 0, "2nd Qtr")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, 3, 0, "3rd Qtr")
chart.chart_data.categories.add(category_cell)
series_name_cell = workbook.get_cell(0, 0, 1, "Series 1")
series = chart.chart_data.series.add(series_name_cell, chart.type)
value_cell = workbook.get_cell(worksheet_index, 1, 1, 20)
series.data_points.add_data_point_for_pie_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 2, 1, 50)
series.data_points.add_data_point_for_pie_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 3, 1, 30)
series.data_points.add_data_point_for_pie_series(value_cell)
chart.chart_data.series_groups[0].is_color_varied = True
first_slice = series.data_points[0]
first_slice.format.fill.fill_type = slides.FillType.SOLID
first_slice.format.fill.solid_fill_color.color = draw.Color.cyan
first_slice.format.line.fill_format.fill_type = slides.FillType.SOLID
first_slice.format.line.fill_format.solid_fill_color.color = draw.Color.gray
first_slice.format.line.width = 3.0
first_slice.format.line.style = slides.LineStyle.THIN_THICK
first_slice.format.line.dash_style = slides.LineDashStyle.LARGE_DASH
second_slice = series.data_points[1]
second_slice.format.fill.fill_type = slides.FillType.SOLID
second_slice.format.fill.solid_fill_color.color = draw.Color.brown
second_slice.format.line.fill_format.fill_type = slides.FillType.SOLID
second_slice.format.line.fill_format.solid_fill_color.color = draw.Color.blue
second_slice.format.line.width = 3.0
second_slice.format.line.style = slides.LineStyle.SINGLE
second_slice.format.line.dash_style = slides.LineDashStyle.LARGE_DASH_DOT
third_slice = series.data_points[2]
third_slice.format.fill.fill_type = slides.FillType.SOLID
third_slice.format.fill.solid_fill_color.color = draw.Color.coral
third_slice.format.line.fill_format.fill_type = slides.FillType.SOLID
third_slice.format.line.fill_format.solid_fill_color.color = draw.Color.red
third_slice.format.line.width = 2.0
third_slice.format.line.style = slides.LineStyle.THIN_THIN
third_slice.format.line.dash_style = slides.LineDashStyle.LARGE_DASH_DOT_DOT
first_label = series.data_points[0].label
first_label.data_label_format.show_value = True
second_label = series.data_points[1].label
second_label.data_label_format.show_value = True
second_label.data_label_format.show_legend_key = True
second_label.data_label_format.show_percentage = True
third_label = series.data_points[2].label
third_label.data_label_format.show_series_name = True
third_label.data_label_format.show_percentage = True
series.labels.default_data_label_format.show_leader_lines = True
chart.chart_data.series_groups[0].first_slice_angle = 180
presentation.save("PieChart.pptx", slides.export.SaveFormat.PPTX)
Výsledek:

Pro zlepšení čitelnosti popisků mimo koláč se podívejte na Format Leader Lines, kde je ukázáno, jak umístit popisky a přizpůsobit barvu, šířku, průhlednost a styl čáry vodících čar.
Vytvořit čárové grafy
Čárové grafy (také známé jako čárové diagramy) jsou nejvhodnější v situacích, kdy chcete demonstrovat změny hodnot v čase. Pomocí čárového grafu můžete najednou porovnat velké množství dat, sledovat změny a trendy v čase, zvýraznit anomálie v datech a další.
Tento příklad používá add_chart k vytvoření čárového grafu se standardními sériemi a kategoriemi a poté uloží prezentaci jako PPTX.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
line_chart = slide.shapes.add_chart(charts.ChartType.LINE, 20, 20, 500, 300)
presentation.save("lineChart.pptx", slides.export.SaveFormat.PPTX)
Ve výchozím nastavení jsou body v čárovém grafu spojeny přímými souvislými čarami. Pokud chcete, aby byly body spojeny čárami, nastavte dash_style na hodnotu z LineDashStyle:
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
line_chart = slide.shapes.add_chart(charts.ChartType.LINE, 20, 20, 500, 300)
for series in line_chart.chart_data.series:
series.format.line.dash_style = slides.LineDashStyle.DASH
Výsledek:

Vytvořit hierarchické mapové grafy (Tree Map)
Hierarchické mapové grafy jsou nejvhodnější pro prodejní data, když chcete zobrazit relativní velikost kategorií a rychle upoutat pozornost na položky, které představují velké příspěvky v rámci každé kategorie.
Tento příklad vytváří hierarchický mapový graf s osmi listy seskupenými do čtyř kořenů a dvou větví. Metoda set_grouping_item přiřazuje kořeny na úrovni seskupení 1 a větve na úrovni 2. Hodnoty určují relativní velikosti obdélníků, zatímco štítky kategorií a překrývající se rodičovské štítky identifikují hierarchii.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.TREEMAP, 20, 20, 500, 300)
chart.chart_data.categories.clear()
chart.chart_data.series.clear()
workbook = chart.chart_data.chart_data_workbook
workbook.clear(0)
# Větev 1
category_cell = workbook.get_cell(0, "C1", "Leaf1")
leaf = chart.chart_data.categories.add(category_cell)
leaf.grouping_levels.set_grouping_item(1, "Stem1")
leaf.grouping_levels.set_grouping_item(2, "Branch1")
category_cell = workbook.get_cell(0, "C2", "Leaf2")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "C3", "Leaf3")
leaf = chart.chart_data.categories.add(category_cell)
leaf.grouping_levels.set_grouping_item(1, "Stem2")
category_cell = workbook.get_cell(0, "C4", "Leaf4")
chart.chart_data.categories.add(category_cell)
# Větev 2
category_cell = workbook.get_cell(0, "C5", "Leaf5")
leaf = chart.chart_data.categories.add(category_cell)
leaf.grouping_levels.set_grouping_item(1, "Stem3")
leaf.grouping_levels.set_grouping_item(2, "Branch2")
category_cell = workbook.get_cell(0, "C6", "Leaf6")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "C7", "Leaf7")
leaf = chart.chart_data.categories.add(category_cell)
leaf.grouping_levels.set_grouping_item(1, "Stem4")
category_cell = workbook.get_cell(0, "C8", "Leaf8")
chart.chart_data.categories.add(category_cell)
series = chart.chart_data.series.add(charts.ChartType.TREEMAP)
series.labels.default_data_label_format.show_category_name = True
value_cell = workbook.get_cell(0, "D1", 4)
series.data_points.add_data_point_for_treemap_series(value_cell)
value_cell = workbook.get_cell(0, "D2", 5)
series.data_points.add_data_point_for_treemap_series(value_cell)
value_cell = workbook.get_cell(0, "D3", 3)
series.data_points.add_data_point_for_treemap_series(value_cell)
value_cell = workbook.get_cell(0, "D4", 6)
series.data_points.add_data_point_for_treemap_series(value_cell)
value_cell = workbook.get_cell(0, "D5", 9)
series.data_points.add_data_point_for_treemap_series(value_cell)
value_cell = workbook.get_cell(0, "D6", 9)
series.data_points.add_data_point_for_treemap_series(value_cell)
value_cell = workbook.get_cell(0, "D7", 4)
series.data_points.add_data_point_for_treemap_series(value_cell)
value_cell = workbook.get_cell(0, "D8", 3)
series.data_points.add_data_point_for_treemap_series(value_cell)
series.parent_label_layout = charts.ParentLabelLayoutType.OVERLAPPING
presentation.save("Treemap.pptx", slides.export.SaveFormat.PPTX)
Výsledek:

Vytvořit vodopádové grafy
Vodopádový graf ukazuje, jak pozitivní a negativní změny přispívají k finální hodnotě. Například rozpis zisku může začínat tržbami, odečíst náklady a přičíst jiné příjmy. Sloupce změn „plavou“ mezi předchozí a novou kumulativní hodnotou, zatímco součtové sloupce sahají od nuly k akumulované hodnotě.
Následující příklad používá částky v tisících amerických dolarů:
| Kategorie | Hodnota v sešitu | Typ sloupce |
|---|---|---|
| Výnosy | 1000 | Nárůst |
| Náklady na prodej | -400 | Pokles |
| Hrubý zisk | 600 | Mezní součet |
| Provozní náklady | -200 | Pokles |
| Ostatní příjmy | 50 | Nárůst |
| Čistý zisk | 450 | Konečný součet |
Chcete-li označit bod jako mezní nebo konečný součet, nastavte jeho vlastnost set_as_total na True. Do buňky sešitu daného bodu vložte skutečnou akumulovanou částku: 600 pro hrubý zisk (1000 - 400) a 450 pro čistý zisk (600 - 200 + 50). Vlastnost označí sloupec jako součet; neprovádí výpočet ani nevyplňuje hodnotu buňky. Nepoužívejte nulu jako zástupný znak ani jinou změnu pro součtový bod. Součtový sloupec zobrazí akumulovanou hodnotu, aniž by ji znovu přičetl k běžné hodnotě.
Tento kompletní C# příklad vytváří graf pomocí členu Waterfall typu ChartType, vymaže výchozí data a naplní zabudovaný sešit. Index listu 0 vybírá první list; sloupec A obsahuje názvy kategorií a sloupec B obsahuje hodnoty. Každá buňka s hodnotou je přidána pomocí add_data_point_for_waterfall_series. Indexy bodů založené na nule 2 a 5 určují mezní a konečný součet. Povolení show_value zobrazí částky na sloupcích. Vstupní prezentace ani sešit nejsou vyžadovány.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.WATERFALL, 20, 20, 680, 200)
chart.has_title = True
chart.chart_title.add_text_frame_for_overriding("Profit breakdown (USD thousands)")
chart.chart_title.overlay = False
chart.has_legend = False
chart.chart_data.series.clear()
chart.chart_data.categories.clear()
workbook = chart.chart_data.chart_data_workbook
worksheet_index = 0
workbook.clear(worksheet_index)
series_name_cell = workbook.get_cell(worksheet_index, 0, 1, "Profit")
series = chart.chart_data.series.add(series_name_cell, charts.ChartType.WATERFALL)
categories = ["Revenue", "Cost of sales", "Gross profit", "Operating expenses", "Other income", "Net profit"]
values = [1000, -400, 600, -200, 50, 450]
for i in range(len(categories)):
category_cell = workbook.get_cell(worksheet_index, i + 1, 0, categories[i])
chart.chart_data.categories.add(category_cell)
value_cell = workbook.get_cell(worksheet_index, i + 1, 1, values[i])
series.data_points.add_data_point_for_waterfall_series(value_cell)
# Třetí a šestý bod představují součty, nikoli další změny.
series.data_points[2].set_as_total = True
series.data_points[5].set_as_total = True
series.show_connector_lines = True
series.labels.default_data_label_format.show_value = True
presentation.save("WaterfallChart.pptx", slides.export.SaveFormat.PPTX)
Nastavte na úrovni série vlastnost show_connector_lines na True, aby se zobrazily čáry spojující po sobě jdoucí sloupce a usnadnily sledování běžné hodnoty. Chcete‑li tyto čáry skrýt, nahraďte přiřazení v příkladu výrazem series.show_connector_lines = False před uložením. Tím se změní pouze viditelnost čáry, nikoli data nebo součty.
Uložená prezentace zobrazuje hrubý zisk 600 a čistý zisk 450, přičemž oba součty jsou vykresleny od nuly:

Vytvořit akciové grafy (Stock)
Akciové grafy slouží k zobrazení finančních dat, jako jsou otevírací, nejvyšší, nejnižší a uzavírací ceny, což pomáhá analyzovat tržní trendy a volatilitu. Poskytují klíčové informace o výkonu akcií a pomáhají investorům i analytikům činit informovaná rozhodnutí.
Tento příklad vytváří graf typu open‑high‑low‑close se čtyřmi sériemi v uvedeném pořadí a třemi kategoriemi. Vlastnost has_up_down_bars povoluje svislé pruhy nahoru/dolů a hi_low_lines_format řídí čáry high‑low, které ukazují cenové rozpětí, zatímco jednotlivé čáry sérií a drobné vodorovné mřížky jsou skryté.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.OPEN_HIGH_LOW_CLOSE, 20, 20, 500, 300, False)
workbook = chart.chart_data.chart_data_workbook
category_cell = workbook.get_cell(0, 1, 0, "A")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, 2, 0, "B")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, 3, 0, "C")
chart.chart_data.categories.add(category_cell)
series_name_cell = workbook.get_cell(0, 0, 1, "Open")
chart.chart_data.series.add(series_name_cell, charts.ChartType.OPEN_HIGH_LOW_CLOSE)
series_name_cell = workbook.get_cell(0, 0, 2, "High")
chart.chart_data.series.add(series_name_cell, charts.ChartType.OPEN_HIGH_LOW_CLOSE)
series_name_cell = workbook.get_cell(0, 0, 3, "Low")
chart.chart_data.series.add(series_name_cell, charts.ChartType.OPEN_HIGH_LOW_CLOSE)
series_name_cell = workbook.get_cell(0, 0, 4, "Close")
chart.chart_data.series.add(series_name_cell, charts.ChartType.OPEN_HIGH_LOW_CLOSE)
series = chart.chart_data.series[0]
value_cell = workbook.get_cell(0, 1, 1, 72)
series.data_points.add_data_point_for_stock_series(value_cell)
value_cell = workbook.get_cell(0, 2, 1, 25)
series.data_points.add_data_point_for_stock_series(value_cell)
value_cell = workbook.get_cell(0, 3, 1, 38)
series.data_points.add_data_point_for_stock_series(value_cell)
series = chart.chart_data.series[1]
value_cell = workbook.get_cell(0, 1, 2, 172)
series.data_points.add_data_point_for_stock_series(value_cell)
value_cell = workbook.get_cell(0, 2, 2, 57)
series.data_points.add_data_point_for_stock_series(value_cell)
value_cell = workbook.get_cell(0, 3, 2, 57)
series.data_points.add_data_point_for_stock_series(value_cell)
series = chart.chart_data.series[2]
value_cell = workbook.get_cell(0, 1, 3, 12)
series.data_points.add_data_point_for_stock_series(value_cell)
value_cell = workbook.get_cell(0, 2, 3, 12)
series.data_points.add_data_point_for_stock_series(value_cell)
value_cell = workbook.get_cell(0, 3, 3, 13)
series.data_points.add_data_point_for_stock_series(value_cell)
series = chart.chart_data.series[3]
value_cell = workbook.get_cell(0, 1, 4, 25)
series.data_points.add_data_point_for_stock_series(value_cell)
value_cell = workbook.get_cell(0, 2, 4, 38)
series.data_points.add_data_point_for_stock_series(value_cell)
value_cell = workbook.get_cell(0, 3, 4, 50)
series.data_points.add_data_point_for_stock_series(value_cell)
chart.chart_data.series_groups[0].up_down_bars.has_up_down_bars = True
chart.chart_data.series_groups[0].hi_low_lines_format.line.fill_format.fill_type = slides.FillType.SOLID
for stock_series in chart.chart_data.series:
stock_series.format.line.fill_format.fill_type = slides.FillType.NO_FILL
chart.axes.vertical_axis.minor_grid_lines_format.line.fill_format.fill_type = slides.FillType.NO_FILL
presentation.save("Stock-chart.pptx", slides.export.SaveFormat.PPTX)
Výsledek:

Vytvořit krabicové a vousové grafy
Krabicové a vousové grafy slouží k zobrazení rozdělení dat shrnutím klíčových statistických měřítek, jako jsou medián, kvartily a potenciální odlehlé hodnoty. Jsou zvláště užitečné při průzkumné analýze dat a statistických studiích pro rychlé pochopení variability dat a identifikaci anomálií.
Tento příklad vytváří krabicový a vousový graf ze šesti hodnot. Vlastnost quartile_method vybírá exkluzivní výpočet kvartilů. Příklad také povoluje čáry průměru, značky průměru, vnitřní body a odlehlé body.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.BOX_AND_WHISKER, 20, 20, 500, 300)
chart.chart_data.categories.clear()
chart.chart_data.series.clear()
workbook = chart.chart_data.chart_data_workbook
workbook.clear(0)
category_cell = workbook.get_cell(0, "A1", "Category 1")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "A2", "Category 2")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "A3", "Category 3")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "A4", "Category 4")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "A5", "Category 5")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "A6", "Category 6")
chart.chart_data.categories.add(category_cell)
series = chart.chart_data.series.add(charts.ChartType.BOX_AND_WHISKER)
series.quartile_method = charts.QuartileMethodType.EXCLUSIVE
series.show_mean_line = True
series.show_mean_markers = True
series.show_inner_points = True
series.show_outlier_points = True
value_cell = workbook.get_cell(0, "B1", 15)
series.data_points.add_data_point_for_box_and_whisker_series(value_cell)
value_cell = workbook.get_cell(0, "B2", 41)
series.data_points.add_data_point_for_box_and_whisker_series(value_cell)
value_cell = workbook.get_cell(0, "B3", 16)
series.data_points.add_data_point_for_box_and_whisker_series(value_cell)
value_cell = workbook.get_cell(0, "B4", 10)
series.data_points.add_data_point_for_box_and_whisker_series(value_cell)
value_cell = workbook.get_cell(0, "B5", 23)
series.data_points.add_data_point_for_box_and_whisker_series(value_cell)
value_cell = workbook.get_cell(0, "B6", 16)
series.data_points.add_data_point_for_box_and_whisker_series(value_cell)
presentation.save("BoxAndWhisker.pptx", slides.export.SaveFormat.PPTX)
Vytvořit trychliofilní grafy (Funnel)
Trychliofilní grafy slouží k vizualizaci procesů, které zahrnují sekvenční fáze, kde objem dat klesá s postupem od jednoho kroku k dalšímu. Jsou zvláště užitečné pro analýzu konverzních poměrů, identifikaci úzkých míst a sledování efektivity prodejních nebo marketingových procesů.
Tento příklad používá add_chart k přidání trychliofilního grafu na první snímek existující prezentace. Nahrazuje výchozí data šesti kategoriemi a hodnotami v rozmezí 50‑500, poté uloží aktualizovanou prezentaci. Vstupní prezentace musí obsahovat alespoň jeden snímek.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation("test.pptx") as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.FUNNEL, 50, 50, 500, 400)
chart.chart_data.categories.clear()
chart.chart_data.series.clear()
workbook = chart.chart_data.chart_data_workbook
workbook.clear(0)
category_cell = workbook.get_cell(0, "A1", "Category 1")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "A2", "Category 2")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "A3", "Category 3")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "A4", "Category 4")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "A5", "Category 5")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "A6", "Category 6")
chart.chart_data.categories.add(category_cell)
series = chart.chart_data.series.add(charts.ChartType.FUNNEL)
value_cell = workbook.get_cell(0, "B1", 50)
series.data_points.add_data_point_for_funnel_series(value_cell)
value_cell = workbook.get_cell(0, "B2", 100)
series.data_points.add_data_point_for_funnel_series(value_cell)
value_cell = workbook.get_cell(0, "B3", 200)
series.data_points.add_data_point_for_funnel_series(value_cell)
value_cell = workbook.get_cell(0, "B4", 300)
series.data_points.add_data_point_for_funnel_series(value_cell)
value_cell = workbook.get_cell(0, "B5", 400)
series.data_points.add_data_point_for_funnel_series(value_cell)
value_cell = workbook.get_cell(0, "B6", 500)
series.data_points.add_data_point_for_funnel_series(value_cell)
presentation.save("Funnel.pptx", slides.export.SaveFormat.PPTX)
Výsledek:

Vytvořit slunečnicové grafy (Sunburst)
Slunečnicové grafy slouží k vizualizaci hierarchických dat, přičemž úrovně jsou zobrazeny jako soustředné kruhy. Pomáhají ilustrovat vztahy část‑celku a jsou ideální pro představování vnořených kategorií a podkategorií v přehledném a kompaktním formátu.
Tento příklad vytváří slunečnicový graf s osmi listy seskupenými do čtyř kořenů a dvou větví. Metoda set_grouping_item přiřazuje kořeny na úrovni seskupení 1 a větve na úrovni 2. Štítky kategorií identifikují segmenty a hodnoty určují jejich relativní velikosti.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.SUNBURST, 20, 20, 500, 300)
chart.chart_data.categories.clear()
chart.chart_data.series.clear()
workbook = chart.chart_data.chart_data_workbook
workbook.clear(0)
# Větev 1
category_cell = workbook.get_cell(0, "C1", "Leaf1")
leaf = chart.chart_data.categories.add(category_cell)
leaf.grouping_levels.set_grouping_item(1, "Stem1")
leaf.grouping_levels.set_grouping_item(2, "Branch1")
category_cell = workbook.get_cell(0, "C2", "Leaf2")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "C3", "Leaf3")
leaf = chart.chart_data.categories.add(category_cell)
leaf.grouping_levels.set_grouping_item(1, "Stem2")
category_cell = workbook.get_cell(0, "C4", "Leaf4")
chart.chart_data.categories.add(category_cell)
# Větev 2
category_cell = workbook.get_cell(0, "C5", "Leaf5")
leaf = chart.chart_data.categories.add(category_cell)
leaf.grouping_levels.set_grouping_item(1, "Stem3")
leaf.grouping_levels.set_grouping_item(2, "Branch2")
category_cell = workbook.get_cell(0, "C6", "Leaf6")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "C7", "Leaf7")
leaf = chart.chart_data.categories.add(category_cell)
leaf.grouping_levels.set_grouping_item(1, "Stem4")
category_cell = workbook.get_cell(0, "C8", "Leaf8")
chart.chart_data.categories.add(category_cell)
series = chart.chart_data.series.add(charts.ChartType.SUNBURST)
series.labels.default_data_label_format.show_category_name = True
value_cell = workbook.get_cell(0, "D1", 4)
series.data_points.add_data_point_for_sunburst_series(value_cell)
value_cell = workbook.get_cell(0, "D2", 5)
series.data_points.add_data_point_for_sunburst_series(value_cell)
value_cell = workbook.get_cell(0, "D3", 3)
series.data_points.add_data_point_for_sunburst_series(value_cell)
value_cell = workbook.get_cell(0, "D4", 6)
series.data_points.add_data_point_for_sunburst_series(value_cell)
value_cell = workbook.get_cell(0, "D5", 9)
series.data_points.add_data_point_for_sunburst_series(value_cell)
value_cell = workbook.get_cell(0, "D6", 9)
series.data_points.add_data_point_for_sunburst_series(value_cell)
value_cell = workbook.get_cell(0, "D7", 4)
series.data_points.add_data_point_for_sunburst_series(value_cell)
value_cell = workbook.get_cell(0, "D8", 3)
series.data_points.add_data_point_for_sunburst_series(value_cell)
presentation.save("Sunburst.pptx", slides.export.SaveFormat.PPTX)
Výsledek:

Vytvořit histogramy
Histogramy ukazují, jak jsou číselné hodnoty rozděleny do intervalů (binů). Pro měsíční zprávy o časech zpracování objednávek použijte stejnou šířku binu a prahy, aby byly intervaly konzistentní a usnadnily srovnání rozdělení.
Nastavte horizontální osu aggregation_type na režim z AxisAggregationType. bin_width se použije jen pro BY_BIN_WIDTH; number_of_bins se použije jen pro BY_NUMBER_OF_BINS. Použijte AUTOMATIC, aby si graf sám vybral biny.
Použít pevnou šířku binu
Tento příklad seskupuje časy zpracování do 10‑minutových intervalů, s oddělenými biny pro časy ≤ 10 min a > 40 min. Aktivujte tyto biny pomocí is_underflow_bin a is_overflow_bin. Při zadání explicitních prahů underflow_bin a overflow_bin nastavte is_automatic_underflow_bin a is_automatic_overflow_bin na False.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.HISTOGRAM, 20, 20, 680, 200)
chart.has_legend = False
chart.has_title = False
chart.chart_data.categories.clear()
chart.chart_data.series.clear()
workbook = chart.chart_data.chart_data_workbook
workbook.clear(0)
series = chart.chart_data.series.add(charts.ChartType.HISTOGRAM)
values = [5, 10, 10, 11, 15, 20, 20, 21, 25, 30, 30, 31, 35, 40, 40, 41, 50]
for i, value in enumerate(values):
value_cell = workbook.get_cell(0, i, 0, value)
series.data_points.add_data_point_for_histogram_series(value_cell)
axis = chart.axes.horizontal_axis
axis.aggregation_type = charts.AxisAggregationType.BY_BIN_WIDTH
axis.bin_width = 10
axis.is_underflow_bin = True
axis.is_automatic_underflow_bin = False
axis.underflow_bin = 10
axis.is_overflow_bin = True
axis.is_automatic_overflow_bin = False
axis.overflow_bin = 40
presentation.save("Histogram-bin-width.pptx", slides.export.SaveFormat.PPTX)
Prezentace v PowerPointu zobrazuje počty v bitech 3, 4, 4, 4 a 2. Bin podlimit zahrnuje 5, 10, 10, takže jeho práh je inkluzivní. Bin přelimit zahrnuje jen 41, 50, takže jeho práh je exkluzivní; oba hodnoty rovné 40 zůstávají v předchozím intervalu. Vnitřní biny obsahují hodnoty větší než jejich spodní hranice a menší nebo rovné jejich horní hranici.

Zadat počet binů
Pro pevnou úroveň detailu místo pevných intervalů požádejte o pět binů pro stejná data. Tento příklad má biny pod‑ a přelimit vypnuté. Graf určuje šířku z datového rozsahu, takže hranice se mohou mezi zprávami měnit.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.HISTOGRAM, 20, 20, 680, 200)
chart.has_legend = False
chart.has_title = False
chart.chart_data.categories.clear()
chart.chart_data.series.clear()
workbook = chart.chart_data.chart_data_workbook
workbook.clear(0)
series = chart.chart_data.series.add(charts.ChartType.HISTOGRAM)
values = [5, 10, 10, 11, 15, 20, 20, 21, 25, 30, 30, 31, 35, 40, 40, 41, 50]
for i, value in enumerate(values):
value_cell = workbook.get_cell(0, i, 0, value)
series.data_points.add_data_point_for_histogram_series(value_cell)
axis = chart.axes.horizontal_axis
axis.aggregation_type = charts.AxisAggregationType.BY_NUMBER_OF_BINS
axis.number_of_bins = 5
presentation.save("Histogram-bin-count.pptx", slides.export.SaveFormat.PPTX)
Pět binů má počty 4, 4, 4, 4 a 1. Porovnejte toto rozdělení s výsledkem pevné šířky výše: vstupní hodnoty jsou identické, ale hranice se liší.

Vytvořit radarové grafy
Radarové grafy slouží k zobrazení multivariátních dat ve dvourozměrném formátu, což usnadňuje porovnání několika proměnných najednou. Jsou zvláště užitečné pro identifikaci vzorů, silných a slabých stránek napříč více výkonnostními metrikami nebo atributy.
Tento příklad používá add_chart k vytvoření radarového grafu se standardními sériemi a kategoriemi a poté uloží prezentaci jako PPTX.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
slide.shapes.add_chart(charts.ChartType.RADAR, 20, 20, 500, 300)
presentation.save("Radar-chart.pptx", slides.export.SaveFormat.PPTX)
Výsledek:

Vytvořit vícekategoriální grafy
Vícekategoriální grafy slouží k zobrazení dat, která zahrnují více než jedno kategoriální seskupení, což umožňuje porovnávat hodnoty napříč několika dimenzemi současně. Jsou zvláště užitečné, když potřebujete analyzovat trendy a vztahy v komplexních, víceúrovňových datových sadách.
Tento příklad vytváří seskupený sloupcový graf s osmi kategoriemi uspořádanými ve čtyřech dvojicích. Metoda set_grouping_item přiřadí každé dvojici sdílený štítek na úrovni seskupení 1, což vytvoří osu kategorií s individuálními i skupinovými štítky.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 20, 20, 500, 300)
chart.chart_data.series.clear()
chart.chart_data.categories.clear()
workbook = chart.chart_data.chart_data_workbook
workbook.clear(0)
worksheet_index = 0
category_cell = workbook.get_cell(0, "c2", "A")
category = chart.chart_data.categories.add(category_cell)
category.grouping_levels.set_grouping_item(1, "Group1")
category_cell = workbook.get_cell(0, "c3", "B")
category = chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "c4", "C")
category = chart.chart_data.categories.add(category_cell)
category.grouping_levels.set_grouping_item(1, "Group2")
category_cell = workbook.get_cell(0, "c5", "D")
category = chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "c6", "E")
category = chart.chart_data.categories.add(category_cell)
category.grouping_levels.set_grouping_item(1, "Group3")
category_cell = workbook.get_cell(0, "c7", "F")
category = chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "c8", "G")
category = chart.chart_data.categories.add(category_cell)
category.grouping_levels.set_grouping_item(1, "Group4")
category_cell = workbook.get_cell(0, "c9", "H")
category = chart.chart_data.categories.add(category_cell)
series_name_cell = workbook.get_cell(0, "D1", "Series 1")
series = chart.chart_data.series.add(series_name_cell, charts.ChartType.CLUSTERED_COLUMN)
value_cell = workbook.get_cell(worksheet_index, "D2", 10)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, "D3", 20)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, "D4", 30)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, "D5", 40)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, "D6", 50)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, "D7", 60)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, "D8", 70)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, "D9", 80)
series.data_points.add_data_point_for_bar_series(value_cell)
presentation.save("AsposeChart.pptx", slides.export.SaveFormat.PPTX)
Výsledek:

Vytvořit mapové grafy
Mapové grafy slouží k vizualizaci geografických dat mapováním informací na konkrétní místa, jako jsou země, státy nebo města. Jsou zvláště užitečné pro analýzu regionálních trendů, demografických údajů a prostorových rozdělení v jasném, vizuálně atraktivním formátu.
Tento příklad používá add_chart k vytvoření mapového grafu s výchozími geografickými daty a uloží jej pro zobrazení v PowerPointu.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.MAP, 20, 20, 500, 300)
presentation.save("mapChart.pptx", slides.export.SaveFormat.PPTX)
Výsledek:

Note
Obrázek výše ukazuje uloženou prezentaci otevřenou v PowerPointu. Aspose.Slides zapisuje mapový graf a jeho data správně, ale samotný mapový graf nevykresluje: když je snímek obsahující mapu renderován jako obrázek nebo převeden do PDF či SVG, oblast grafu zůstane prázdná. Ostatní tvary na stejném snímku nejsou ovlivněny.Vytvořit kombinované grafy
Kombinovaný graf (nebo combo graf) spojuje dva nebo více typů grafů v jednom diagramu. Tento graf vám umožňuje zvýraznit, porovnat nebo zkoumat rozdíly mezi dvěma nebo více datasety, což vám pomůže identifikovat vztahy mezi nimi.

Tento příklad kombinuje dvě seskupené sloupcové série s čárovou sérií napříč čtyřmi kategoriemi. Sloupce používají primární svislou osu, zatímco plot_on_second_axis umístí čáru na sekundární svislou osu vpravo. Pomocné funkce nastaví název, legendu, popisky os a mřížku.
import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.charts as charts
def create_combo_chart():
with slides.Presentation() as presentation:
chart = create_chart_with_first_series(presentation.slides[0])
add_second_series_to_chart(chart)
add_third_series_to_chart(chart)
set_primary_axes_format(chart)
set_secondary_axes_format(chart)
presentation.save("combo-chart.pptx", slides.export.SaveFormat.PPTX)
def create_chart_with_first_series(slide):
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 50, 50, 600, 400)
chart.has_title = True
chart.chart_title.add_text_frame_for_overriding("Chart Title")
chart.chart_title.overlay = False
portion_format = chart.chart_title.text_frame_for_overriding.paragraphs[0].paragraph_format.default_portion_format
portion_format.font_bold = slides.NullableBool.FALSE
portion_format.font_height = 18
chart.legend.position = charts.LegendPositionType.BOTTOM
chart.legend.text_format.portion_format.font_height = 12
chart.chart_data.series.clear()
chart.chart_data.categories.clear()
workbook = chart.chart_data.chart_data_workbook
worksheet_index = 0
category_cell = workbook.get_cell(worksheet_index, 1, 0, "Category 1")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(worksheet_index, 2, 0, "Category 2")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(worksheet_index, 3, 0, "Category 3")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(worksheet_index, 4, 0, "Category 4")
chart.chart_data.categories.add(category_cell)
series_name_cell = workbook.get_cell(worksheet_index, 0, 1, "Series 1")
series = chart.chart_data.series.add(series_name_cell, chart.type)
series.parent_series_group.overlap = -25
series.parent_series_group.gap_width = 220
value_cell = workbook.get_cell(worksheet_index, 1, 1, 4.3)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 2, 1, 2.5)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 3, 1, 3.5)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 4, 1, 4.5)
series.data_points.add_data_point_for_bar_series(value_cell)
return chart
def add_second_series_to_chart(chart):
workbook = chart.chart_data.chart_data_workbook
worksheet_index = 0
series_name_cell = workbook.get_cell(worksheet_index, 0, 2, "Series 2")
series = chart.chart_data.series.add(series_name_cell, charts.ChartType.CLUSTERED_COLUMN)
series.parent_series_group.overlap = -25
series.parent_series_group.gap_width = 220
value_cell = workbook.get_cell(worksheet_index, 1, 2, 2.4)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 2, 2, 4.4)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 3, 2, 1.8)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 4, 2, 2.8)
series.data_points.add_data_point_for_bar_series(value_cell)
def add_third_series_to_chart(chart):
workbook = chart.chart_data.chart_data_workbook
worksheet_index = 0
series_name_cell = workbook.get_cell(worksheet_index, 0, 3, "Series 3")
series = chart.chart_data.series.add(series_name_cell, charts.ChartType.LINE)
value_cell = workbook.get_cell(worksheet_index, 1, 3, 2.0)
series.data_points.add_data_point_for_line_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 2, 3, 2.0)
series.data_points.add_data_point_for_line_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 3, 3, 3.0)
series.data_points.add_data_point_for_line_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 4, 3, 5.0)
series.data_points.add_data_point_for_line_series(value_cell)
series.plot_on_second_axis = True
def set_primary_axes_format(chart):
horizontal_axis = chart.axes.horizontal_axis
horizontal_axis.text_format.portion_format.font_height = 12
horizontal_axis.format.line.fill_format.fill_type = slides.FillType.NO_FILL
set_axis_title(horizontal_axis, "X Axis")
vertical_axis = chart.axes.vertical_axis
vertical_axis.text_format.portion_format.font_height = 12
vertical_axis.format.line.fill_format.fill_type = slides.FillType.NO_FILL
set_axis_title(vertical_axis, "Y Axis 1")
major_grid_lines_format = vertical_axis.major_grid_lines_format.line.fill_format
major_grid_lines_format.fill_type = slides.FillType.SOLID
major_grid_lines_format.solid_fill_color.color = draw.Color.from_argb(217, 217, 217)
def set_secondary_axes_format(chart):
secondary_horizontal_axis = chart.axes.secondary_horizontal_axis
secondary_horizontal_axis.position = charts.AxisPositionType.BOTTOM
secondary_horizontal_axis.cross_type = charts.CrossesType.MAXIMUM
secondary_horizontal_axis.is_visible = False
secondary_horizontal_axis.major_grid_lines_format.line.fill_format.fill_type = slides.FillType.NO_FILL
secondary_horizontal_axis.minor_grid_lines_format.line.fill_format.fill_type = slides.FillType.NO_FILL
secondary_vertical_axis = chart.axes.secondary_vertical_axis
secondary_vertical_axis.position = charts.AxisPositionType.RIGHT
secondary_vertical_axis.text_format.portion_format.font_height = 12
secondary_vertical_axis.format.line.fill_format.fill_type = slides.FillType.NO_FILL
secondary_vertical_axis.major_grid_lines_format.line.fill_format.fill_type = slides.FillType.NO_FILL
secondary_vertical_axis.minor_grid_lines_format.line.fill_format.fill_type = slides.FillType.NO_FILL
set_axis_title(secondary_vertical_axis, "Y Axis 2")
def set_axis_title(axis, axis_title):
axis.has_title = True
axis.title.overlay = False
title_portion_format = axis.title.add_text_frame_for_overriding(axis_title).paragraphs[0].paragraph_format.default_portion_format
title_portion_format.font_bold = slides.NullableBool.FALSE
title_portion_format.font_height = 12
create_combo_chart()
Aktualizovat grafy
Aspose.Slides for Python via .NET vám umožňuje aktualizovat PowerPoint grafy úpravou dat grafu, formátování a stylování. Tato funkčnost zjednodušuje proces udržování prezentací aktuálních s dynamickým obsahem a zajišťuje, že grafy přesně odrážejí současná data a vizuální standardy.
Tento příklad aktualizuje graf s názvem „My chart“ na prvním snímku existující prezentace. Vyžaduje dvě sériové sloupce se třemi datovými body v každé, přičemž štítky kategorií jsou ve sloupci A a názvy sérií v prvním řádku prvního listu. Příklad používá get_cell ke změně buněk sešitu, aktualizuje hodnoty sérií, přidá třetí sérii a změní graf na seskupené válce pomocí type.
import aspose.slides as slides
import aspose.slides.charts as charts
chart_name = "My chart"
with slides.Presentation("ExistingChart.pptx") as presentation:
slide = presentation.slides[0]
for shape in slide.shapes:
if isinstance(shape, charts.Chart) and shape.name == chart_name:
chart = shape
worksheet_index = 0
workbook = chart.chart_data.chart_data_workbook
workbook.get_cell(worksheet_index, 1, 0, "Modified Category 1")
workbook.get_cell(worksheet_index, 2, 0, "Modified Category 2")
series = chart.chart_data.series[0]
workbook.get_cell(worksheet_index, 0, 1, "New_Series 1")
series.data_points[0].value.data = 90
series.data_points[1].value.data = 123
series.data_points[2].value.data = 44
series = chart.chart_data.series[1]
workbook.get_cell(worksheet_index, 0, 2, "New_Series 2")
series.data_points[0].value.data = 23
series.data_points[1].value.data = 67
series.data_points[2].value.data = 99
series_name_cell = workbook.get_cell(worksheet_index, 0, 3, "Series 3")
series = chart.chart_data.series.add(series_name_cell, chart.type)
value_cell = workbook.get_cell(worksheet_index, 1, 3, 20)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 2, 3, 50)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 3, 3, 30)
series.data_points.add_data_point_for_bar_series(value_cell)
chart.type = charts.ChartType.CLUSTERED_CYLINDER
presentation.save("AsposeChartModified.pptx", slides.export.SaveFormat.PPTX)
Nastavit datový rozsah pro graf
Chcete‑li prozkoumat rozsah již použitý existujícím grafem, podívejte se na Retrieve a Chart’s Data Range.
Aspose.Slides for Python via .NET poskytuje flexibilitu definovat konkrétní datový rozsah z listu jako zdroj dat pro váš graf. To znamená, že můžete přímo mapovat část listu na graf, což vám umožní řídit, které buňky přispívají ke sériím a kategoriím grafu. Výsledkem je snadná aktualizace a synchronizace vašich grafů s nejnovějšími změnami v datech listu, čímž zajistíte, že vaše PowerPoint prezentace odrážejí aktuální a přesné informace.
Tento příklad používá set_range k nastavení datového zdroje grafu s názvem „My chart“ na prvním snímku existující prezentace na Sheet1!A1:B4. Sešit grafu musí tento list obsahovat a musí mít vyplněný rozsah s názvem série v prvním řádku, štítky kategorií ve sloupci A a třemi hodnotami ve sloupci B.
import aspose.slides as slides
import aspose.slides.charts as charts
chart_name = "My chart"
with slides.Presentation("ExistingChart.pptx") as presentation:
slide = presentation.slides[0]
for shape in slide.shapes:
if isinstance(shape, charts.Chart) and shape.name == chart_name:
chart = shape
chart.chart_data.set_range("Sheet1!A1:B4")
presentation.save("SetDataRange.pptx", slides.export.SaveFormat.PPTX)
Použít výchozí značky v grafech
Když použijete výchozí značky v grafech, každá série grafu automaticky získá odlišný výchozí symbol značky.
Tento příklad používá add_chart k vytvoření grafu se dvěma čárovými sériemi a legendou. Nastavení marker si ponechává automaticky přiřazené symboly značek. První série obsahuje zápornou hodnotu a chybějící hodnotu reprezentovanou None, zatímco druhá má hodnotu pro každou kategorii.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.LINE_WITH_MARKERS, 10, 10, 400, 400)
chart.chart_data.series.clear()
chart.chart_data.categories.clear()
workbook = chart.chart_data.chart_data_workbook
series_name_cell = workbook.get_cell(0, 0, 1, "Series 1")
series = chart.chart_data.series.add(series_name_cell, chart.type)
category_cell = workbook.get_cell(0, 1, 0, "C1")
chart.chart_data.categories.add(category_cell)
value_cell = workbook.get_cell(0, 1, 1, 24)
series.data_points.add_data_point_for_line_series(value_cell)
category_cell = workbook.get_cell(0, 2, 0, "C2")
chart.chart_data.categories.add(category_cell)
value_cell = workbook.get_cell(0, 2, 1, 23)
series.data_points.add_data_point_for_line_series(value_cell)
category_cell = workbook.get_cell(0, 3, 0, "C3")
chart.chart_data.categories.add(category_cell)
value_cell = workbook.get_cell(0, 3, 1, -10)
series.data_points.add_data_point_for_line_series(value_cell)
category_cell = workbook.get_cell(0, 4, 0, "C4")
chart.chart_data.categories.add(category_cell)
value_cell = workbook.get_cell(0, 4, 1, None)
series.data_points.add_data_point_for_line_series(value_cell)
series_name_cell = workbook.get_cell(0, 0, 2, "Series 2")
second_series = chart.chart_data.series.add(series_name_cell, chart.type)
value_cell = workbook.get_cell(0, 1, 2, 30)
second_series.data_points.add_data_point_for_line_series(value_cell)
value_cell = workbook.get_cell(0, 2, 2, 10)
second_series.data_points.add_data_point_for_line_series(value_cell)
value_cell = workbook.get_cell(0, 3, 2, 60)
second_series.data_points.add_data_point_for_line_series(value_cell)
value_cell = workbook.get_cell(0, 4, 2, 40)
second_series.data_points.add_data_point_for_line_series(value_cell)
chart.has_legend = True
chart.legend.overlay = False
presentation.save("DefaultMarkersInChart.pptx", slides.export.SaveFormat.PPTX)
Často kladené otázky
Jaké typy grafů jsou podporovány Aspose.Slides for Python via .NET?
Aspose.Slides for Python via .NET podporuje širokou škálu typů grafů, včetně sloupcových, čárových, koláčových, oblastních, bodových, histogramů, radarových a mnoha dalších. Tato flexibilita vám umožňuje vybrat nejvhodnější typ grafu pro vaše vizualizační potřeby.
Jak přidám nový graf na snímek?
Chcete‑li přidat graf, nejprve vytvoříte instanci třídy Presentation, získáte požadovaný snímek pomocí jeho indexu a pak zavoláte metodu pro přidání grafu, přičemž specifikujete typ grafu a počáteční data. Tento proces integruje graf přímo do vaší prezentace.
Jak mohu aktualizovat data zobrazená v grafu?
Data grafu můžete aktualizovat přístupem k jeho sešitu dat (ChartDataWorkbook), vymazáním výchozích sérií a kategorií a následným přidáním vlastních dat. To vám umožní programově obnovit graf tak, aby odrážel nejnovější data.
Je možné přizpůsobit vzhled grafu?
Ano, Aspose.Slides for Python via .NET poskytuje rozsáhlé možnosti přizpůsobení. Můžete měnit barvy, písma, popisky, legendy a další formátovací prvky, abyste graf upravili podle svých konkrétních požadavků na design.