Grafiekassen aanpassen in presentaties met PHP
Overzicht
Dit artikel legt uit hoe u diagramassen kunt aanpassen met Aspose.Slides voor PHP via Java. Het behandelt berekende aswaarden, het verwisselen van diagramrijen en -kolommen, aszichtbaarheid, intervallen voor categorielabels en tick‑marks, datumcategorieën en opmaak, rotatie van titels, aspositionering en weergave‑eenheden.
De maximale waarden op de verticale as van diagrammen ophalen
Maak een Presentatie aan en voeg een gebiedsdiagram met standaardgegevens toe. 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 geven tijdseenheid‑schalen terug, die relevant zijn voor datumassen. Het voorbeeld slaat deze waarden op in lokale variabelen en slaat het diagram op.
use aspose\slides\ChartType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::Area, 100, 100, 500, 350);
$chart->validateChartLayout();
$maxValue = $chart->getAxes()->getVerticalAxis()->getActualMaxValue();
$minValue = $chart->getAxes()->getVerticalAxis()->getActualMinValue();
$majorUnit = $chart->getAxes()->getVerticalAxis()->getActualMajorUnit();
$minorUnit = $chart->getAxes()->getVerticalAxis()->getActualMinorUnit();
$majorUnitScale = $chart->getAxes()->getVerticalAxis()->getActualMajorUnitScale();
$minorUnitScale = $chart->getAxes()->getVerticalAxis()->getActualMinorUnitScale();
$presentation->save("AxisValues_out.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Gegevens tussen assen verwisselen
Gebruik switchRowColumn om de rollen van series en categorieën in diagramgegevens om te wisselen. Elke voormalige categorie wordt een serie, en elke voormalige serie wordt een categorie. Dit verandert hoe de gegevens worden gegroepeerd; het verwisselt niet de horizontale en verticale as. 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 series en drie categorieën.
use aspose\slides\ChartType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new 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.
use aspose\slides\ChartType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new 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.
use aspose\slides\ChartType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new 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 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 datumas. Het aanroepen van setAutomaticMajorUnit met false, setMajorUnit met 1, en setMajorUnitScale met TimeUnitType::Months plaatst hoofd‑ticks op intervallen van één maand.
use aspose\slides\CategoryAxisType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\TimeUnitType;
$presentation = new 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 de gewenste categorie‑interval door aan setTickLabelSpacing. Voor tekst‑categorieë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 verborgen blijven tussen de getoonde labels. Het verwijdert niet de corresponderende kolommen. Automatische spatiëring kiest een interval op basis van de beschikbare ruimte; het toont niet noodzakelijk elk label.
Tick‑marks hebben afzonderlijke besturingselementen. Roep setAutomaticTickMarksSpacing aan met false en gebruik setTickMarksSpacing om hun interval in te stellen. Bijvoorbeeld, 1 houdt een tick‑mark bij elk categorie‑interval terwijl labels alleen elke derde categorie verschijnen. Gebruik setMajorTickMark met een zichtbaar stijl zodat u het resultaat kunt zien. Het aanroepen van een van de automatische‑spacing setters met true laat het diagram dat interval opnieuw kiezen.
Het volgende zelfstandige voorbeeld maakt 24 categorieën en één serie, 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 duidelijk zichtbaar.
use aspose\slides\CategoryAxisType;
use aspose\slides\ChartType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\TickMarkType;
$presentation = new 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 = 0; $i < 24; $i++) {
$categoryCell = $workbook->getCell(0, $i + 1, 0, "Category " . ($i + 1));
$chart->getChartData()->getCategories()->add($categoryCell);
$valueCell = $workbook->getCell(0, $i + 1, 1, 10 + $i % 6 * 5);
$series->getDataPoints()->addDataPointForBarSeries($valueCell);
}
$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 tick‑mark voor elke categorie.
$manualSlide = $presentation->getSlides()->addClone($slide);
$manualChart = $manualSlide->getShapes()->get_Item(0);
$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.
$restoredSlide = $presentation->getSlides()->addClone($manualSlide);
$restoredChart = $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 elk tweede categorielabel weergegeven en wordt op twee regels afgebroken. Het automatische resultaat kan variëren met diagramgrootte, lettertypen en de renderer.

Handmatige spatiëring (dia 2): Elk derde label wordt op één regel weergegeven, terwijl tick‑marks 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.

Kies de juiste as en interval
Gebruik dit categorie‑aantal‑interval voor een tekst‑categorische as, zoals de categorische as van een staaf-, lijn-, oppervlakte‑ of balkdiagram. In een kolomdiagram is dit de horizontale as. In een horizontaal balkdiagram staat de categorische as verticaal, dus pas deze instellingen toe op de as die wordt geretourneerd door getVerticalAxis. De tick‑mark‑spatiëring geldt ook voor een serie‑as in diagrammen die er één bevatten.
Gebruik de labelspatiëring van een categorie niet om de numerieke schaal van een waardenas in te stellen. Op een waardenas geeft setMajorUnit een verschil in waarden aan: bijvoorbeeld, een hoofd‑unit van 10 produceert ticks op 0, 10, 20, enzovoort wanneer de as op nul begint. Een categorie‑label‑interval van 3 telt in plaats daarvan categorie‑posities, ongeacht hun gegevenswaarden. Spreidings‑ en bubbel‑diagrammen gebruiken waardenas in plaats van een tekst‑categorische as. Voor een datumas gebruikt u tijdgebaseerde hoofd‑units en schalen zoals beschreven in Een categorische as wijzigen.
Datumopmaak voor categorische as‑waarden instellen
Het voorbeeld vervangt de standaard diagramgegevens 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 jaartallen tonen, onafhankelijk van de celopmaak.
use aspose\slides\CategoryAxisType;
use aspose\slides\ChartType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new 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);
$baseDate = gmmktime(0, 0, 0, 12, 30, 1899);
$series = $chart->getChartData()->getSeries()->add(ChartType::Line);
for ($i = 0; $i < 4; $i++) {
$date = gmmktime(0, 0, 0, 1, 1, 2015 + $i);
$serialDate = ($date - $baseDate) / 86400;
$categoryCell = $workbook->getCell(0, $i + 1, 0, $serialDate);
$chart->getChartData()->getCategories()->add($categoryCell);
$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();
}
Rotatiehoek voor een diagramas‑titel instellen
Roep setTitle aan met true op de verticale as, geef 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.
use aspose\slides\ChartType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new 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 op een categorische of waardenas instellen
Gebruik setAxisBetweenCategories om te bepalen of de waardenas de categorische as kruist tussen categorieën of op de categorie‑tick‑marks. Deze instelling geldt voor categorische assen. Het voorbeeld stelt deze in op true op de horizontale categorische as van een kolomdiagram en slaat het resultaat op.
use aspose\slides\ChartType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new 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 op een diagram‑waardenas instellen
Gebruik setDisplayUnit om de label‑schaal op een waardenas aan te passen 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.
use aspose\slides\ChartType;
use aspose\slides\DisplayUnitType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new 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 kruisgedrag te selecteren. Om een numerieke kruisingwaarde op te geven, gebruik setCrossAt. Deze instellingen laten u de as‑kruising naar een geschikt nulpunt verplaatsen.
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 label‑positionering.