Personnaliser les axes de graphique dans les présentations à l'aide de JavaScript

Aperçu

Cet article explique comment personnaliser les axes de graphique avec Aspose.Slides pour Node.js via Java. Il couvre les valeurs d’axe calculées, l’échange des lignes et colonnes du graphique, la visibilité des axes, les intervalles des étiquettes de catégorie et des marques de graduation, les catégories de dates et leur formatage, la rotation du titre, le positionnement des axes et les unités d’affichage.

Obtenir les valeurs maximales sur l’axe vertical des graphiques

Créez une Présentation et ajoutez un graphique en aires avec les 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 des graduations. getActualMajorUnitScale et getActualMinorUnitScale fournissent des é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.

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

var presentation = new aspose.slides.Presentation();
try {
    var slide = presentation.getSlides().get_Item(0);

    var chart = slide.getShapes().addChart(aspose.slides.ChartType.Area, 100, 100, 500, 350);
    chart.validateChartLayout();

    var maxValue = chart.getAxes().getVerticalAxis().getActualMaxValue();
    var minValue = chart.getAxes().getVerticalAxis().getActualMinValue();

    var majorUnit = chart.getAxes().getVerticalAxis().getActualMajorUnit();
    var minorUnit = chart.getAxes().getVerticalAxis().getActualMinorUnit();

    var majorUnitScale = chart.getAxes().getVerticalAxis().getActualMajorUnitScale();
    var minorUnitScale = chart.getAxes().getVerticalAxis().getActualMinorUnitScale();

    presentation.save("AxisValues_out.pptx", aspose.slides.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 regroupé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, y compris la ligne d’en-tête et la colonne de catégorie, avant d’échanger les lignes et les colonnes. Il enregistre un graphique avec quatre séries et trois catégories.

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

var presentation = new aspose.slides.Presentation();
try {
    var slide = presentation.getSlides().get_Item(0);

    var chart = slide.getShapes().addChart(aspose.slides.ChartType.ClusteredColumn, 100, 100, 400, 300);
    chart.getChartData().setRange("Sheet1!A1:D5");
    chart.getChartData().switchRowColumn();

    presentation.save("SwitchChartRowColumns_out.pptx", aspose.slides.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 les données par défaut et l’enregistre avec l’axe vertical masqué.

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

var presentation = new aspose.slides.Presentation();
try {
    var slide = presentation.getSlides().get_Item(0);

    var chart = slide.getShapes().addChart(aspose.slides.ChartType.Line, 100, 100, 400, 300);
    chart.getAxes().getVerticalAxis().setVisible(false);

    presentation.save("HiddenVerticalAxis.pptx", aspose.slides.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 les données par défaut et l’enregistre avec l’axe horizontal masqué.

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

var presentation = new aspose.slides.Presentation();
try {
    var slide = presentation.getSlides().get_Item(0);

    var chart = slide.getShapes().addChart(aspose.slides.ChartType.Line, 100, 100, 400, 300);
    chart.getAxes().getHorizontalAxis().setVisible(false);

    presentation.save("HiddenHorizontalAxis.pptx", aspose.slides.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, avec un graphique comme première forme de la première diapositive et des cellules de catégorie contenant des valeurs de date numériques Excel. Il convertit l’axe horizontal en axe de date. En appelant setAutomaticMajorUnit avec false, setMajorUnit avec 1, et setMajorUnitScale avec TimeUnitType.Months, les graduations principales sont placées à des intervalles d’un mois.

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

var presentation = new aspose.slides.Presentation("ExistingChart.pptx");
try {
    var slide = presentation.getSlides().get_Item(0);

    var chart = slide.getShapes().get_Item(0);
    chart.getAxes().getHorizontalAxis().setCategoryAxisType(aspose.slides.CategoryAxisType.Date);
    chart.getAxes().getHorizontalAxis().setAutomaticMajorUnit(false);
    chart.getAxes().getHorizontalAxis().setMajorUnit(1);
    chart.getAxes().getHorizontalAxis().setMajorUnitScale(aspose.slides.TimeUnitType.Months);

    presentation.save("ChangeChartCategoryAxis_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Contrôler les intervalles des étiquettes d’axe de catégorie

Lorsqu’un graphique comporte 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 transmettez l’intervalle de catégorie souhaité à setTickLabelSpacing. Pour les catégories de 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 qu’à chaque troisième catégorie. Utilisez setMajorTickMark avec un style visible pour voir le résultat. Appeler de nouveau l’un des réglages d’espacement automatique avec 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 des marques de graduation indépendantes, et rétablissement de l’espacement automatique. Les deux copies conservent les données du graphique d’origine. Aucun fichier de présentation d’entrée n’est nécessaire. Le texte des étiquettes horizontales rend la différence de densité facile à visualiser.

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

var presentation = new aspose.slides.Presentation();
try {
    var slide = presentation.getSlides().get_Item(0);

    var chart = slide.getShapes().addChart(aspose.slides.ChartType.ClusteredColumn, 30, 40, 660, 320);

    chart.setLegend(false);
    chart.getChartData().getCategories().clear();
    chart.getChartData().getSeries().clear();

    var workbook = chart.getChartData().getChartDataWorkbook();
    workbook.clear(0);

    var series = chart.getChartData().getSeries().add(aspose.slides.ChartType.ClusteredColumn);
    for (var i = 0; i < 24; i++) {
        var categoryCell = workbook.getCell(0, i + 1, 0, "Category " + (i + 1));
        chart.getChartData().getCategories().add(categoryCell);
        var valueCell = workbook.getCell(0, i + 1, 1, 10 + i % 6 * 5);
        series.getDataPoints().addDataPointForBarSeries(valueCell);
    }

    var axis = chart.getAxes().getHorizontalAxis();
    axis.setCategoryAxisType(aspose.slides.CategoryAxisType.Text);
    axis.getTextFormat().getTextBlockFormat().setRotationAngle(0);
    axis.getTextFormat().getPortionFormat().setFontHeight(12);
    axis.setMajorTickMark(aspose.slides.TickMarkType.Outside);
    axis.setAutomaticTickLabelSpacing(true);
    axis.setAutomaticTickMarksSpacing(true);

    // Diapositive 2 : afficher chaque troisième étiquette, mais conserver une marque de graduation pour chaque catégorie.
    var manualSlide = presentation.getSlides().addClone(slide);
    var manualChart = manualSlide.getShapes().get_Item(0);
    var 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.
    var restoredSlide = presentation.getSlides().addClone(manualSlide);
    var restoredChart = restoredSlide.getShapes().get_Item(0);
    restoredChart.getAxes().getHorizontalAxis().setAutomaticTickLabelSpacing(true);
    restoredChart.getAxes().getHorizontalAxis().setAutomaticTickMarksSpacing(true);

    presentation.save("CategoryAxisIntervals.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Espacement automatique (diapositive 1): Dans ce rendu, chaque deuxième étiquette de catégorie est affichée et se répartit sur deux lignes. Le résultat automatique peut varier en fonction de la taille du graphique, des polices et du moteur de rendu.

Espacement automatique des étiquettes de catégorie avec les 24 colonnes visibles

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.

Intervalle manuel des étiquettes de catégorie de trois avec les 24 colonnes visibles

Choisir l’axe et l’intervalle corrects

Utilisez cet intervalle de comptage de catégories pour un axe de catégorie texte, tel que l’axe de catégorie d’un histogramme, d’un graphique en courbes, d’un graphique en aires ou d’un graphique à barres. Dans un graphique en colonnes, il s’agit de l’axe horizontal. Dans un graphique à barres horizontal, l’axe de catégorie est vertical, appliquez donc ces paramètres à l’axe renvoyé par getVerticalAxis. L’espacement des marques de graduation s’applique également à un axe de séries dans les graphiques qui en possèdent un.

Ne pas utiliser l’espacement des étiquettes de catégorie pour définir l’échelle numérique d’un axe de valeurs. Sur un axe de valeurs, setMajorUnit spécifie une différence de valeurs : par exemple, une unité principale de 10 génère des graduations à 0, 10, 20, etc. lorsqu’un axe débute à zéro. Un intervalle d’étiquette de catégorie de 3 compte quant à lui les positions de catégorie, indépendamment de leurs valeurs de données. Les graphiques de dispersion et à bulles utilisent des axes de valeurs 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 décrit dans Modifier un axe de catégorie.

Définir le format de date pour les valeurs d’axe de catégorie

L’exemple remplace les données de graphique par défaut par quatre valeurs annuelles. Les dates sont stockées sous forme de nombres de série OLE Automation dans la première feuille de calcul (index 0), calculés comme le nombre de jours écoulés depuis le 30 décembre 1899 pour ces dates. Le calcul JavaScript utilise des horodatages UTC et divise la différence par 86 400 000 millisecondes par jour. 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.

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

var presentation = new aspose.slides.Presentation();
try {
    var slide = presentation.getSlides().get_Item(0);

    var chart = slide.getShapes().addChart(aspose.slides.ChartType.Line, 50, 50, 450, 300);

    chart.getChartData().getCategories().clear();
    chart.getChartData().getSeries().clear();

    var workbook = chart.getChartData().getChartDataWorkbook();
    workbook.clear(0);

    var baseDate = Date.UTC(1899, 11, 30);

    var series = chart.getChartData().getSeries().add(aspose.slides.ChartType.Line);
    for (var i = 0; i < 4; i++) {
        var date = Date.UTC(2015 + i, 0, 1);
        var categoryCell = workbook.getCell(0, i + 1, 0, (date - baseDate) / 86400000);
        chart.getChartData().getCategories().add(categoryCell);

        var valueCell = workbook.getCell(0, i + 1, 1, i + 1);
        series.getDataPoints().addDataPointForLineSeries(valueCell);
    }

    chart.getAxes().getHorizontalAxis().setCategoryAxisType(aspose.slides.CategoryAxisType.Date);
    chart.getAxes().getHorizontalAxis().setNumberFormatLinkedToSource(false);
    chart.getAxes().getHorizontalAxis().setNumberFormat("yyyy");

    presentation.save("DateAxisFormat.pptx", aspose.slides.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 en colonnes avec le titre de l’axe de valeur pivoté de 90 degrés.

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

var presentation = new aspose.slides.Presentation();
try {
    var slide = presentation.getSlides().get_Item(0);

    var chart = slide.getShapes().addChart(aspose.slides.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", aspose.slides.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 valeurs coupe l’axe de catégorie entre les catégories ou aux marques de graduation de catégorie. Ce paramètre s’applique aux axes de catégorie. L’exemple le définit à true sur l’axe de catégorie horizontal d’un graphique en colonnes et enregistre le résultat.

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

var presentation = new aspose.slides.Presentation();
try {
    var slide = presentation.getSlides().get_Item(0);

    var chart = slide.getShapes().addChart(aspose.slides.ChartType.ClusteredColumn, 50, 50, 450, 300);
    chart.getAxes().getHorizontalAxis().setAxisBetweenCategories(true);

    presentation.save("AxisBetweenCategories.pptx", aspose.slides.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-jacentes. Avec DisplayUnitType défini sur Millions, une valeur de 60 000 000 est affichée comme 60. L’exemple crée un graphique en colonnes et applique l’unité d’affichage millions à son axe vertical.

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

var presentation = new aspose.slides.Presentation();
try {
    var slide = presentation.getSlides().get_Item(0);

    var chart = slide.getShapes().addChart(aspose.slides.ChartType.ClusteredColumn, 50, 50, 450, 300);
    chart.getAxes().getVerticalAxis().setDisplayUnit(aspose.slides.DisplayUnitType.Millions);

    presentation.save("Result.pptx", aspose.slides.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 de 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 vers 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 ; elles sont distinctes du positionnement des étiquettes.