Diagramassen aanpassen in presentaties met Java
Overzicht
Dit artikel legt uit hoe u de assen van diagrammen kunt aanpassen met Aspose.Slides voor Java. Het behandelt berekende aswaarden, het wisselen van diagramrijen en -kolommen, aszichtbaarheid, intervallen voor categorielabels en tick‑marks, datumcategorieën en opmaak, titelrotatie, aspositionering en weergave‑eenheden.
De maximale waarden op de verticale as van diagrammen ophalen
Maak een Presentation en voeg een gebiedsdiagram toe met standaardgegevens. Roep validateChartLayout aan voordat u berekende aswaarden leest, zodat de diagramindeling up-to-date is.
Lees getActualMaxValue en getActualMinValue voor de aslimieten, en getActualMajorUnit en getActualMinorUnit voor de tick‑intervallen. getActualMajorUnitScale en getActualMinorUnitScale bieden tijdseenheid‑schaal, die relevant zijn voor datumassen. Het voorbeeld slaat deze waarden op in lokale variabelen en slaat het diagram op.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Area, 100, 100, 500, 350);
chart.validateChartLayout();
double maxValue = chart.getAxes().getVerticalAxis().getActualMaxValue();
double minValue = chart.getAxes().getVerticalAxis().getActualMinValue();
double majorUnit = chart.getAxes().getVerticalAxis().getActualMajorUnit();
double minorUnit = chart.getAxes().getVerticalAxis().getActualMinorUnit();
int majorUnitScale = chart.getAxes().getVerticalAxis().getActualMajorUnitScale();
int minorUnitScale = chart.getAxes().getVerticalAxis().getActualMinorUnitScale();
presentation.save("AxisValues_out.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Gegevens tussen assen uitwisselen
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 gegroepeerd zijn; het wisselt niet de horizontale en verticale assen uit. Het voorbeeld gebruikt setRange om de standaardgegevens te koppelen aan Sheet1!A1:D5, inclusief de koprij en categoriekolom, voordat rijen en kolommen worden verwisseld. Het slaat een diagram op met vier reeksen en drie categorieën.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart 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();
}
De verticale as uitschakelen voor lijndiagrammen
Roep setVisible met false aan 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 com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Line, 100, 100, 400, 300);
chart.getAxes().getVerticalAxis().setVisible(false);
presentation.save("HiddenVerticalAxis.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
De horizontale as uitschakelen voor lijndiagrammen
Roep setVisible met false aan 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 com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart 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 categoriasas wijzigen
Gebruik setCategoryAxisType om een datum‑ of tekst‑categoriasas te kiezen. Dit voorbeeld vereist ExistingChart.pptx, met een diagram als het eerste object op de eerste dia en categoriecellen die numerieke Excel‑datumnummers bevatten. Het wijzigt de horizontale as naar een datumas. Het aanroepen van setAutomaticMajorUnit met false, setMajorUnit met 1, en setMajorUnitScale met TimeUnitType.Months plaatst de hoofd‑ticks op een‑maand‑intervallen.
import com.aspose.slides.*;
Presentation presentation = new Presentation("ExistingChart.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = (IChart) 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();
}
Interval voor categoriasas‑labels regelen
Wanneer een diagram veel categorieën heeft, kunt u het aantal zichtbare aslabels verminderen zonder categorieën of gegevenspunten te verwijderen. Roep setAutomaticTickLabelSpacing met false aan, en geef vervolgens het gewenste categorievlag aan setTickLabelSpacing. Voor tekst‑categorieën in hun normale volgorde begint de telling bij de eerste categorie:
| Interval | Labels weergegeven in het voorbeeld |
|---|---|
1 |
Categorie 1, Categorie 2, Categorie 3, … Categorie 24 |
2 |
Categorie 1, Categorie 3, Categorie 5, … Categorie 23 |
3 |
Categorie 1, Categorie 4, Categorie 7, … Categorie 22 |
Een interval van 3 toont elke derde label, waarbij twee labels verborgen blijven tussen de weergegeven labels. Het verwijdert de bijbehorende kolommen niet. Automatische spatiëring kiest een interval op basis van de beschikbare ruimte; het toont niet noodzakelijk elke label.
Tick‑marks hebben afzonderlijke besturingselementen. Roep setAutomaticTickMarksSpacing met false aan en gebruik setTickMarksSpacing om hun interval in te stellen. Bijvoorbeeld, 1 behoudt een tick‑mark op elk categorievlag terwijl labels alleen elke derde categorie verschijnen. Gebruik setMajorTickMark met een zichtbare stijl zodat u het resultaat kunt zien. Het opnieuw aanroepen van een automatische‑spatiërings‑setter met true laat het diagram dat interval opnieuw kiezen.
Het volgende zelfstandige voorbeeld maakt 24 categorieën en één reeks, en slaat vervolgens drie dia’s op in CategoryAxisIntervals.pptx: automatische spatiëring, handmatige label‑spatiëring met onafhankelijke tick‑marks, en herstelde automatische spatiëring. De twee kopieën behouden de oorspronkelijke diagramgegevens. Er is geen invoer‑presentatie vereist. Horizontale labeltekst maakt het verschil in dichtheid gemakkelijk zichtbaar.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 30, 40, 660, 320);
chart.setLegend(false);
chart.getChartData().getCategories().clear();
chart.getChartData().getSeries().clear();
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
workbook.clear(0);
IChartSeries series = chart.getChartData().getSeries().add(ChartType.ClusteredColumn);
for (int i = 0; i < 24; i++) {
IChartDataCell categoryCell = workbook.getCell(0, i + 1, 0, "Category " + (i + 1));
chart.getChartData().getCategories().add(categoryCell);
IChartDataCell valueCell = workbook.getCell(0, i + 1, 1, 10 + i % 6 * 5);
series.getDataPoints().addDataPointForBarSeries(valueCell);
}
IAxis 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);
// Slide 2: toon elk derde label, maar behoud een tikmarkering voor elke categorie.
ISlide manualSlide = presentation.getSlides().addClone(slide);
IChart manualChart = (IChart)manualSlide.getShapes().get_Item(0);
IAxis manualAxis = manualChart.getAxes().getHorizontalAxis();
manualAxis.setAutomaticTickLabelSpacing(false);
manualAxis.setTickLabelSpacing(3);
manualAxis.setAutomaticTickMarksSpacing(false);
manualAxis.setTickMarksSpacing(1);
// Slide 3: laat het diagram beide intervallen opnieuw kiezen.
ISlide restoredSlide = presentation.getSlides().addClone(manualSlide);
IChart restoredChart = (IChart)restoredSlide.getShapes().get_Item(0);
restoredChart.getAxes().getHorizontalAxis().setAutomaticTickLabelSpacing(true);
restoredChart.getAxes().getHorizontalAxis().setAutomaticTickMarksSpacing(true);
presentation.save("CategoryAxisIntervals.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Automatische spatiëring (dia 1): In deze weergave wordt elke tweede categorielabel weergegeven en wordt op twee regels afgebroken. Het automatische resultaat kan variëren afhankelijk van de diagramgrootte, lettertypen en de renderer.

Handmatige spatiëring (dia 2): Elke derde label wordt op één regel weergegeven, terwijl tick‑marks blijven op elk categorievlag. Alle 24 kolommen, inclusief die zonder labels, blijven zichtbaar met dezelfde waarden. Dia 3 herstelt de automatische weergave die hierboven wordt getoond.

Kies de juiste as en interval
Gebruik dit categorie‑aantal‑interval voor een tekst‑categoriasas, zoals de categoriasas van een kolom‑, lijn‑, gebieds‑ of staafdiagram. In een kolomdiagram is dit de horizontale as. In een horizontaal staafdiagram is de categoriasas verticaal, dus pas deze instellingen toe op de as die wordt geretourneerd door getVerticalAxis. Tick‑mark‑spatiëring is ook van toepassing op een seriesas in diagrammen die er een hebben.
Gebruik geen categorielabelspatiëring om de numerieke schaal van een waardenas in te stellen. Op een waardenas specificeert setMajorUnit een verschil in waarden: bijvoorbeeld, een hoofd‑eenheid van 10 produceert ticks op 0, 10, 20, enzovoort wanneer de as bij nul begint. Een categorielabelinterval van 3 telt in plaats daarvan categorieposities, ongeacht hun gegevenswaarden. Spreidings‑ en bubbel‑diagrammen gebruiken waardenassen in plaats van een tekst‑categoriasas. Voor een datumas gebruikt u tijdgebaseerde hoofd‑eenheden en schalen zoals beschreven in Een categoriasas wijzigen.
Datumformaat voor categoriasas‑waarden instellen
Het voorbeeld vervangt de standaarddiagramgegevens door vier jaarlijkse waarden. 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.
import com.aspose.slides.*;
import java.time.LocalDate;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Line, 50, 50, 450, 300);
chart.getChartData().getCategories().clear();
chart.getChartData().getSeries().clear();
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
workbook.clear(0);
LocalDate baseDate = LocalDate.of(1899, 12, 30);
IChartSeries series = chart.getChartData().getSeries().add(ChartType.Line);
for (int i = 0; i < 4; i++) {
LocalDate date = LocalDate.of(2015 + i, 1, 1);
IChartDataCell categoryCell = workbook.getCell(0, i + 1, 0, date.toEpochDay() - baseDate.toEpochDay());
chart.getChartData().getCategories().add(categoryCell);
IChartDataCell valueCell = workbook.getCell(0, i + 1, 1, i + 1);
series.getDataPoints().addDataPointForLineSeries(valueCell);
}
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();
}
Rotatie‑hoek voor een diagramas‑titel instellen
Roep setTitle met true aan op de verticale as, geef een titeltekst op, en gebruik setRotationAngle om de titel te roteren. De hoek wordt gemeten in graden; dit voorbeeld slaat een kolomdiagram op met de titel van de waardenas geroteerd met 90 graden.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart 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 categorias of waardenas
Gebruik setAxisBetweenCategories om te bepalen of de waardenas de categorias kruist tussen categorieën of op categorietick‑marks. Deze instelling is van toepassing op categoriasas. Het voorbeeld zet deze op true op de horizontale categorias van een kolomdiagram en slaat het resultaat op.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart 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 op een diagram‑waardenas instellen
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 getoond als 60. Het voorbeeld maakt een kolomdiagram en past de miljoenen‑weergave‑eenheid toe op de verticale as.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart 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 kruisgedrag te selecteren. Om een numerieke kruiswaarde op te geven, gebruik setCrossAt. Deze instellingen laten u de askruising verplaatsen naar een geschikt referentie‑punt.
Hoe kan ik tick‑labels positioneren ten opzichte van de as?
Roep setTickLabelPosition aan met behulp van TickLabelPositionType: Low, High, NextTo of None. Om de tick‑marks zelf te regelen, gebruik setMajorTickMark of setMinorTickMark; deze staan los van de labelpositionering.