Personalizza gli assi dei grafici nelle presentazioni in .NET

Panoramica

Questo articolo spiega come personalizzare gli assi dei grafici con Aspose.Slides per .NET. Copre i valori dell’asse calcolati, lo scambio di righe e colonne del grafico, la visibilità dell’asse, gli intervalli delle etichette di categoria e dei segni di graduazione, le categorie di data e la formattazione, la rotazione del titolo, il posizionamento dell’asse e le unità di visualizzazione.

Ottieni i valori massimi sull’asse verticale nei grafici

Crea una Presentation e aggiungi un grafico a area con dati predefiniti. Chiama ValidateChartLayout prima di leggere i valori dell’asse calcolati in modo che il layout del grafico sia aggiornato.

Leggi ActualMaxValue e ActualMinValue per i limiti dell’asse, e ActualMajorUnit e ActualMinorUnit per gli intervalli dei segni di graduazione. ActualMajorUnitScale e ActualMinorUnitScale forniscono scale di unità temporali, rilevanti per gli assi di data. L’esempio memorizza questi valori in variabili locali e salva il grafico.

using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var chart = slide.Shapes.AddChart(ChartType.Area, 100, 100, 500, 350);
chart.ValidateChartLayout();

var maxValue = chart.Axes.VerticalAxis.ActualMaxValue;
var minValue = chart.Axes.VerticalAxis.ActualMinValue;

var majorUnit = chart.Axes.VerticalAxis.ActualMajorUnit;
var minorUnit = chart.Axes.VerticalAxis.ActualMinorUnit;

var majorUnitScale = chart.Axes.VerticalAxis.ActualMajorUnitScale;
var minorUnitScale = chart.Axes.VerticalAxis.ActualMinorUnitScale;

presentation.Save("AxisValues_out.pptx", SaveFormat.Pptx);

Scambia i dati tra gli assi

Usa SwitchRowColumn per scambiare i ruoli di serie e categorie nei dati del grafico. Ogni ex‑categoria diventa una serie e ogni ex‑serie diventa una categoria. Questo cambia il modo in cui i dati sono raggruppati; non scambia gli assi orizzontale e verticale. L’esempio utilizza SetRange per collegare i dati predefiniti a Sheet1!A1:D5, includendo la riga di intestazione e la colonna delle categorie, prima di scambiare righe e colonne. Salva un grafico con quattro serie e tre categorie.

using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var chart = slide.Shapes.AddChart(ChartType.ClusteredColumn, 100, 100, 400, 300);

chart.ChartData.SetRange("Sheet1!A1:D5");
chart.ChartData.SwitchRowColumn();

presentation.Save("SwitchChartRowColumns_out.pptx", SaveFormat.Pptx);

Disabilita l’asse verticale per i grafici a linee

Imposta IsVisible su false sull’asse verticale per nasconderlo. L’esempio crea un grafico a linee con dati predefiniti e lo salva con l’asse verticale nascosto.

using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var chart = slide.Shapes.AddChart(ChartType.Line, 100, 100, 400, 300);
chart.Axes.VerticalAxis.IsVisible = false;

presentation.Save("HiddenVerticalAxis.pptx", SaveFormat.Pptx);

Disabilita l’asse orizzontale per i grafici a linee

Imposta IsVisible su false sull’asse orizzontale per nasconderlo. L’esempio crea un grafico a linee con dati predefiniti e lo salva con l’asse orizzontale nascosto.

using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var chart = slide.Shapes.AddChart(ChartType.Line, 100, 100, 400, 300);
chart.Axes.HorizontalAxis.IsVisible = false;

presentation.Save("HiddenHorizontalAxis.pptx", SaveFormat.Pptx);

Modifica un asse di categoria

Imposta CategoryAxisType per scegliere un asse di categoria data o di testo. Questo esempio richiede ExistingChart.pptx, con un grafico come prima forma nella prima diapositiva e celle di categoria contenenti valori di data Excel numerici. Cambia l’asse orizzontale in un asse di data. Impostando IsAutomaticMajorUnit su false, MajorUnit su 1 e MajorUnitScale su mesi, posiziona i segni maggiori a intervalli di un mese.

using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;

using var presentation = new Presentation("ExistingChart.pptx");
var slide = presentation.Slides[0];

var chart = (IChart) slide.Shapes[0];
chart.Axes.HorizontalAxis.CategoryAxisType = CategoryAxisType.Date;
chart.Axes.HorizontalAxis.IsAutomaticMajorUnit = false;
chart.Axes.HorizontalAxis.MajorUnit = 1;
chart.Axes.HorizontalAxis.MajorUnitScale = TimeUnitType.Months;

presentation.Save("ChangeChartCategoryAxis_out.pptx", SaveFormat.Pptx);

Controlla gli intervalli delle etichette dell’asse di categoria

Quando un grafico ha molte categorie, riduci il numero di etichette dell’asse visibili senza rimuovere categorie o punti dati. Imposta IsAutomaticTickLabelSpacing su false, quindi imposta TickLabelSpacing sull’intervallo di categoria desiderato. Per le categorie di testo nel loro ordine normale, il conteggio parte dalla prima categoria:

