Personnaliser les axes de graphique dans les présentations avec PHP
Aperçu
Cet article explique comment personnaliser les axes des graphiques avec Aspose.Slides pour PHP via Java. Il couvre les valeurs d’axes calculées, l’échange des lignes et colonnes du graphique, la visibilité des axes, les intervalles d’étiquettes de catégorie et de marques de graduation, les catégories de date et leur mise en forme, la rotation des titres, le positionnement des axes et les unités d’affichage.
Obtenir les valeurs maximales sur l’axe vertical des graphiques
Créez une Presentation et ajoutez un graphique en aires avec des données par défaut. Appelez validateChartLayout avant de lire les valeurs d’axe calculées afin que la disposition du graphique soit à jour.
Lisez getActualMaxValue et getActualMinValue pour les limites de l’axe, et getActualMajorUnit et getActualMinorUnit pour les intervalles de graduation. getActualMajorUnitScale et getActualMinorUnitScale fournissent les échelles d’unités de temps, pertinentes pour les axes de date. L’exemple stocke ces valeurs dans des variables locales et enregistre le graphique.
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();
}
Échanger les données entre les axes
Utilisez switchRowColumn pour échanger les rôles des séries et des catégories dans les données du graphique. Chaque ancienne catégorie devient une série, et chaque ancienne série devient une catégorie. Cela modifie la façon dont les données sont groupées ; cela n’échange pas les axes horizontal et vertical. L’exemple utilise setRange pour lier les données par défaut à Sheet1!A1:D5, incluant la ligne d’en‑tête et la colonne de catégorie, avant d’échanger les lignes et colonnes. Il enregistre un graphique avec quatre séries et trois catégories.
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();
}
Désactiver l’axe vertical pour les graphiques en courbes
Appelez setVisible avec false sur l’axe vertical pour le masquer. L’exemple crée un graphique en courbes avec des données par défaut et l’enregistre avec l’axe vertical masqué.
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();
}
Désactiver l’axe horizontal pour les graphiques en courbes
Appelez setVisible avec false sur l’axe horizontal pour le masquer. L’exemple crée un graphique en courbes avec des données par défaut et l’enregistre avec l’axe horizontal masqué.
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();
}
Modifier un axe de catégorie
Utilisez setCategoryAxisType pour choisir un axe de catégorie de type date ou texte. Cet exemple nécessite ExistingChart.pptx, contenant un graphique comme première forme sur la première diapositive et des cellules de catégorie contenant des valeurs de date Excel numériques. Il convertit l’axe horizontal en axe de date. En appelant setAutomaticMajorUnit avec false, setMajorUnit avec 1, et setMajorUnitScale avec TimeUnitType::Months, les graduations majeures sont placées à des intervalles d’un mois.
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();
}
Contrôler les intervalles d’étiquettes d’axe de catégorie
Lorsque un graphique possède de nombreuses catégories, réduisez le nombre d’étiquettes d’axe visibles sans supprimer les catégories ou les points de données. Appelez setAutomaticTickLabelSpacing avec false, puis passez l’intervalle de catégorie souhaité à setTickLabelSpacing. Pour les catégories texte dans leur ordre normal, le comptage commence à la première catégorie :
| Intervalle | Étiquettes affichées dans l’exemple |
|---|---|
1 |
Catégorie 1, Catégorie 2, Catégorie 3, … Catégorie 24 |
2 |
Catégorie 1, Catégorie 3, Catégorie 5, … Catégorie 23 |
3 |
Catégorie 1, Catégorie 4, Catégorie 7, … Catégorie 22 |
Un intervalle de 3 affiche chaque troisième étiquette, laissant deux étiquettes cachées entre les étiquettes affichées. Il ne supprime pas les colonnes correspondantes. L’espacement automatique choisit un intervalle en fonction de l’espace disponible ; il n’affiche pas nécessairement chaque étiquette.
Les marques de graduation ont des contrôles séparés. Appelez setAutomaticTickMarksSpacing avec false et utilisez setTickMarksSpacing pour définir leur intervalle. Par exemple, 1 maintient une marque de graduation à chaque intervalle de catégorie tandis que les étiquettes n’apparaissent que toutes les trois catégories. Utilisez setMajorTickMark avec un style visible afin de voir le résultat. Repasser le réglage d’espacement automatique à true permet au graphique de choisir à nouveau cet intervalle.
L’exemple autonome suivant crée 24 catégories et une série, puis enregistre trois diapositives dans CategoryAxisIntervals.pptx : espacement automatique, espacement manuel des étiquettes avec marques de graduation indépendantes, et rétablissement de l’espacement automatique. Les deux copies conservent les données du graphique d’origine. aucune présentation d’entrée n’est requise. Le texte des étiquettes horizontales rend la différence de densité facile à voir.
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);
// Diapositive 2 : afficher chaque troisième étiquette, mais garder une marque de graduation pour chaque catégorie.
$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);
// Diapositive 3 : laisser le graphique choisir à nouveau les deux intervalles.
$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();
}
Espacement automatique (diapositive 1) : dans ce rendu, chaque deuxième étiquette de catégorie est affichée et passe à la ligne suivante. Le résultat automatique peut varier selon la taille du graphique, les polices et le moteur de rendu.

