Grafiekassen aanpassen in presentaties met Python
Overzicht
Dit artikel legt uit hoe u diagramassen kunt aanpassen met Aspose.Slides voor Python via Java. Het behandelt berekende aswaarden, het verwisselen van rijen en kolommen in een diagram, zichtbaarheid van assen, intervallen voor categorie‑labels en tik‑markeringen, datumcategorieën en opmaak, titelrotatie, positie van assen en weergave‑eenheden.
De maximale waarden op de verticale as van een diagram ophalen
Maak een Presentation aan en voeg een vlakdiagram toe met standaardgegevens. Roep validateChartLayout aan voordat u berekende aswaarden leest, zodat de diagramlay-out up‑to‑date is.
Lees getActualMaxValue en getActualMinValue voor de aslimieten, en getActualMajorUnit en getActualMinorUnit voor de tik‑intervallen. getActualMajorUnitScale en getActualMinorUnitScale geven tijdseenheid‑schalen, die relevant zijn voor datumassen. Het voorbeeld slaat deze waarden op in lokale variabelen en slaat het diagram op.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.Area, 100, 100, 500, 350)
chart.validateChartLayout()
max_value = chart.getAxes().getVerticalAxis().getActualMaxValue()
min_value = chart.getAxes().getVerticalAxis().getActualMinValue()
major_unit = chart.getAxes().getVerticalAxis().getActualMajorUnit()
minor_unit = chart.getAxes().getVerticalAxis().getActualMinorUnit()
major_unit_scale = chart.getAxes().getVerticalAxis().getActualMajorUnitScale()
minor_unit_scale = chart.getAxes().getVerticalAxis().getActualMinorUnitScale()
presentation.save("AxisValues_out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Gegevens tussen assen verwisselen
Gebruik switchRowColumn om de rollen van reeksen en categorieën in diagramgegevens uit te wisselen. Elke voormalige categorie wordt een reeks, en elke voormalige reeks wordt een categorie. Dit verandert hoe de gegevens worden gegroepeerd; het wisselt niet de horizontale en verticale assen uit. Het voorbeeld gebruikt setRange om de standaardgegevens te binden aan Sheet1!A1:D5, inclusief de koprij en categoriekolom, vóór het verwisselen van rijen en kolommen. Het slaat een diagram op met vier reeksen en drie categorieën.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 100, 100, 400, 300)
chart.getChartData().setRange("Sheet1!A1:D5")
chart.getChartData().switchRowColumn()
presentation.save("SwitchChartRowColumns_out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Verticale as uitschakelen voor lijndiagrammen
Roep setVisible aan met False op de verticale as om deze te verbergen. Het voorbeeld maakt een lijndiagram met standaardgegevens en slaat het op met de verticale as verborgen.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.Line, 100, 100, 400, 300)
chart.getAxes().getVerticalAxis().setVisible(False)
presentation.save("HiddenVerticalAxis.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Horizontale as uitschakelen voor lijndiagrammen
Roep setVisible aan met False op de horizontale as om deze te verbergen. Het voorbeeld maakt een lijndiagram met standaardgegevens en slaat het op met de horizontale as verborgen.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.Line, 100, 100, 400, 300)
chart.getAxes().getHorizontalAxis().setVisible(False)
presentation.save("HiddenHorizontalAxis.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Een categorische as wijzigen
Gebruik setCategoryAxisType om een datum‑ of tekst‑categorische as te selecteren. Dit voorbeeld vereist ExistingChart.pptx, met een diagram als het eerste object op de eerste dia en categoriecellen die numerieke Excel‑datumwaarden bevatten. Het verandert de horizontale as in een datumas. Door setAutomaticMajorUnit aan te roepen met False, setMajorUnit met 1, en setMajorUnitScale met TimeUnitType.Months worden de grote tikken op één‑maandintervallen geplaatst.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, CategoryAxisType, TimeUnitType
presentation = Presentation("ExistingChart.pptx")
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().get_Item(0)
chart.getAxes().getHorizontalAxis().setCategoryAxisType(CategoryAxisType.Date)
chart.getAxes().getHorizontalAxis().setAutomaticMajorUnit(False)
chart.getAxes().getHorizontalAxis().setMajorUnit(1)
chart.getAxes().getHorizontalAxis().setMajorUnitScale(TimeUnitType.Months)
presentation.save("ChangeChartCategoryAxis_out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Intervallen voor categorische as‑labels beheren
Wanneer een diagram veel categorieën heeft, kunt u het aantal zichtbare as‑labels verminderen zonder categorieën of gegevenspunten te verwijderen. Roep setAutomaticTickLabelSpacing aan met False, geef vervolgens het gewenste categorie‑interval mee aan setTickLabelSpacing. Voor tekstcategorieën in hun normale volgorde begint de telling bij de eerste categorie:
| Interval | Labels die in het voorbeeld worden weergegeven |
|---|---|
1 |
Category 1, Category 2, Category 3, … Category 24 |
2 |
Category 1, Category 3, Category 5, … Category 23 |
3 |
Category 1, Category 4, Category 7, … Category 22 |
Een interval van 3 toont elk derde label, waardoor twee labels verborgen blijven tussen de weergegeven labels. Het verwijdert de overeenkomende kolommen niet. Automatische spreiding kiest een interval op basis van de beschikbare ruimte; het hoeft niet elk label te tonen.
Tik‑markeringen hebben aparte instellingen. Roep setAutomaticTickMarksSpacing aan met False en gebruik setTickMarksSpacing om hun interval in te stellen. Bijvoorbeeld, 1 behoudt een tik‑markering bij elk categorie‑interval terwijl labels alleen elke derde categorie verschijnen. Gebruik setMajorTickMark met een zichtbaar stijl zodat u het resultaat kunt zien. Als u een van de automatische‑spatie‑instellers opnieuw aanroept met True, laat u het diagram dat interval weer kiezen.
Het volgende zelfstandige voorbeeld maakt 24 categorieën en één reeks, en slaat vervolgens drie dia’s op in CategoryAxisIntervals.pptx: automatische spreiding, handmatige label‑spreiding met onafhankelijke tik‑markeringen, en herstelde automatische spreiding. De twee kopieën behouden de oorspronkelijke diagramgegevens. Er is geen invoerpresentatie nodig. Horizontale labeltekst maakt het verschil in dichtheid gemakkelijk zichtbaar.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat, CategoryAxisType, TickMarkType
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 30, 40, 660, 320)
chart.setLegend(False)
chart.getChartData().getCategories().clear()
chart.getChartData().getSeries().clear()
workbook = chart.getChartData().getChartDataWorkbook()
workbook.clear(0)
series = chart.getChartData().getSeries().add(ChartType.ClusteredColumn)
for i in range(24):
category_cell = workbook.getCell(0, i + 1, 0, f"Category {i + 1}")
chart.getChartData().getCategories().add(category_cell)
value_cell = workbook.getCell(0, i + 1, 1, float(10 + i % 6 * 5))
series.getDataPoints().addDataPointForBarSeries(value_cell)
axis = chart.getAxes().getHorizontalAxis()
axis.setCategoryAxisType(CategoryAxisType.Text)
axis.getTextFormat().getTextBlockFormat().setRotationAngle(0)
axis.getTextFormat().getPortionFormat().setFontHeight(12)
axis.setMajorTickMark(TickMarkType.Outside)
axis.setAutomaticTickLabelSpacing(True)
axis.setAutomaticTickMarksSpacing(True)
# Dia 2: toon elk derde label, maar behoud een tikmarkering voor elke categorie.
manual_slide = presentation.getSlides().addClone(slide)
manual_chart = manual_slide.getShapes().get_Item(0)
manual_axis = manual_chart.getAxes().getHorizontalAxis()
manual_axis.setAutomaticTickLabelSpacing(False)
manual_axis.setTickLabelSpacing(3)
manual_axis.setAutomaticTickMarksSpacing(False)
manual_axis.setTickMarksSpacing(1)
# Dia 3: laat het diagram beide intervallen opnieuw kiezen.
restored_slide = presentation.getSlides().addClone(manual_slide)
restored_chart = restored_slide.getShapes().get_Item(0)
restored_chart.getAxes().getHorizontalAxis().setAutomaticTickLabelSpacing(True)
restored_chart.getAxes().getHorizontalAxis().setAutomaticTickMarksSpacing(True)
presentation.save("CategoryAxisIntervals.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Automatische spreiding (dia 1): In deze weergave wordt elk tweede categorielabel weergegeven en wordt op twee regels afgebroken. Het automatische resultaat kan variëren afhankelijk van de diagramgrootte, lettertypen en de renderer.

Handmatige spreiding (dia 2): Elk derde label wordt op één regel weergegeven, terwijl tik‑markeringen bij elk categorie‑interval blijven. Alle 24 kolommen, inclusief die zonder labels, blijven zichtbaar met dezelfde waarden. Dia 3 herstelt de automatische weergave zoals hierboven getoond.

De juiste as en interval kiezen
Gebruik dit categorie‑tel‑interval voor een tekst‑categorische as, zoals de categorische as van een kolom-, lijn-, gebieds- of staafdiagram. In een kolomdiagram is dit de horizontale as. In een horizontaal staafdiagram is de categorische as verticaal, dus pas deze instellingen toe op de as die wordt geretourneerd door getVerticalAxis. De tik‑mark‑spatiëring geldt ook voor een reeksenas in diagrammen die er een hebben.
Gebruik de categorie‑label‑spatiëring niet om de numerieke schaal van een waardenas in te stellen. Op een waardenas specificeert setMajorUnit een verschil in waarden: bijvoorbeeld, een grote eenheid van 10 levert tikken op 0, 10, 20, enzovoort op wanneer de as bij nul begint. Een categorie‑label‑interval van 3 telt in plaats daarvan de categorie‑posities, ongeacht hun gegevenswaarden. Spreidings‑ en bubbeldiagrammen gebruiken waardenassen in plaats van een tekst‑categorische as. Voor een datumas gebruikt u tijdgebaseerde grote eenheden en schalen zoals beschreven in Wijzigen van een categorische as.
Datumindeling instellen voor categorische as‑waarden
Het voorbeeld vervangt de standaarddiagramgegevens door vier jaargelden. Datums worden opgeslagen als OLE‑Automation‑serienummers in het eerste werkblad (index 0), berekend als het aantal dagen sinds 30 december 1899 voor deze datums. Gebruik setCategoryAxisType met CategoryAxisType.Date, roep setNumberFormatLinkedToSource aan met False, en geef yyyy door aan setNumberFormat zodat de categorielabels viercijferige jaren tonen, onafhankelijk van de celopmaak.
from datetime import date
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat, CategoryAxisType
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.Line, 50, 50, 450, 300)
chart.getChartData().getCategories().clear()
chart.getChartData().getSeries().clear()
workbook = chart.getChartData().getChartDataWorkbook()
workbook.clear(0)
base_date = date(1899, 12, 30)
series = chart.getChartData().getSeries().add(ChartType.Line)
for i in range(4):
category_date = date(2015 + i, 1, 1)
category_value = float((category_date - base_date).days)
category_cell = workbook.getCell(0, i + 1, 0, category_value)
chart.getChartData().getCategories().add(category_cell)
value_cell = workbook.getCell(0, i + 1, 1, float(i + 1))
series.getDataPoints().addDataPointForLineSeries(value_cell)
chart.getAxes().getHorizontalAxis().setCategoryAxisType(CategoryAxisType.Date)
chart.getAxes().getHorizontalAxis().setNumberFormatLinkedToSource(False)
chart.getAxes().getHorizontalAxis().setNumberFormat("yyyy")
presentation.save("DateAxisFormat.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Rotatiehoek instellen voor een diagramas‑titel
Roep setTitle aan met True op de verticale as, geef de titeltekst op, en stel de rotatiehoek in de opmaak van het tekstblok van de titel in. De hoek wordt gemeten in graden; dit voorbeeld slaat een kolomdiagram op met de titel van de waardenas geroteerd met 90 graden.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 450, 300)
chart.getAxes().getVerticalAxis().setTitle(True)
chart.getAxes().getVerticalAxis().getTitle().addTextFrameForOverriding("Value")
chart.getAxes().getVerticalAxis().getTitle().getTextFormat().getTextBlockFormat().setRotationAngle(90)
presentation.save("RotatedAxisTitle.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Aspositie instellen op een categorische of waardenas
Gebruik setAxisBetweenCategories om te regelen of de waardenas de categorische as tussen categorieën of op de categorische tik‑markeringen kruist. Deze instelling geldt voor categorische assen. Het voorbeeld stelt dit in op True op de horizontale categorische as van een kolomdiagram en slaat het resultaat op.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 450, 300)
chart.getAxes().getHorizontalAxis().setAxisBetweenCategories(True)
presentation.save("AxisBetweenCategories.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Weergave‑eenheid instellen op een diagramwaardenas
Gebruik setDisplayUnit om de labels op een waardenas te schalen zonder de onderliggende gegevens te wijzigen. Met DisplayUnitType ingesteld op Millions wordt een waarde van 60.000.000 weergegeven als 60. Het voorbeeld maakt een kolomdiagram en past de miljoenen‑weergave‑eenheid toe op de verticale as.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat, DisplayUnitType
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 450, 300)
chart.getAxes().getVerticalAxis().setDisplayUnit(DisplayUnitType.Millions)
presentation.save("Result.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
FAQ
Hoe stel ik de waarde in waarop één as de andere kruist (as‑kruising)?
Gebruik setCrossType om het kruisk gedrag te selecteren. Om een numerieke kruiswaarde op te geven, gebruik setCrossAt. Deze instellingen laten u de as‑kruising naar een geschikte basislijn verplaatsen.
Hoe kan ik tik‑labels positioneren ten opzichte van de as?
Roep setTickLabelPosition aan met TickLabelPositionType: Low, High, NextTo of None. Om de tik‑markeringen zelf te regelen, gebruik setMajorTickMark of setMinorTickMark; deze staan los van de label‑positionering.