Intervallo Etichette visualizzate nell’esempio
1 Categoria 1, Categoria 2, Categoria 3, … Categoria 24
2 Categoria 1, Categoria 3, Categoria 5, … Categoria 23
3 Categoria 1, Categoria 4, Categoria 7, … Categoria 22

Un intervallo di 3 visualizza ogni terza etichetta, lasciando nascoste due etichette tra quelle visualizzate. Non rimuove le colonne corrispondenti. La spaziatura automatica sceglie un intervallo in base allo spazio disponibile; non mostra necessariamente tutte le etichette.

I segni di graduazione hanno controlli separati. Imposta IsAutomaticTickMarksSpacing su false e usa TickMarksSpacing per impostare il loro intervallo. Ad esempio, 1 mantiene un segno a ogni intervallo di categoria mentre le etichette appaiono solo ogni terza categoria. Imposta MajorTickMark su uno stile visibile così da poter vedere il risultato. Reimpostare una delle proprietà di spaziatura automatica a true fa sì che il grafico scelga nuovamente quell’intervallo.

L’esempio autonomo seguente crea 24 categorie e una serie, quindi salva tre diapositive in CategoryAxisIntervals.pptx: spaziatura automatica, spaziatura manuale delle etichette con segni di graduazione indipendenti e spaziatura automatica ripristinata. Le due copie mantengono i dati originali del grafico. Non è necessaria una presentazione di input. Il testo dell’etichetta orizzontale rende evidente la differenza di densità.

using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var chart = slide.Shapes.AddChart(ChartType.ClusteredColumn, 30, 40, 660, 320);

chart.HasLegend = false;
chart.ChartData.Categories.Clear();
chart.ChartData.Series.Clear();

var workbook = chart.ChartData.ChartDataWorkbook;
workbook.Clear(0);

var series = chart.ChartData.Series.Add(ChartType.ClusteredColumn);
for (var i = 0; i < 24; i++)
{
    var categoryCell = workbook.GetCell(0, i + 1, 0, $"Category {i + 1}");
    chart.ChartData.Categories.Add(categoryCell);
    var valueCell = workbook.GetCell(0, i + 1, 1, 10 + i % 6 * 5);
    series.DataPoints.AddDataPointForBarSeries(valueCell);
}

var axis = chart.Axes.HorizontalAxis;
axis.CategoryAxisType = CategoryAxisType.Text;
axis.TextFormat.TextBlockFormat.RotationAngle = 0;
axis.TextFormat.PortionFormat.FontHeight = 12;
axis.MajorTickMark = TickMarkType.Outside;
axis.IsAutomaticTickLabelSpacing = true;
axis.IsAutomaticTickMarksSpacing = true;

// Slide 2: mostra ogni terza etichetta, ma mantieni un segno di graduazione per ogni categoria.
var manualSlide = presentation.Slides.AddClone(slide);
var manualChart = (IChart)manualSlide.Shapes[0];
var manualAxis = manualChart.Axes.HorizontalAxis;
manualAxis.IsAutomaticTickLabelSpacing = false;
manualAxis.TickLabelSpacing = 3;
manualAxis.IsAutomaticTickMarksSpacing = false;
manualAxis.TickMarksSpacing = 1;

// Slide 3: lascia che il grafico scelga nuovamente entrambi gli intervalli.
var restoredSlide = presentation.Slides.AddClone(manualSlide);
var restoredChart = (IChart)restoredSlide.Shapes[0];
restoredChart.Axes.HorizontalAxis.IsAutomaticTickLabelSpacing = true;
restoredChart.Axes.HorizontalAxis.IsAutomaticTickMarksSpacing = true;

presentation.Save("CategoryAxisIntervals.pptx", SaveFormat.Pptx);

Spaziatura automatica (diapositiva 1): In questo rendering, ogni seconda etichetta di categoria è visualizzata e avvolta su due righe. Il risultato automatico può variare in base alle dimensioni del grafico, ai caratteri e al renderer.

Spaziatura automatica delle etichette di categoria con tutte le 24 colonne visibili

Spaziatura manuale (diapositiva 2): Ogni terza etichetta è visualizzata su una sola riga, mentre i segni di graduazione rimangono a ogni intervallo di categoria. Tutte le 24 colonne, incluse quelle senza etichette, rimangono visibili con gli stessi valori. La diapositiva 3 ripristina l’aspetto automatico mostrato sopra.

Intervallo manuale delle etichette di categoria di tre con tutte le 24 colonne visibili

Scegli l’asse e l’intervallo corretti

Usa questo intervallo di conteggio delle categorie per un asse di categoria testuale, come l’asse di categoria di un grafico a colonne, a linee, ad area o a barre. In un grafico a colonne è l’asse orizzontale. In un grafico a barre orizzontali, l’asse di categoria è verticale, quindi applica queste impostazioni a VerticalAxis. La spaziatura dei segni di graduazione si applica anche a un asse di serie nei grafici che ne hanno uno.

