Grafiekassen aanpassen in presentaties op Android
Overzicht
Dit artikel legt uit hoe je de assen van diagrammen kunt aanpassen met Aspose.Slides voor Android via Java. Het behandelt berekende aswaarden, het wisselen van rijen en kolommen in diagrammen, aszichtbaarheid, intervalinstellingen voor categorie‑labels en tik‑markeringen, datumcategorieën en -opmaak, rotatie van de titel, positie van de as en weergave‑eenheden.
De maximale waarden op de verticale as van diagrammen ophalen
Maak een Presentation aan en voeg een gebiedsdiagram toe met standaardgegevens. Roep validateChartLayout aan voordat je berekende aswaarden uitleest, zodat de diagramindeling up-to-date is.
Lees getActualMaxValue en getActualMinValue voor de aslimieten, en getActualMajorUnit en getActualMinorUnit voor de tik‑intervallen. getActualMajorUnitScale en getActualMinorUnitScale leveren tijdseenheidsschaal op, wat relevant is 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 series en categorieën in diagramgegevens te verwisselen. Elke voormalige categorie wordt een serie, en elke voormalige serie wordt een categorie. Dit verandert de groepering van de gegevens; het verwisselt niet de horizontale en verticale assen. Het voorbeeld gebruikt setRange om de standaardgegevens te binden aan Sheet1!A1:D5, inclusief de titelrij en categoriekolom, vóór het wisselen van rijen en kolommen. Het slaat een diagram op met vier series 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 voor lijndiagrammen uitschakelen
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 voor lijndiagrammen uitschakelen
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 categorie‑as wijzigen
Gebruik setCategoryAxisType om een datum‑ of tekst‑categorie‑as 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 verandert de horizontale as in een datum‑as. Door setAutomaticMajorUnit met false, setMajorUnit met 1 en setMajorUnitScale met TimeUnitType.Months te gebruiken, worden de grote tikken geplaatst met een interval van één maand.
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 categorie‑as‑labels regelen
Wanneer een diagram veel categorieën bevat, kun je het aantal zichtbare as‑labels verminderen zonder categorieën of datapunten te verwijderen. Roep setAutomaticTickLabelSpacing met false aan, en geef vervolgens het gewenste categorie‑interval door 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 |
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 elk derde label, waarbij twee labels tussen de weergegeven labels verborgen blijven. Het verwijdert de bijbehorende kolommen niet. Automatische spacing kiest een interval op basis van de beschikbare ruimte; het toont niet noodzakelijk elk label.
Tik‑markeringen hebben aparte instellingen. Roep setAutomaticTickMarksSpacing met false aan en gebruik setTickMarksSpacing om hun interval in te stellen. Bijvoorbeeld, 1 behoudt een tikmarkering bij elk categorie‑interval terwijl labels alleen elke derde categorie verschijnen. Gebruik setMajorTickMark met een zichtbare stijl zodat je het resultaat kunt zien. Het opnieuw inschakelen van een automatische‑spacing‑setter met true laat het diagram het interval opnieuw kiezen.
Het volgende zelfstandige voorbeeld maakt 24 categorieën en één serie, en slaat drie dia’s op in CategoryAxisIntervals.pptx: automatische spacing, handmatige label‑spacing met onafhankelijke tik‑markeringen, en herstelde automatische spacing. De twee kopieën behouden de oorspronkelijke diagramgegevens. Er is geen invoer‑presentatie nodig. De tekst van de horizontale labels maakt het verschil in dichtheid goed 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);
// Dia 2: elke derde label tonen, maar een tikmarkering voor elke categorie behouden.
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);
// Dia 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 spacing (dia 1): In deze weergave wordt elke tweede categoriabeltekst getoond en wordt deze op twee regels afgebroken. Het automatische resultaat kan variëren afhankelijk van diagramgrootte, lettertypen en de renderer.

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

Kies de juiste as en het juiste interval
Gebruik dit categorie‑aantal‑interval voor een tekst‑categorie‑as, zoals de categorie‑as van een kolom‑, lijn‑, gebieds‑ of staafdiagram. In een kolomdiagram is dit de horizontale as. In een horizontaal staafdiagram is de categorie‑as verticaal, dus pas deze instellingen toe op de as die wordt geretourneerd door getVerticalAxis. Spacing voor tik‑markeringen geldt ook voor een serie‑as in diagrammen die er één hebben.
Gebruik spacing voor categorie‑labels 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 produceert tikken op 0, 10, 20, enzovoort wanneer de as bij nul begint. Een categorie‑label‑interval van 3 telt daarentegen positie‑categorieën, ongeacht hun datawaarde. Spreidings‑ en bubbel‑diagrammen gebruiken waardenassen in plaats van een tekst‑categorie‑as. Voor een datum‑as gebruik je tijd‑gebaseerde grote eenheden en schalen zoals beschreven in Een categorie‑as wijzigen.
Datumopmaak voor categorie‑as‑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. Beide kalenders gebruiken UTC en worden gewist voordat de datums worden ingesteld, zodat zomertijd en de huidige tijd van de dag de berekening niet beïnvloeden. Gebruik setCategoryAxisType met CategoryAxisType.Date, roep setNumberFormatLinkedToSource met false aan, en geef yyyy door aan setNumberFormat zodat de categorie‑labels viercijferige jaren weergeven, onafhankelijk van de celopmaak.
import com.aspose.slides.*;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;
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);
TimeZone timeZone = TimeZone.getTimeZone("UTC");
Calendar baseDate = new GregorianCalendar(timeZone);
baseDate.clear();
baseDate.set(1899, Calendar.DECEMBER, 30);
IChartSeries series = chart.getChartData().getSeries().add(ChartType.Line);
for (int i = 0; i < 4; i++) {
Calendar date = new GregorianCalendar(timeZone);
date.clear();
date.set(2015 + i, Calendar.JANUARY, 1);
double serialDate = (date.getTimeInMillis() - baseDate.getTimeInMillis()) / 86400000.0;
IChartDataCell categoryCell = workbook.getCell(0, i + 1, 0, serialDate);
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();
}
Draaihoek voor een diagram‑as‑titel instellen
Roep setTitle met true aan op de verticale as, geef de titeltekst op, en gebruik setRotationAngle om de titel te draaien. De hoek wordt gemeten in graden; dit voorbeeld slaat een kolomdiagram op met de titel van de waardenas gedraaid 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();
}
De aspositie op een categorie‑ of waardenas instellen
Gebruik setAxisBetweenCategories om te bepalen of de waardenas de categorie‑as kruist tussen categorieën of op de categorie‑tikmarkeringen. Deze instelling geldt voor categorie‑assen. Het voorbeeld stelt dit in op true voor de horizontale categorie‑as 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 weergegeven 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 kruis‑gedrag te selecteren. Om een numerieke kruiswaarde op te geven, gebruik je setCrossAt. Deze instellingen laten je de as‑kruising naar een geschikte basislijn verplaatsen.
Hoe kan ik tik‑labels positioneren ten opzichte van de as?
Roep setTickLabelPosition aan met een van de waarden uit TickLabelPositionType: Low, High, NextTo of None. Om de tik‑markeringen zelf te regelen, gebruik je setMajorTickMark of setMinorTickMark; deze staan los van de label‑positionering.