Espacement manuel (diapositive 2) : chaque troisième étiquette est affichée sur une ligne, tandis que les marques de graduation restent à chaque intervalle de catégorie. Toutes les 24 colonnes, y compris celles sans étiquette, restent visibles avec les mêmes valeurs. La diapositive 3 rétablit l’apparence automatique présentée ci‑dessus.

Choisir l’axe et l’intervalle corrects
Utilisez cet intervalle basé sur le nombre de catégories pour un axe de catégorie texte, tel que l’axe de catégorie d’un graphique à colonnes, lignes, aires ou barres. Dans un graphique à colonnes, c’est l’axe horizontal. Dans un graphique à barres horizontal, l’axe de catégorie est vertical, donc appliquez ces paramètres à l’axe renvoyé par getVerticalAxis. L’espacement des marques de graduation s’applique également à un axe de série dans les graphiques qui en possèdent un.
N’utilisez pas l’espacement des étiquettes de catégorie pour définir l’échelle numérique d’un axe de valeur. Sur un axe de valeur, setMajorUnit indique une différence de valeurs : par exemple, une unité majeure de 10 produit des graduations à 0, 10, 20, etc. lorsqu’un axe commence à zéro. Un intervalle d’étiquette de catégorie de 3 compte simplement les positions de catégorie, indépendamment de leurs valeurs. Les graphiques en nuage de points et à bulles utilisent des axes de valeur plutôt qu’un axe de catégorie texte. Pour un axe de date, utilisez des unités majeures et des échelles basées sur le temps comme indiqué dans Modifier un axe de catégorie.
Définir le format de date pour les valeurs de l’axe de catégorie
L’exemple remplace les données du graphique par défaut par quatre valeurs annuelles. Les dates sont stockées comme numéros de série OLE Automation dans la première feuille de calcul (index 0), calculées comme le nombre de jours écoulés depuis le 30 décembre 1899. Utilisez setCategoryAxisType avec CategoryAxisType::Date, appelez setNumberFormatLinkedToSource avec false, et transmettez yyyy à setNumberFormat afin que les étiquettes de catégorie affichent les années sur quatre chiffres indépendamment du format de la cellule.
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();
}
Définir un angle de rotation pour le titre d’un axe de graphique
Appelez setTitle avec true sur l’axe vertical, fournissez le texte du titre, et utilisez setRotationAngle pour faire pivoter le titre. L’angle est mesuré en degrés ; cet exemple enregistre un graphique à colonnes avec le titre de l’axe de valeur pivoté de 90 degrés.
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();
}
Définir la position de l’axe sur un axe de catégorie ou de valeur
Utilisez setAxisBetweenCategories pour contrôler si l’axe de valeur croise l’axe de catégorie entre les catégories ou sur les marques de catégorie. Ce paramètre s’applique aux axes de catégorie. L’exemple le définit sur true pour l’axe de catégorie horizontal d’un graphique à colonnes et enregistre le résultat.
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();
}
Définir l’unité d’affichage sur un axe de valeur de graphique
Utilisez setDisplayUnit pour mettre à l’échelle les étiquettes d’un axe de valeur sans modifier les données sous‑jacent. Avec DisplayUnitType réglé sur Millions, une valeur de 60 000 000 est affichée comme 60. L’exemple crée un graphique à colonnes et applique l’unité d’affichage millions à son axe vertical.
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
Comment définir la valeur à laquelle un axe croise l’autre (croisement d’axe) ?
Utilisez setCrossType pour sélectionner le comportement du croisement. Pour spécifier une valeur numérique de croisement, utilisez setCrossAt. Ces paramètres vous permettent de déplacer le point de croisement de l’axe à une base appropriée.
Comment positionner les étiquettes de graduation par rapport à l’axe ?
Appelez setTickLabelPosition en utilisant TickLabelPositionType : Low, High, NextTo ou None. Pour contrôler les marques de graduation elles‑mêmes, utilisez setMajorTickMark ou setMinorTickMark ; ils sont séparés du positionnement des étiquettes.