Non usare la spaziatura delle etichette di categoria per impostare la scala numerica di un asse di valore. Su un asse di valore, MajorUnit specifica una differenza di valori: ad esempio, un’unità maggiore di 10 produce segni a 0, 10, 20 e così via quando l’asse parte da zero. Un intervallo di etichette di categoria di 3 conta invece le posizioni di categoria, indipendentemente dai loro valori. I grafici a dispersione e a bolle usano assi di valore anziché un asse di categoria testuale. Per un asse di data, utilizza unità maggiori e scale basate sul tempo come descritto in Modifica un asse di categoria.

Imposta il formato della data per i valori dell’asse di categoria

L’esempio sostituisce i dati predefiniti del grafico con quattro valori annuali. Le date sono archiviate come numeri seriali OLE Automation nel primo foglio di lavoro (indice 0). Imposta CategoryAxisType su un asse di data, disabilita IsNumberFormatLinkedToSource e assegna yyyy a NumberFormat affinché le etichette di categoria mostrino gli anni a quattro cifre indipendentemente dalla formattazione delle celle.

using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var chart = slide.Shapes.AddChart(ChartType.Line, 50, 50, 450, 300);

chart.ChartData.Categories.Clear();
chart.ChartData.Series.Clear();

var workbook = chart.ChartData.ChartDataWorkbook;
workbook.Clear(0);

var series = chart.ChartData.Series.Add(ChartType.Line);
for (var i = 0; i < 4; i++)
{
    var date = new DateTime(2015 + i, 1, 1);
    var categoryCell = workbook.GetCell(0, i + 1, 0, date.ToOADate());
    chart.ChartData.Categories.Add(categoryCell);

    var valueCell = workbook.GetCell(0, i + 1, 1, i + 1);
    series.DataPoints.AddDataPointForLineSeries(valueCell);
}

chart.Axes.HorizontalAxis.CategoryAxisType = CategoryAxisType.Date;
chart.Axes.HorizontalAxis.IsNumberFormatLinkedToSource = false;
chart.Axes.HorizontalAxis.NumberFormat = "yyyy";

presentation.Save("DateAxisFormat.pptx", SaveFormat.Pptx);

Imposta un angolo di rotazione per il titolo dell’asse del grafico

Abilita HasTitle sull’asse verticale, fornisci il testo del titolo e imposta RotationAngle per ruotare il titolo. L’angolo è misurato in gradi; questo esempio salva un grafico a colonne con il titolo dell’asse dei valori ruotato di 90 gradi.

using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var chart = slide.Shapes.AddChart(ChartType.ClusteredColumn, 50, 50, 450, 300);
chart.Axes.VerticalAxis.HasTitle = true;
chart.Axes.VerticalAxis.Title.AddTextFrameForOverriding("Value");
chart.Axes.VerticalAxis.Title.TextFormat.TextBlockFormat.RotationAngle = 90;

presentation.Save("RotatedAxisTitle.pptx", SaveFormat.Pptx);

Imposta la posizione dell’asse su un asse di categoria o di valore

Usa AxisBetweenCategories per controllare se l’asse di valore incrocia l’asse di categoria tra le categorie o sui segni di categoria. Questa proprietà si applica agli assi di categoria. L’esempio la imposta su true sull’asse di categoria orizzontale di un grafico a colonne e salva il risultato.

using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var chart = slide.Shapes.AddChart(ChartType.ClusteredColumn, 50, 50, 450, 300);
chart.Axes.HorizontalAxis.AxisBetweenCategories = true;

presentation.Save("AxisBetweenCategories.pptx", SaveFormat.Pptx);

Imposta l’unità di visualizzazione su un asse di valore del grafico

Imposta DisplayUnit per scalare le etichette su un asse di valore senza modificare i dati sottostanti. Con DisplayUnitType impostato su Millions, un valore di 60 000 000 viene visualizzato come 60. L’esempio crea un grafico a colonne e applica l’unità di visualizzazione milioni al suo asse verticale.

using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var chart = slide.Shapes.AddChart(ChartType.ClusteredColumn, 50, 50, 450, 300);
chart.Axes.VerticalAxis.DisplayUnit = DisplayUnitType.Millions;

presentation.Save("Result.pptx", SaveFormat.Pptx);

FAQ

Come impostare il valore al quale un asse incrocia l’altro (incrocio degli assi)?

Utilizza CrossType per selezionare il comportamento di incrocio. Per specificare un valore numerico di incrocio, imposta CrossAt. Queste impostazioni consentono di spostare l’incrocio dell’asse a una linea di base adeguata.

Come posso posizionare le etichette dei segni di graduazione rispetto all’asse?

Imposta TickLabelPosition usando TickLabelPositionType: Low, High, NextTo o None. Per controllare i segni di graduazione stessi, usa MajorTickMark o MinorTickMark; questi sono separati dal posizionamento delle etichette.