Formattare i grafici nelle presentazioni usando Python
Panoramica
Questo articolo spiega come formattare i grafici nelle presentazioni PowerPoint utilizzando Aspose.Slides. Mostra come personalizzare gli elementi chiave del grafico, come assi, linee della griglia, titoli, legende, area del grafico e riempimenti delle pareti, per migliorare l’aspetto e la leggibilità dei dati del grafico.
Dimostra inoltre come impostare le proprietà del carattere per il testo del grafico, applicare formati numerici predefiniti ai dati del grafico e abilitare gli angoli arrotondati per l’area del grafico. Insieme, questi esempi mostrano come controllare sia lo stile visivo sia la presentazione dei dati dei grafici in una presentazione.
Formattare le entità del grafico
Usa Chart per formattare titoli del grafico, assi, linee della griglia, legende e area del grafico. Questo esempio crea un grafico a linee con marcatori e dati predefiniti, quindi applica stili di testo e di linea separati ai suoi assi dei valori e delle categorie. Le dimensioni dei caratteri e le larghezze delle linee sono specificate in punti; le etichette delle categorie sono ruotate di 45 gradi.
L’asse dei valori utilizza number_format in modo indipendente dalle celle di origine. La sua scala va da -2 a 15, con intervalli principali di 2 e intervalli secondari di 0,5. L’esempio combina anche la formattazione percentuale con display_unit impostato su migliaia, quindi adatta queste impostazioni al significato e alla grandezza dei tuoi dati. La legenda rimane fuori dall’area del grafico perché overlay è disabilitato. I riempimenti del retro e del pavimento sono configurati tramite back_wall e floor, ma queste superfici sono visibili solo nei grafici 3D.
import aspose.slides.charts as charts
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.LINE_WITH_MARKERS, 50, 50, 500, 400)
chart.has_title = True
chart.chart_title.add_text_frame_for_overriding("")
chart_title = chart.chart_title.text_frame_for_overriding.paragraphs[0].portions[0]
chart_title.text = "Sample Chart"
chart_title.portion_format.fill_format.fill_type = slides.FillType.SOLID
chart_title.portion_format.fill_format.solid_fill_color.color = slides.Color.gray
chart_title.portion_format.font_height = 20
chart_title.portion_format.font_bold = slides.NullableBool.TRUE
chart_title.portion_format.font_italic = slides.NullableBool.TRUE
chart.axes.vertical_axis.major_grid_lines_format.line.fill_format.fill_type = slides.FillType.SOLID
chart.axes.vertical_axis.major_grid_lines_format.line.fill_format.solid_fill_color.color = slides.Color.blue
chart.axes.vertical_axis.major_grid_lines_format.line.width = 5
chart.axes.vertical_axis.major_grid_lines_format.line.dash_style = slides.LineDashStyle.DASH_DOT
chart.axes.vertical_axis.minor_grid_lines_format.line.fill_format.fill_type = slides.FillType.SOLID
chart.axes.vertical_axis.minor_grid_lines_format.line.fill_format.solid_fill_color.color = slides.Color.red
chart.axes.vertical_axis.minor_grid_lines_format.line.width = 3
chart.axes.vertical_axis.is_number_format_linked_to_source = False
chart.axes.vertical_axis.display_unit = charts.DisplayUnitType.THOUSANDS
chart.axes.vertical_axis.number_format = "0.0%"
chart.axes.vertical_axis.is_automatic_major_unit = False
chart.axes.vertical_axis.is_automatic_max_value = False
chart.axes.vertical_axis.is_automatic_minor_unit = False
chart.axes.vertical_axis.is_automatic_min_value = False
chart.axes.vertical_axis.max_value = 15
chart.axes.vertical_axis.min_value = -2
chart.axes.vertical_axis.minor_unit = 0.5
chart.axes.vertical_axis.major_unit = 2.0
vertical_axis_portion_format = chart.axes.vertical_axis.text_format.portion_format
vertical_axis_portion_format.font_bold = slides.NullableBool.TRUE
vertical_axis_portion_format.font_height = 16
vertical_axis_portion_format.font_italic = slides.NullableBool.TRUE
vertical_axis_portion_format.fill_format.fill_type = slides.FillType.SOLID
vertical_axis_portion_format.fill_format.solid_fill_color.color = slides.Color.dark_green
vertical_axis_portion_format.latin_font = slides.FontData("Times New Roman")
chart.axes.vertical_axis.has_title = True
chart.axes.vertical_axis.title.add_text_frame_for_overriding("")
vertical_axis_title = chart.axes.vertical_axis.title.text_frame_for_overriding.paragraphs[0].portions[0]
vertical_axis_title.text = "Primary Axis"
vertical_axis_title.portion_format.fill_format.fill_type = slides.FillType.SOLID
vertical_axis_title.portion_format.fill_format.solid_fill_color.color = slides.Color.gray
vertical_axis_title.portion_format.font_height = 20
vertical_axis_title.portion_format.font_bold = slides.NullableBool.TRUE
vertical_axis_title.portion_format.font_italic = slides.NullableBool.TRUE
chart.axes.horizontal_axis.major_grid_lines_format.line.fill_format.fill_type = slides.FillType.SOLID
chart.axes.horizontal_axis.major_grid_lines_format.line.fill_format.solid_fill_color.color = slides.Color.green
chart.axes.horizontal_axis.major_grid_lines_format.line.width = 5
chart.axes.horizontal_axis.minor_grid_lines_format.line.fill_format.fill_type = slides.FillType.SOLID
chart.axes.horizontal_axis.minor_grid_lines_format.line.fill_format.solid_fill_color.color = slides.Color.yellow
chart.axes.horizontal_axis.minor_grid_lines_format.line.width = 3
horizontal_axis_portion_format = chart.axes.horizontal_axis.text_format.portion_format
horizontal_axis_portion_format.font_bold = slides.NullableBool.TRUE
horizontal_axis_portion_format.font_height = 16
horizontal_axis_portion_format.font_italic = slides.NullableBool.TRUE
horizontal_axis_portion_format.fill_format.fill_type = slides.FillType.SOLID
horizontal_axis_portion_format.fill_format.solid_fill_color.color = slides.Color.blue
horizontal_axis_portion_format.latin_font = slides.FontData("Arial")
chart.axes.horizontal_axis.has_title = True
chart.axes.horizontal_axis.title.add_text_frame_for_overriding("")
horizontal_axis_title = chart.axes.horizontal_axis.title.text_frame_for_overriding.paragraphs[0].portions[0]
horizontal_axis_title.text = "Sample Category"
horizontal_axis_title.portion_format.fill_format.fill_type = slides.FillType.SOLID
horizontal_axis_title.portion_format.fill_format.solid_fill_color.color = slides.Color.gray
horizontal_axis_title.portion_format.font_height = 20
horizontal_axis_title.portion_format.font_bold = slides.NullableBool.TRUE
horizontal_axis_title.portion_format.font_italic = slides.NullableBool.TRUE
chart.axes.horizontal_axis.tick_label_position = charts.TickLabelPositionType.LOW
chart.axes.horizontal_axis.tick_label_rotation_angle = 45
legend_portion_format = chart.legend.text_format.portion_format
legend_portion_format.font_bold = slides.NullableBool.TRUE
legend_portion_format.font_height = 16
legend_portion_format.font_italic = slides.NullableBool.TRUE
legend_portion_format.fill_format.fill_type = slides.FillType.SOLID
legend_portion_format.fill_format.solid_fill_color.color = slides.Color.dark_red
chart.legend.overlay = False
chart.back_wall.thickness = 1
chart.back_wall.format.fill.fill_type = slides.FillType.SOLID
chart.back_wall.format.fill.solid_fill_color.color = slides.Color.orange
chart.floor.format.fill.fill_type = slides.FillType.SOLID
chart.floor.format.fill.solid_fill_color.color = slides.Color.red
chart.plot_area.format.fill.fill_type = slides.FillType.SOLID
chart.plot_area.format.fill.solid_fill_color.color = slides.Color.light_cyan
presentation.save("FormattedChart.pptx", slides.export.SaveFormat.PPTX)
Impostare le proprietà del carattere per un grafico
Imposta la dimensione predefinita del carattere per il testo del grafico tramite Chart.text_format. L’esempio crea un grafico a colonne raggruppate con un carattere da 20 punti e abilita le etichette dei valori per la prima serie tramite show_value. Gli elementi di testo con impostazioni di carattere esplicite possono sovrascrivere il valore predefinito del grafico.
import aspose.slides.charts as charts
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 100, 100, 500, 400)
chart.text_format.portion_format.font_height = 20
chart.chart_data.series[0].labels.default_data_label_format.show_value = True
presentation.save("ChartFontProperties.pptx", slides.export.SaveFormat.PPTX)
Impostare il formato numerico
Utilizza ChartDataCell.preset_number_format per applicare un formato numerico predefinito alle celle della cartella di lavoro del grafico. Questo esempio crea un grafico a colonne raggruppate con dati predefiniti basati su celle e applica l’indice di formato 10 (0.00%) a ciascuna cella di valore della serie. Questo cambia il modo in cui i valori sono visualizzati nella cartella di lavoro senza modificare i numeri sottostanti; ad esempio, 0,25 viene visualizzato come 25,00%. I formati degli assi e delle etichette dei dati possono essere configurati separatamente.
import aspose.slides.charts as charts
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 50, 50, 500, 400)
for series in chart.chart_data.series:
for data_point in series.data_points:
data_point.value.as_cell.preset_number_format = 10 # 0.00%
presentation.save("PresetNumberFormat.pptx", slides.export.SaveFormat.PPTX)
La tabella seguente elenca gli indici dei formati numerici predefiniti con i corrispondenti formati Excel rappresentativi per la locale English (United States). Le stringhe di formato esatte e la loro visualizzazione possono variare in base all’applicazione e alla locale, in particolare per valute e date. Alcuni formati Excel differiscono anche dai valori predefiniti nello standard OOXML, come descritto nelle note di implementazione dei formati numerici di Microsoft.
| Indice | Formato |
|---|---|
| 0 | General |
| 1 | 0 |
| 2 | 0.00 |
| 3 | #,##0 |
| 4 | #,##0.00 |
| 5 | "$"#,##0_);("$"#,##0) |
| 6 | "$"#,##0_);[Red]("$"#,##0) |
| 7 | "$"#,##0.00_);("$"#,##0.00) |
| 8 | "$"#,##0.00_);[Red]("$"#,##0.00) |
| 9 | 0% |
| 10 | 0.00% |
| 11 | 0.00E+00 |
| 12 | # ?/? |
| 13 | # ??/?? |
| 14 | m/d/yyyy |
| 15 | d-mmm-yy |
| 16 | d-mmm |
| 17 | mmm-yy |
| 18 | h:mm AM/PM |
| 19 | h:mm:ss AM/PM |
| 20 | h:mm |
| 21 | h:mm:ss |
| 22 | m/d/yyyy h:mm |
| 37 | #,##0_);(#,##0) |
| 38 | #,##0_);[Red](#,##0) |
| 39 | #,##0.00_);(#,##0.00) |
| 40 | #,##0.00_);[Red](#,##0.00) |
| 41 | _(* #,##0_);_(* (#,##0);_(* "-"_);_(@_) |
| 42 | _("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_) |
| 43 | _(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_) |
| 44 | _("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_) |
| 45 | mm:ss |
| 46 | [h]:mm:ss |
| 47 | mm:ss.0 |
| 48 | ##0.0E+0 |
| 49 | @ |
Impostare i bordi arrotondati dell’area del grafico
Abilita Chart.has_rounded_corners per arrotondare gli angoli dell’area del grafico. L’esempio crea un grafico a colonne raggruppate e utilizza line_format per dare al suo contorno un colore grigio solido e uno stile a linea singola prima di salvare la presentazione.
import aspose.slides.charts as charts
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 20, 100, 600, 400)
chart.line_format.fill_format.fill_type = slides.FillType.SOLID
chart.line_format.fill_format.solid_fill_color.color = slides.Color.gray
chart.line_format.style = slides.LineStyle.SINGLE
chart.has_rounded_corners = True
presentation.save("RoundedBorders.pptx", slides.export.SaveFormat.PPTX)
Modificare le annotazioni esistenti del grafico
Un grafico può contenere forme personalizzate, come un’annotazione di testo che spiega lo stato di un rapporto. Accedi a queste forme tramite Chart.user_shapes. La sua collezione shapes contiene le forme di proprietà del grafico.
Una casella di testo ordinaria posizionata sopra un grafico appartiene alla diapositiva, anche se sembra parte del grafico. Iterare attraverso Slide.shapes trova il grafico e le forme ordinarie della diapositiva, ma non elenca le singole forme all’interno del grafico. I titoli del grafico e le etichette dei dati sono elementi del grafico separati, non annotazioni personalizzate in questa collezione.
Scarica chart-annotations.pptx e posizionalo nella directory di lavoro dell’applicazione. La sua prima diapositiva contiene un grafico con un’annotazione non raggruppata che recita “Preliminary results”, una linea di proprietà del grafico e una casella di testo ordinaria della diapositiva che recita “Slide overlay”. L’esempio trova il primo grafico su quella diapositiva e cambia l’annotazione in “Final results” quando il rapporto è pronto per la pubblicazione. Verifica se la collezione è vuota e modifica solo un AutoShape con un text_frame che non è None e contiene il testo previsto.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation("chart-annotations.pptx") as presentation:
slide = presentation.slides[0]
chart = next((shape for shape in slide.shapes if isinstance(shape, charts.Chart)), None)
if chart is None or len(chart.user_shapes.shapes) == 0:
print("No chart or chart-owned shapes found.")
else:
updated = False
for shape in chart.user_shapes.shapes:
if isinstance(shape, slides.AutoShape) and shape.text_frame is not None:
if shape.text_frame.text == "Preliminary results":
shape.text_frame.text = "Final results"
updated = True
break
if updated:
presentation.save("chart-annotations-updated.pptx", slides.export.SaveFormat.PPTX)
else:
print("No matching text annotation found.")
La linea e la casella di testo della diapositiva rimangono inalterate. Le immagini seguenti mostrano l’input e il risultato salvato e riaperto:
| Prima della modifica | Dopo la modifica |
|---|---|
![]() |
![]() |
Note
L’esempio ispeziona solo le forme di livello superiore di proprietà del grafico. Se un’annotazione è all’interno di un GroupShape, ispeziona anche la collezione shapes di quel gruppo. Ripeti questo in modo ricorsivo per i gruppi annidati, applicando gli stessi controlli di testo alle loro forme figlie. Un gruppo stesso è un contenitore; non trattarlo come una casella di testo.FAQ
Posso impostare riempimenti semitrasparenti per colonne/aree mantenendo il bordo opaco?
Sì. La trasparenza del riempimento e il contorno sono configurati separatamente. Questo è utile per migliorare la leggibilità della griglia e dei dati in visualizzazioni dense.
Come posso gestire le etichette dei dati quando si sovrappongono?
Riduci la dimensione del carattere, disabilita componenti dell’etichetta non essenziali (ad esempio, le categorie), regola la posizione dell’etichetta, mostra le etichette solo per i punti selezionati se necessario, oppure passa al formato “valore + legenda”.
Posso applicare riempimenti a gradiente o a trama alle serie?
Sì. Le serie supportano riempimenti solidi, a gradiente e a trama. In pratica, usa i gradienti con parsimonia ed evita combinazioni che riducono il contrasto con la griglia e il testo.

