Beheer grafiekdataseries in presentaties met Python
Overzicht
Een grafiek slaat zijn geplotte gegevens op in een grafiekgegevens‑werkmap. Een ChartSeries vertegenwoordigt één set gerelateerde waarden, en elk ChartDataPoint in de serie verwijst naar één of meer cellen in de werkmap. ChartCategory‑objecten leveren de labels of groepeerwaarden die door de series worden gedeeld. De serienaam, categorieën en puntwaarden zijn daarom gekoppeld aan ChartDataCell‑objecten in plaats van alleen als weergavetekst te worden opgeslagen.
Voor een typische categorie‑grafiek gebruikt de standaard werkmap rij 0 voor serienamen, kolom 0 voor categorienamen en de resterende cellen voor seriewaarden. Werkblad‑, rij‑ en kolomindexen die worden doorgegeven aan ChartDataWorkbook.get_cell zijn nul‑gebaseerd. Deze lay‑out is handig wanneer u een grafiek met standaardgegevens maakt, maar ga er niet van uit dat elke bestaande grafiek deze gebruikt. Voor een geladen presentatie inspecteert u de cellen die door de series, categorieën en datapunten worden gerefereerd voordat u werkmap‑waarden wijzigt.
Grafiekinstellingen hebben drie verschillende reikwijdtes:
- Instellingen op serieniveau, zoals ChartSeries.format, bieden de standaardopmaak voor alle punten in één serie.
- Instellingen voor datapunt, zoals ChartDataPoint.format, overschrijven de serie‑opmaak voor één punt.
- Groepsinstellingen zijn van toepassing op compatibele series die tot dezelfde ChartSeriesGroup behoren. Open de groep via ChartSeries.parent_series_group wanneer u opties zoals overlap of gatbreedte wilt instellen.
Wanneer er geen expliciete punt‑ of serie‑vulling is ingesteld, bepalen het grafiek‑stijl en het thema de automatische weergave. Wanneer zowel serie‑ als punt‑opmaak aanwezig zijn, heeft de punt‑opmaak voorrang voor dat punt.

Stel de overlap van de grafiekserie in
ChartSeries.overlap geeft weer hoeveel balken of kolommen overlappen in een 2D‑grafiek, van -100 tot 100 procent. Het is een alleen‑lezen weergave van de instelling op de bovenliggende seriegroep. Stel ChartSeriesGroup.overlap in om elke compatibele serie in die groep bij te werken. Deze optie is van toepassing op grafiektype die gegroepeerde balken of kolommen weergeven; het beïnvloedt geen niet‑gerelateerde seriegroepen in een combinatie‑grafiek.
Het volgende voorbeeld stelt de overlap in voor de groep die de eerste serie bevat:
import aspose.slides as slides
import aspose.slides.charts as charts
first_slide_index = 0
first_series_index = 0
overlap_percent = 30
with slides.Presentation() as presentation:
slide = presentation.slides[first_slide_index]
# De nieuwe grafiek bevat voorbeeldreeksen, categorieën en waarden.
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 20, 20, 500, 200)
series = chart.chart_data.series[first_series_index]
series.parent_series_group.overlap = overlap_percent
presentation.save("series_overlap.pptx", slides.export.SaveFormat.PPTX)
Het resultaat:

Wijzig de vullingkleur van de serie
Gebruik ChartSeries.format om de standaardvulling voor een volledige serie in te stellen. Als een punt al een expliciete vulling heeft, overschrijft zijn ChartDataPoint.format‑instelling de serievulling voor dat punt.
Het volgende voorbeeld past een effen blauwe vulling toe op de eerste serie:
import aspose.pydrawing as drawing
import aspose.slides as slides
import aspose.slides.charts as charts
first_slide_index = 0
first_series_index = 0
with slides.Presentation() as presentation:
slide = presentation.slides[first_slide_index]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 20, 20, 500, 200)
series = chart.chart_data.series[first_series_index]
series.format.fill.fill_type = slides.FillType.SOLID
series.format.fill.solid_fill_color.color = drawing.Color.blue
presentation.save("series_color.pptx", slides.export.SaveFormat.PPTX)
Het resultaat:

