Personalizza gli assi dei grafici nelle presentazioni usando Python
Panoramica
Questo articolo spiega come personalizzare gli assi dei grafici con Aspose.Slides per Python tramite Java. Copre valori degli assi calcolati, scambio di righe e colonne del grafico, visibilità dell’asse, intervalli di etichette di categoria e tick‑mark, categorie e formattazione delle date, rotazione del titolo, posizionamento dell’asse, unità di visualizzazione e scaling logaritmico.
Ottenere i valori massimi sull’asse verticale di un grafico
Crea una Presentation e aggiungi un grafico ad area con dati predefiniti. Chiama validateChartLayout prima di leggere i valori calcolati degli assi 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 dei tick. getActualMajorUnitScale e getActualMinorUnitScale forniscono scale di unità di tempo, rilevanti per gli assi di data. L’esempio memorizza questi valori in variabili locali e salva il grafico.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.Area, 100, 100, 500, 350)
chart.validateChartLayout()
max_value = chart.getAxes().getVerticalAxis().getActualMaxValue()
min_value = chart.getAxes().getVerticalAxis().getActualMinValue()
major_unit = chart.getAxes().getVerticalAxis().getActualMajorUnit()
minor_unit = chart.getAxes().getVerticalAxis().getActualMinorUnit()
major_unit_scale = chart.getAxes().getVerticalAxis().getActualMajorUnitScale()
minor_unit_scale = chart.getAxes().getVerticalAxis().getActualMinorUnitScale()
presentation.save("AxisValues_out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Scambiare 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 modifica 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.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpase.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat
presentation = 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()
Invertire l’ordine di tracciamento di un asse
Usa setPlotOrderReversed per invertire un asse di categoria o di valore. Ad esempio, un grafico a barre orizzontali può mostrare le fasi del progetto dall’alto verso il basso nello stesso ordine del foglio di lavoro: Pianificazione, Sviluppo, Test. L’inversione di un asse modifica la direzione di tracciamento; non ordina né riorganizza i dati del foglio. In confronto, switchRowColumn scambia i ruoli di serie e categorie.
L’esempio seguente crea un grafico a barre orizzontali con tre fasi e una serie. Salva una presentazione con tre diapositive: ordine normale, categorie invertite e valori invertiti. Ogni copia utilizza lo stesso set di dati e solo un asse è invertito in ciascuna copia.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, CrossesType, SaveFormat
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.ClusteredBar, 50, 40, 620, 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.ClusteredBar)
stages = ["Planning", "Development", "Testing"]
values = [10, 30, 20]
for i, stage in enumerate(stages):
category_cell = workbook.getCell(0, i + 1, 0, stage)
chart.getChartData().getCategories().add(category_cell)
value_cell = workbook.getCell(0, i + 1, 1, float(values[i]))
series.getDataPoints().addDataPointForBarSeries(value_cell)
# Diapositiva 2: mostra la prima categoria in alto.
category_slide = presentation.getSlides().addClone(slide)
category_chart = category_slide.getShapes().get_Item(0)
category_chart.getAxes().getVerticalAxis().setPlotOrderReversed(True)
# Mantieni l'asse dei valori orizzontale in basso.
category_chart.getAxes().getVerticalAxis().setCrossType(CrossesType.Maximum)
# Diapositiva 3: inverti solo la scala numerica orizzontale.
value_slide = presentation.getSlides().addClone(slide)
value_chart = value_slide.getShapes().get_Item(0)
value_chart.getAxes().getHorizontalAxis().setPlotOrderReversed(True)
presentation.save("ReversedAxes.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
L’inversione di un asse può anche spostare l’asse perpendicolare sul lato opposto del tracciato. setCrossType controlla dove l’altro asse incrocia l’asse configurato. Nella diapositiva 2, chiamandolo con CrossesType.Maximum sull’asse di categoria invertito, si mantiene l’asse dei valori orizzontale in basso. Per un punto di incrocio specifico, usa setCrossAt. Controlla le impostazioni di incrocio quando cambi direzione, soprattutto se il grafico ha già un punto di incrocio personalizzato. Chiama setPlotOrderReversed con False per ripristinare la direzione normale di tracciamento; le impostazioni di incrocio sono separate.
| Ordine normale (slide 1) | Categorie invertite (slide 2) | Valori invertiti (slide 3) |
|---|---|---|
![]() |
![]() |
![]() |
| Le categorie vanno dal basso verso l’alto; i valori aumentano da sinistra a destra. | Pianificazione, Sviluppo e Test vanno dall’alto verso il basso. I valori e l’ordine delle righe della cartella di lavoro non cambiano. | Le categorie conservano il loro ordine normale; i valori aumentano da destra a sinistra. L’asse delle categorie incrocia a zero a destra. |
Disattivare 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 jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat
presentation = 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()
Disattivare 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 jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat
presentation = 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()
Modificare un asse di categoria
Usa setCategoryAxisType per scegliere un asse di categoria di tipo data o testo. Questo esempio richiede ExistingChart.pptx, con un grafico come prima forma nella prima diapositiva e celle di categoria contenenti valori data numerici di Excel. Cambia l’asse orizzontale in un asse di data. Chiamando setAutomaticMajorUnit con False, setMajorUnit con 1 e setMajorUnitScale con TimeUnitType.Months si impostano i tick maggiori a intervalli di un mese.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, CategoryAxisType, TimeUnitType
presentation = 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()
Controllare gli intervalli delle etichette dell’asse di categoria
Quando un grafico ha molte categorie, riduci il numero di etichette visibili sull’asse senza rimuovere categorie o punti dati. Chiama setAutomaticTickLabelSpacing con False, quindi passa l’intervallo di categoria desiderato a setTickLabelSpacing. Per le categorie di testo nel loro ordine normale, il conteggio inizia 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 mostra necessariamente ogni etichetta.
I tick mark hanno controlli separati. Chiama setAutomaticTickMarksSpacing con False e usa setTickMarksSpacing per impostare il loro intervallo. Per esempio, 1 mantiene un tick mark a ogni intervallo di categoria mentre le etichette appaiono solo ogni terza categoria. Usa setMajorTickMark con uno stile visibile così da vedere il risultato. Richiamare nuovamente il setter automatico con True permette al grafico di scegliere di nuovo quell’intervallo.
L’esempio autogestito seguente crea 24 categorie e una serie, quindi salva tre diapositive in CategoryAxisIntervals.pptx: spaziatura automatica, spaziatura manuale delle etichette con tick mark indipendenti, e ripristino della spaziatura automatica. Le due copie conservano i dati originali del grafico. Non è richiesta alcuna presentazione di input. Il testo delle etichette orizzontali rende evidente la differenza di densità.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat, CategoryAxisType, TickMarkType
presentation = 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 in range(24):
category_cell = workbook.getCell(0, i + 1, 0, f"Category {i + 1}")
chart.getChartData().getCategories().add(category_cell)
value_cell = workbook.getCell(0, i + 1, 1, float(10 + i % 6 * 5))
series.getDataPoints().addDataPointForBarSeries(value_cell)
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 spunta per ogni categoria.
manual_slide = presentation.getSlides().addClone(slide)
manual_chart = manual_slide.getShapes().get_Item(0)
manual_axis = manual_chart.getAxes().getHorizontalAxis()
manual_axis.setAutomaticTickLabelSpacing(False)
manual_axis.setTickLabelSpacing(3)
manual_axis.setAutomaticTickMarksSpacing(False)
manual_axis.setTickMarksSpacing(1)
# Slide 3: lascia che il grafico scelga di nuovo entrambi gli intervalli.
restored_slide = presentation.getSlides().addClone(manual_slide)
restored_chart = restored_slide.getShapes().get_Item(0)
restored_chart.getAxes().getHorizontalAxis().setAutomaticTickLabelSpacing(True)
restored_chart.getAxes().getHorizontalAxis().setAutomaticTickMarksSpacing(True)
presentation.save("CategoryAxisIntervals.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Spaziatura automatica (slide 1): In questa rappresentazione, ogni seconda etichetta di categoria è visualizzata e si avvolge su due righe. Il risultato automatico può variare in base a dimensione del grafico, caratteri e motore di rendering.

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

Scegliere l’asse e l’intervallo corretti
Usa questo intervallo basato sul conteggio delle categorie per un asse di categoria testuale, come l’asse di categoria di un grafico a colonne, linee, aree 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 tick mark si applica anche a un asse di serie nei grafici che ne possiedono uno.
Non usare 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 produce tick a 0, 10, 20, ecc. quando l’asse parte da zero. Un intervallo di etichette di categoria di 3 conta invece le posizioni delle categorie, indipendentemente dal loro valore 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à e scale temporali maggiori come descritto in Modificare un asse di categoria.
Impostare 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 memorizzate 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 dal formato della cella.
from datetime import date
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat, CategoryAxisType
presentation = 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)
base_date = date(1899, 12, 30)
series = chart.getChartData().getSeries().add(ChartType.Line)
for i in range(4):
category_date = date(2015 + i, 1, 1)
category_value = float((category_date - base_date).days)
category_cell = workbook.getCell(0, i + 1, 0, category_value)
chart.getChartData().getCategories().add(category_cell)
value_cell = workbook.getCell(0, i + 1, 1, float(i + 1))
series.getDataPoints().addDataPointForLineSeries(value_cell)
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()
Impostare un angolo di rotazione per il titolo dell’asse del grafico
Chiama setTitle con True sull’asse verticale, fornisci il testo del titolo e imposta l’angolo di rotazione nella formattazione del blocco di testo del 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 jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat
presentation = 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()
Impostare 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 tick 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 salva il risultato.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat
presentation = 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()
Impostare 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 è visualizzato come 60. L’esempio crea un grafico a colonne e applica l’unità di visualizzazione milioni al suo asse verticale.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat, DisplayUnitType
presentation = 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()
Configurare un asse di valore logaritmico
Un asse di valore logaritmico è utile quando valori positivi coprono diversi ordini di grandezza. Ad esempio, un servizio può ricevere 10, 100, 1 000, 10 000 e 100 000 richieste in cinque periodi. Su una scala lineare, i valori più piccoli appaiono vicini fra loro vicino a zero. Una scala logaritmica rende più facile confrontare la loro crescita relativa: distanze uguali rappresentano rapporti uguali anziché differenze uguali.
Chiama setLogarithmic con True sull’asse di valore e usa setLogBase per scegliere la base. Questo cambia il modo in cui i valori esistenti sono visualizzati; non modifica i dati né aggiunge una linea di tendenza logaritmica. Una linea di tendenza rappresenta una relazione aggiustata nei dati ed è una funzione separata.
Scegliere l’asse di valore e la base
Per un grafico a linee o a colonne, l’asse di valore è restituito da getVerticalAxis. Per un grafico a barre orizzontali, è restituito da getHorizontalAxis. I grafici a dispersione e a bolle hanno due assi di valore, quindi scegli l’asse orizzontale per i valori X, quello verticale per i valori Y, o entrambi. Non applicare lo scaling logaritmico a un asse di categoria.
La base logaritmica predefinita è 10. Per i grafici PPTX, usa una base compresa tra 2 e 1000, inclusi; sono supportate anche basi frazionarie come 2.5. Con base 10, potenze successive come 10, 100, 1 000 e 10 000 sono equidistanti.
Confrontare la scala lineare e quella logaritmica
L’esempio autogestito seguente crea un grafico a linee con i cinque conteggi di richieste nella prima diapositiva, quindi lo clona e abilita un asse di valore logaritmico base 10 nella seconda. Entrambe le diapositive conservano gli stessi dati.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.Line, 30, 40, 660, 200)
chart.setLegend(False)
chart.getChartData().getCategories().clear()
chart.getChartData().getSeries().clear()
workbook = chart.getChartData().getChartDataWorkbook()
workbook.clear(0)
series = chart.getChartData().getSeries().add(ChartType.Line)
values = [10, 100, 1000, 10000, 100000]
for i, value in enumerate(values):
category_cell = workbook.getCell(0, i + 1, 0, f"Period {i + 1}")
chart.getChartData().getCategories().add(category_cell)
value_cell = workbook.getCell(0, i + 1, 1, float(value))
series.getDataPoints().addDataPointForLineSeries(value_cell)
# Mantieni la prima diapositiva lineare e modifica solo la scala dell'asse dei valori della copia.
logarithmic_slide = presentation.getSlides().addClone(slide)
logarithmic_chart = logarithmic_slide.getShapes().get_Item(0)
value_axis = logarithmic_chart.getAxes().getVerticalAxis()
value_axis.setLogarithmic(True)
value_axis.setLogBase(10)
presentation.save("LogarithmicAxis.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Scala lineare (slide 1): Distanze verticali uguali rappresentano differenze uguali nei conteggi delle richieste. Il valore più grande domina il grafico, rendendo difficile distinguere i valori più piccoli.

Scala logaritmica (slide 2): Distanze verticali uguali rappresentano rapporti uguali. Ogni periodo ha dieci volte più richieste del precedente, così i punti formano una linea retta crescente sulla scala base 10. Le etichette dell’asse mostrano comunque i conteggi originali delle richieste.

Gestire valori zero e negativi
Una scala logaritmica può visualizzare solo valori strettamente positivi. Verifica i dati prima di abilitarla. Se zero o valori negativi hanno senso, mantieni una scala lineare o mostrali separatamente. Se escludere tali valori è appropriato per l’analisi, spiega l’omissione. Non sostituirli silenziosamente con numeri positivi piccoli, poiché ciò altera il significato dei dati. Qualsiasi valore minimo o massimo configurato manualmente per un asse logaritmico deve essere anch’esso positivo.
FAQ
Come impostare il valore al quale un asse incrocia l’altro (incrocio 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 posizionare le etichette dei tick rispetto all’asse?
Chiama setTickLabelPosition usando TickLabelPositionType: Low, High, NextTo o None. Per controllare i tick mark stessi, usa setMajorTickMark o setMinorTickMark; questi sono separati dal posizionamento delle etichette.


