Personalizza gli assi dei grafici nelle presentazioni usando Java
Panoramica
Questo articolo spiega come personalizzare gli assi dei grafici con Aspose.Slides per Java. Copre i valori degli assi calcolati, lo scambio di righe e colonne del grafico, la visibilità degli assi, gli intervalli delle etichette di categoria e dei segni di tacca, 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 ad area con dati predefiniti. Chiama validateChartLayout prima di leggere i valori degli assi calcolati in modo che il layout del grafico sia aggiornato.
Leggi getActualMaxValue e getActualMinValue per i limiti dell’asse, e getActualMajorUnit e getActualMinorUnit per gli intervalli delle tacche. getActualMajorUnitScale e getActualMinorUnitScale forniscono le scale delle unità temporali, rilevanti per gli assi di data. L’esempio memorizza questi valori in variabili locali e salva il grafico.
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();
}
Scambia i dati tra gli assi
Usa switchRowColumn per scambiare i ruoli di serie e categorie nei dati del grafico. Ogni vecchia categoria diventa una serie e ogni vecchia serie diventa una categoria. Questo cambia il modo in cui i dati sono raggruppati; non scambia gli assi orizzontale e verticale. L’esempio usa setRange per associare 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.
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();
}
Disabilita l’asse verticale per i grafici a linee
Chiama setVisible con false sull’asse verticale per nasconderlo. L’esempio crea un grafico a linee con dati predefiniti e lo salva con l’asse verticale nascosto.
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();
}
Disabilita l’asse orizzontale per i grafici a linee
Chiama setVisible con false sull’asse orizzontale per nasconderlo. L’esempio crea un grafico a linee con dati predefiniti e lo salva con l’asse orizzontale nascosto.
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();
}
Modifica un asse di categoria
Usa setCategoryAxisType per scegliere un asse di categoria data o testuale. 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. Chiamando setAutomaticMajorUnit con false, setMajorUnit con 1 e setMajorUnitScale con TimeUnitType.Months si posizionano le tacche maggiori a intervalli di un mese.
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();
}
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. Chiama setAutomaticTickLabelSpacing con false, quindi passa l’intervallo di categoria desiderato a setTickLabelSpacing. Per le categorie testuali 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 due etichette nascoste tra quelle visualizzate. Non rimuove le colonne corrispondenti. La spaziatura automatica sceglie un intervallo in base allo spazio disponibile; non visualizza necessariamente tutte le etichette.
I segni di tacca hanno controlli separati. Chiama setAutomaticTickMarksSpacing con false e usa setTickMarksSpacing per impostare il loro intervallo. Ad esempio, 1 mantiene un segno di tacca a ogni intervallo di categoria mentre le etichette compaiono solo ogni terza categoria. Usa setMajorTickMark con uno stile visibile così da poter vedere il risultato. Impostare nuovamente il setter di spaziatura automatica con true consente al grafico di scegliere 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 tacche indipendenti e ripristino della spaziatura automatica. Le due copie conservano i dati originali del grafico. Non è necessaria alcuna presentazione di input. Il testo delle etichette orizzontali rende evidente la differenza di densità.
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);
// Slide 2: mostra ogni terza etichetta, ma mantieni un segno di tacca per ogni categoria.
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);
// Slide 3: lascia che il grafico scelga nuovamente entrambi gli intervalli.
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();
}
Spaziatura automatica (diapositiva 1): In questa resa, ogni seconda etichetta di categoria è visualizzata e avvolge su due righe. Il risultato automatico può variare con le dimensioni del grafico, i caratteri e il renderer.

Spaziatura manuale (diapositiva 2): Ogni terza etichetta è visualizzata su una linea, mentre i segni di tacca 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.

Scegli l’asse e l’intervallo corretti
Usa questo intervallo di conteggio categorie per un asse di categoria testuale, come l’asse di categoria di un grafico a colonne, linee, area o barre. In un grafico a colonne, è l’asse orizzontale. In un grafico a barre orizzontali, l’asse di categoria è verticale, quindi applica queste impostazioni all’asse restituito da getVerticalAxis. La spaziatura dei segni di tacca si applica anche a un asse di serie nei grafici che ne possiedono uno.
Non utilizzare la spaziatura delle etichette di categoria per impostare la scala numerica di un asse di valore. Su un asse di valore, setMajorUnit specifica una differenza di valori: ad esempio, un’unità maggiore di 10 genera tacche a 0, 10, 20, ecc. quando l’asse parte da zero. Un intervallo di etichette di categoria di 3 conta invece le posizioni di categoria, indipendentemente dai loro valori dati. I grafici a dispersione e a bolle usano assi di valore anziché un asse di categoria testuale. Per un asse di data, usa unità maggiori e scale basate sul tempo come descritto in Modifica un asse di categoria.
Imposta il formato 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), calcolati come il numero di giorni dal 30 dicembre 1899, per queste date. Usa setCategoryAxisType con CategoryAxisType.Date, chiama setNumberFormatLinkedToSource con false e passa yyyy a setNumberFormat affinché le etichette di categoria mostrino gli anni a quattro cifre indipendentemente dalla formattazione della cella.
import com.aspose.slides.*;
import java.time.LocalDate;
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);
LocalDate baseDate = LocalDate.of(1899, 12, 30);
IChartSeries series = chart.getChartData().getSeries().add(ChartType.Line);
for (int i = 0; i < 4; i++) {
LocalDate date = LocalDate.of(2015 + i, 1, 1);
IChartDataCell categoryCell = workbook.getCell(0, i + 1, 0, date.toEpochDay() - baseDate.toEpochDay());
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();
}
Imposta un angolo di rotazione per il titolo di un asse del grafico
Chiama setTitle con true sull’asse verticale, fornisci il testo del titolo e usa setRotationAngle 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.
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();
}
Imposta la posizione dell’asse su un asse di categoria o di valore
Usa setAxisBetweenCategories per controllare se l’asse di valore incrocia l’asse di categoria tra le categorie o sui segni di tacca delle categorie. Questa impostazione si applica agli assi di categoria. L’esempio la imposta su true sull’asse di categoria orizzontale di un grafico a colonne e ne salva il risultato.
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();
}
Imposta l’unità di visualizzazione su un asse di valore del grafico
Usa setDisplayUnit 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.
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
Come imposto il valore al quale un asse incrocia l’altro (incrocio degli assi)?
Usa setCrossType per selezionare il comportamento di incrocio. Per specificare un valore numerico di incrocio, usa setCrossAt. Queste impostazioni ti consentono di spostare l’incrocio dell’asse a una linea di base adeguata.
Come posso posizionare le etichette delle tacche rispetto all’asse?
Chiama setTickLabelPosition usando TickLabelPositionType: Low, High, NextTo o None. Per controllare le tacche stesse, usa setMajorTickMark o setMinorTickMark; questi sono separati dal posizionamento delle etichette.