Wijzig de serienaam
Een serienaam wordt opgeslagen in de grafiekgegevens‑werkmap en wordt normaal weergegeven in de legenda. In de standaard werkmap die wordt aangemaakt voor een gegroepeerde kolomgrafiek, bevindt cel B1 zich in rij 0, kolom 1 en bevat de naam van de eerste serie. De benoemde constanten in het volgende voorbeeld maken die structuur expliciet:
import aspose.slides as slides
import aspose.slides.charts as charts
first_slide_index = 0
worksheet_index = 0
series_name_row_index = 0
first_series_column_index = 1
with slides.Presentation() as presentation:
slide = presentation.slides[first_slide_index]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 20, 20, 500, 200)
workbook = chart.chart_data.chart_data_workbook
series_name_cell = workbook.get_cell(worksheet_index, series_name_row_index, first_series_column_index)
series_name_cell.value = "Revenue"
presentation.save("series_name.pptx", slides.export.SaveFormat.PPTX)
U kunt ook de cel bijwerken die al wordt gerefereerd door ChartSeries.name. Deze aanpak vermijdt het aannemen van een specifieke rij en kolom in een bestaande grafiek:
import aspose.slides as slides
import aspose.slides.charts as charts
first_slide_index = 0
first_series_index = 0
first_name_cell_index = 0
with slides.Presentation() as presentation:
slide = presentation.slides[first_slide_index]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 20, 20, 500, 200)
series = chart.chart_data.series[first_series_index]
series_name_cell = series.name.as_cells[first_name_cell_index]
series_name_cell.value = "Revenue"
presentation.save("series_name.pptx", slides.export.SaveFormat.PPTX)
Het resultaat:

Haal de automatische serievullingskleur op
ChartSeries.get_automatic_series_color retourneert de kleur die is berekend op basis van de seriële index en de grafiekstijl. Dit is de kleur die wordt gebruikt wanneer de serievulling niet expliciet is gedefinieerd. Het aanroepen van de methode leest de berekende kleur; het wijst geen nieuwe vulling toe.
Het volgende voorbeeld print de automatische kleur van elke standaard serie:
import aspose.slides as slides
import aspose.slides.charts as charts
first_slide_index = 0
with slides.Presentation() as presentation:
slide = presentation.slides[first_slide_index]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 20, 20, 500, 200)
series_count = len(chart.chart_data.series)
for series_index in range(series_count):
series = chart.chart_data.series[series_index]
automatic_color = series.get_automatic_series_color()
print(f"Series {series_index}: {automatic_color.name}")
Voorbeeldoutput voor de standaard grafiekstijl:
Series 0: ff4f81bd
Series 1: ffc0504d
Series 2: ff9bbb59
De exacte kleuren hangen af van de grafiekstijl en het thema.
Stel omgekeerde vullingskleur in voor een grafiekserie
Voor balk‑, kolom‑ en bubbel‑series kan ChartSeries.invert_if_negative negatieve waarden weergeven met een andere vulling. Stel de reguliere serievulling in op effen, schakel inversie in, en wijs de negatieve‑waarde‑kleur toe via ChartSeries.inverted_solid_fill_color. Negatieve getallen blijven ongewijzigd in de werkmap; alleen hun weergavekleur verandert.
Het volgende voorbeeld vervangt de standaard grafiekgegevens door één serie. Rij 0 van het werkblad bevat de serienaam, kolom 0 bevat categorienamen, en kolom 1 bevat de waarden:
import aspose.pydrawing as drawing
import aspose.slides as slides
import aspose.slides.charts as charts
first_slide_index = 0
worksheet_index = 0
header_row_index = 0
category_column_index = 0
first_series_column_index = 1
first_data_row_index = 1
category_names = ["Category 1", "Category 2", "Category 3"]
series_values = [-20, 50, -30]
with slides.Presentation() as presentation:
slide = presentation.slides[first_slide_index]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 20, 20, 500, 200)
chart_data = chart.chart_data
workbook = chart_data.chart_data_workbook
chart_data.series.clear()
chart_data.categories.clear()
series_name_cell = workbook.get_cell(worksheet_index, header_row_index, first_series_column_index, "Series 1")
series = chart_data.series.add(series_name_cell, chart.type)
category_count = len(category_names)
for category_index in range(category_count):
data_row_index = first_data_row_index + category_index
category_name = category_names[category_index]
series_value = series_values[category_index]
category_cell = workbook.get_cell(worksheet_index, data_row_index, category_column_index, category_name)
chart_data.categories.add(category_cell)
value_cell = workbook.get_cell(worksheet_index, data_row_index, first_series_column_index, series_value)
series.data_points.add_data_point_for_bar_series(value_cell)
automatic_series_color = series.get_automatic_series_color()
series.format.fill.fill_type = slides.FillType.SOLID
series.format.fill.solid_fill_color.color = automatic_series_color
series.invert_if_negative = True
series.inverted_solid_fill_color.color = drawing.Color.red
presentation.save("inverted_solid_fill_color.pptx", slides.export.SaveFormat.PPTX)
Het resultaat:

U kunt inversie inschakelen voor één punt via ChartDataPoint.invert_if_negative. In het volgende voorbeeld is inversie uitgeschakeld voor de serie en alleen ingeschakeld voor het geselecteerde punt. Het punt krijgt ook een negatieve waarde zodat het effect zichtbaar is:
import aspose.pydrawing as drawing
import aspose.slides as slides
import aspose.slides.charts as charts
first_slide_index = 0
first_series_index = 0
target_data_point_index = 2
negative_value = -30
with slides.Presentation() as presentation:
slide = presentation.slides[first_slide_index]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 20, 20, 500, 200)
series = chart.chart_data.series[first_series_index]
automatic_series_color = series.get_automatic_series_color()
series.format.fill.fill_type = slides.FillType.SOLID
series.format.fill.solid_fill_color.color = automatic_series_color
series.inverted_solid_fill_color.color = drawing.Color.red
series.invert_if_negative = False
data_point = series.data_points[target_data_point_index]
data_point.value.as_cell.value = negative_value
data_point.invert_if_negative = True
presentation.save("data_point_invert_color_if_negative.pptx", slides.export.SaveFormat.PPTX)
Wis een specifieke datapuntwaarde
Om één punt leeg te maken zonder de andere punten te verwijderen, stelt u de onderliggende werkmapcel in op None. Voor een kolomgrafiek is de geplotte waarde beschikbaar via ChartDataPoint.value. Het datapunt blijft op dezelfde categorische positie, maar de grafiek behandelt de waarde als leeg volgens de instellingen voor lege waarden van de grafiek.
Het volgende voorbeeld wist alleen het tweede punt in de eerste serie:
import aspose.slides as slides
import aspose.slides.charts as charts
first_slide_index = 0
first_series_index = 0
target_data_point_index = 1
with slides.Presentation() as presentation:
slide = presentation.slides[first_slide_index]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 20, 20, 500, 200)
series = chart.chart_data.series[first_series_index]
data_point = series.data_points[target_data_point_index]
data_point.value.as_cell.value = None
presentation.save("clear_data_point_value.pptx", slides.export.SaveFormat.PPTX)
Scatter‑grafieken gebruiken aparte X‑ en Y‑cellen, en bubbel‑grafieken gebruiken bovendien een grootte‑cel. Wis alleen de cel die de waarde vertegenwoordigt die u wilt verwijderen. Roep ChartDataPointCollection.clear niet aan wanneer u de andere punten wilt behouden, omdat die methode elk datapunt uit de collectie verwijdert.
Stel de gatbreedte van de serie in
De gatbreedte is de ruimte tussen aangrenzende balk‑ of kolom‑clusters, uitgedrukt als een percentage van de balk‑ of kolombreedte. Net als overlap behoort deze tot de bovenliggende seriegroep en niet tot één serie. Stel ChartSeriesGroup.gap_width één keer in voor de groep. Een hogere waarde creëert meer ruimte tussen clusters; een lagere waarde maakt ze dichter.
Het volgende voorbeeld wijzigt de gatbreedte en slaat alleen de uiteindelijke presentatie op:
import aspose.slides as slides
import aspose.slides.charts as charts
first_slide_index = 0
first_series_index = 0
gap_width_percent = 30
with slides.Presentation() as presentation:
slide = presentation.slides[first_slide_index]
chart = slide.shapes.add_chart(charts.ChartType.STACKED_COLUMN, 20, 20, 500, 200)
series = chart.chart_data.series[first_series_index]
series.parent_series_group.gap_width = gap_width_percent
presentation.save("gap_width_30.pptx", slides.export.SaveFormat.PPTX)
Het resultaat:

FAQ
Welke grafiektypen ondersteunen dataseries?
Alle grafiektypen die worden weergegeven door de ChartType‑enumeratie gebruiken grafiekgegevens, maar hun series hebben niet allemaal dezelfde waardestructuur of instellingen. Bijvoorbeeld, categorie‑grafieken gebruiken categorieën en waarden, scatter‑grafieken gebruiken X‑ en Y‑waarden, en bubbel‑grafieken voegen bubbelgroottes toe. Gebruik de datapunt‑creatiemethode die overeenkomt met het serietype. Opties zoals overlap en gatbreedte zijn alleen van toepassing op compatibele balk‑ of kolom‑groepen.
Wat is een grafiekserie‑groep?
Een ChartSeriesGroup bevat compatibele series die groeps‑niveau plotinstellingen delen. Een combinatie‑grafiek kan meer dan één groep bevatten, dus het wijzigen van de groep die via één serie wordt bereikt, betekent niet noodzakelijk dat elke serie in de grafiek wordt aangepast.
Bevat een nieuw aangemaakte grafiek standaardgegevens?
Ja. Standaard maakt ShapeCollection.add_chart voorbeeld‑series, -categorieën en -waarden aan. U kunt die cellen bewerken of zowel de serie‑ als categoricollecties wissen voordat u een volledig aangepaste dataset toevoegt. Een overload kan ook een grafiek maken zonder standaardgegevens.
Hoe zijn grafiekobjecten verbonden met werkmapcellen?
Serienamen, categorielabels en datapuntwaarden refereren naar cellen in een ChartDataWorkbook. Het wijzigen van een gerefereerde cel werkt het overeenkomstige grafiekelement bij. Wanneer u aangepaste gegevens opbouwt, houd dan categorierijen en seriewaarde‑rijen op één lijn zodat elk punt onder de beoogde categorie wordt geplot.
Hoe wis ik één punt in plaats van de hele serie?
Stel de betreffende waardecel in op None om de categorische positie van het punt te behouden als een leeg punt. Gebruik ChartDataPointCollection.clear alleen wanneer u alle punten uit die serie wilt verwijderen. Als u ook categorieën verwijdert, werk dan elke serie bij zodat hun waarden uitgelijnd blijven met de categoricollectie.
Hoe worden lege punten weergegeven?
Het resultaat hangt af van het grafiektype en Chart.display_blanks_as. Ondersteunde grafieken kunnen lege waarden weergeven als gaten, als nul‑waarden, of door aangrenzende punten te verbinden. Kies de instelling die overeenkomt met de betekenis van ontbrekende gegevens in uw presentatie.
Hoe worden negatieve waarden opgemaakt?
Voor ondersteunde balk‑, kolom‑ en bubbel‑series schakelt u ChartSeries.invert_if_negative in en stelt u ChartSeries.inverted_solid_fill_color in. U kunt het gedrag voor een individueel punt overschrijven met ChartDataPoint.invert_if_negative. Deze eigenschappen beïnvloeden de opmaak, niet de opgeslagen numerieke waarden.
Welke opmaak heeft voorrang wanneer zowel een serie als een punt zijn opgemaakt?
Expliciete datapunt‑opmaak heeft voorrang voor dat punt. Andere punten blijven de expliciete serie‑opmaak gebruiken of, wanneer de serie‑opmaak niet is gedefinieerd, de automatische grafiekstijl en het thema. Groeps‑eigenschappen zoals overlap en gatbreedte bepalen de lay‑out en zijn geen overschrijvingen op puntniveau.
Is er een limiet aan hoeveel series een grafiek kan bevatten?
Aspose.Slides legt geen aparte vaste limiet op voor het aantal series. In de praktijk bepalen de beperkingen van het presentatie‑bestand, beschikbaar geheugen, render‑tijd en de leesbaarheid van de grafiek een praktisch limiet.
Wat moet ik aanpassen wanneer kolommen te dicht bij elkaar of te ver van elkaar staan?
Stel ChartSeriesGroup.gap_width in op de juiste bovenliggende seriegroep. Verhoog de waarde om de ruimte tussen clusters te vergroten, of verlaag deze om de clusters dichter bij elkaar te brengen.