Personalizza gli assi del grafico in presentazioni con C++
Panoramica
Questo articolo spiega come personalizzare gli assi dei grafici con Aspose.Slides per C++. Copre valori degli assi calcolati, scambio di righe e colonne del grafico, visibilità dell’asse, intervalli delle etichette di categoria e dei segni di divisione, categorie di data e formattazione, rotazione del titolo, posizionamento dell’asse e unità di visualizzazione.
Ottenere 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 get_ActualMaxValue e get_ActualMinValue per i limiti dell’asse, e get_ActualMajorUnit e get_ActualMinorUnit per gli intervalli dei segni di divisione. get_ActualMajorUnitScale e get_ActualMinorUnitScale forniscono scale delle unità di tempo, pertinenti agli assi di data. L’esempio memorizza questi valori in variabili locali e salva il grafico.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::Area, 100, 100, 500, 350);
chart->ValidateChartLayout();
auto maxValue = chart->get_Axes()->get_VerticalAxis()->get_ActualMaxValue();
auto minValue = chart->get_Axes()->get_VerticalAxis()->get_ActualMinValue();
auto majorUnit = chart->get_Axes()->get_VerticalAxis()->get_ActualMajorUnit();
auto minorUnit = chart->get_Axes()->get_VerticalAxis()->get_ActualMinorUnit();
auto majorUnitScale = chart->get_Axes()->get_VerticalAxis()->get_ActualMajorUnitScale();
auto minorUnitScale = chart->get_Axes()->get_VerticalAxis()->get_ActualMinorUnitScale();
presentation->Save(u"AxisValues_out.pptx", SaveFormat::Pptx);
Scambiare i dati tra gli assi
Utilizza SwitchRowColumn per scambiare i ruoli di serie e categorie nei dati del grafico. Ogni categoria precedente diventa una serie e ogni serie precedente 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.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
#include <DOM/Chart/IChartData.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::ClusteredColumn, 100, 100, 400, 300);
chart->get_ChartData()->SetRange(u"Sheet1!A1:D5");
chart->get_ChartData()->SwitchRowColumn();
presentation->Save(u"SwitchChartRowColumns_out.pptx", SaveFormat::Pptx);
Disabilitare l’asse verticale per i grafici a linee
Utilizza set_IsVisible 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.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::Line, 100, 100, 400, 300);
chart->get_Axes()->get_VerticalAxis()->set_IsVisible(false);
presentation->Save(u"HiddenVerticalAxis.pptx", SaveFormat::Pptx);
Disabilitare l’asse orizzontale per i grafici a linee
Utilizza set_IsVisible 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.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::Line, 100, 100, 400, 300);
chart->get_Axes()->get_HorizontalAxis()->set_IsVisible(false);
presentation->Save(u"HiddenHorizontalAxis.pptx", SaveFormat::Pptx);
Modificare un asse di categoria
Utilizza set_CategoryAxisType per scegliere un asse di categoria data o testo. Questo esempio richiede ExistingChart.pptx, con un grafico come prima forma nella prima diapositiva e celle di categoria contenenti valori di data numerici di Excel. Cambia l’asse orizzontale in un asse di data. Chiamando set_IsAutomaticMajorUnit con false, set_MajorUnit con 1 e set_MajorUnitScale con mesi, si posizionano i segni maggiori a intervalli di un mese.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
#include <DOM/Chart/CategoryAxisType.h>
#include <DOM/Chart/TimeUnitType.h>
#include <system/object_ext.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>(u"ExistingChart.pptx");
auto slide = presentation->get_Slide(0);
auto chart = System::ExplicitCast<IChart>(slide->get_Shape(0));
chart->get_Axes()->get_HorizontalAxis()->set_CategoryAxisType(CategoryAxisType::Date);
chart->get_Axes()->get_HorizontalAxis()->set_IsAutomaticMajorUnit(false);
chart->get_Axes()->get_HorizontalAxis()->set_MajorUnit(1);
chart->get_Axes()->get_HorizontalAxis()->set_MajorUnitScale(TimeUnitType::Months);
presentation->Save(u"ChangeChartCategoryAxis_out.pptx", SaveFormat::Pptx);
Controllare 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. Usa set_IsAutomaticTickLabelSpacing con false, quindi usa set_TickLabelSpacing con l’intervallo di categoria desiderato. 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 visualizza necessariamente ogni etichetta.
I segni di divisione hanno controlli separati. Usa set_IsAutomaticTickMarksSpacing con false e usa set_TickMarksSpacing per impostare il loro intervallo. Per esempio, 1 mantiene un segno di divisione a ogni intervallo di categoria mentre le etichette appaiono solo ogni terza categoria. Usa set_MajorTickMark con uno stile visibile così da poter vedere il risultato. Impostare nuovamente a true una delle proprietà di spaziatura automatica permette al grafico di scegliere di nuovo quell’intervallo.
Il seguente esempio autonomo crea 24 categorie e una serie, quindi salva tre diapositive in CategoryAxisIntervals.pptx: spaziatura automatica, spaziatura manuale delle etichette con segni di divisione indipendenti e spaziatura automatica ripristinata. Le due copie conservano i dati originali del grafico. Nessuna presentazione di input è necessaria. Il testo delle etichette orizzontali rende evidente la differenza di densità.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
#include <DOM/Chart/IChartData.h>
#include <DOM/Chart/CategoryAxisType.h>
#include <DOM/Chart/TickMarkType.h>
#include <DOM/Chart/IChartTextFormat.h>
#include <DOM/Chart/IChartTextBlockFormat.h>
#include <DOM/Chart/IChartPortionFormat.h>
#include <DOM/Chart/IChartDataWorkbook.h>
#include <DOM/Chart/IChartDataCell.h>
#include <DOM/Chart/IChartCategoryCollection.h>
#include <DOM/Chart/IChartSeriesCollection.h>
#include <DOM/Chart/IChartSeries.h>
#include <DOM/Chart/IChartDataPointCollection.h>
#include <system/object_ext.h>
#include <DOM/ISlideCollection.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::ClusteredColumn, 30, 40, 660, 320);
chart->set_HasLegend(false);
chart->get_ChartData()->get_Categories()->Clear();
chart->get_ChartData()->get_Series()->Clear();
auto workbook = chart->get_ChartData()->get_ChartDataWorkbook();
workbook->Clear(0);
auto series = chart->get_ChartData()->get_Series()->Add(ChartType::ClusteredColumn);
for (auto i = 0; i < 24; i++)
{
auto categoryName = System::String::Format(u"Category {0}", i + 1);
auto categoryCell = workbook->GetCell(0, i + 1, 0, System::ObjectExt::Box(categoryName));
chart->get_ChartData()->get_Categories()->Add(categoryCell);
auto valueCell = workbook->GetCell(0, i + 1, 1, System::ObjectExt::Box(10 + i % 6 * 5));
series->get_DataPoints()->AddDataPointForBarSeries(valueCell);
}
auto axis = chart->get_Axes()->get_HorizontalAxis();
axis->set_CategoryAxisType(CategoryAxisType::Text);
axis->get_TextFormat()->get_TextBlockFormat()->set_RotationAngle(0);
axis->get_TextFormat()->get_PortionFormat()->set_FontHeight(12);
axis->set_MajorTickMark(TickMarkType::Outside);
axis->set_IsAutomaticTickLabelSpacing(true);
axis->set_IsAutomaticTickMarksSpacing(true);
// Slide 2: mostra ogni terza etichetta, ma mantieni un segno di divisione per ogni categoria.
auto manualSlide = presentation->get_Slides()->AddClone(slide);
auto manualChart = System::ExplicitCast<IChart>(manualSlide->get_Shape(0));
auto manualAxis = manualChart->get_Axes()->get_HorizontalAxis();
manualAxis->set_IsAutomaticTickLabelSpacing(false);
manualAxis->set_TickLabelSpacing(3);
manualAxis->set_IsAutomaticTickMarksSpacing(false);
manualAxis->set_TickMarksSpacing(1);
// Slide 3: lascia che il grafico scelga di nuovo entrambi gli intervalli.
auto restoredSlide = presentation->get_Slides()->AddClone(manualSlide);
auto restoredChart = System::ExplicitCast<IChart>(restoredSlide->get_Shape(0));
restoredChart->get_Axes()->get_HorizontalAxis()->set_IsAutomaticTickLabelSpacing(true);
restoredChart->get_Axes()->get_HorizontalAxis()->set_IsAutomaticTickMarksSpacing(true);
presentation->Save(u"CategoryAxisIntervals.pptx", SaveFormat::Pptx);
Spaziatura automatica (diapositiva 1): In questa rappresentazione, ogni seconda etichetta di categoria è visualizzata e avvolta su due righe. Il risultato automatico può variare con la dimensione del grafico, i caratteri e il motore di rendering.

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

Scegliere l’asse e l’intervallo corretti
Utilizza questo intervallo di conteggio delle 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 a get_VerticalAxis. La spaziatura dei segni di divisione si applica anche a un asse di serie nei grafici che ne hanno uno.
Non utilizzare la spaziatura delle etichette di categoria per impostare la scala numerica di un asse di valore. Su un asse di valore, set_MajorUnit specifica una differenza di valori: per esempio, un’unità maggiore di 10 produce segni a 0, 10, 20, ecc. quando l’asse inizia da zero. Un intervallo di etichette di categoria di 3 conta invece le posizioni delle categorie, indipendentemente dai loro valori dati. I grafici a dispersione e a bolle utilizzano 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 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 archiviate come numeri seriali OLE Automation nel primo foglio di lavoro (indice 0). Utilizza set_CategoryAxisType per selezionare un asse di data, disabilita la formattazione collegata alla fonte con set_IsNumberFormatLinkedToSource e assegna yyyy con set_NumberFormat affinché le etichette di categoria visualizzino anni a quattro cifre indipendentemente dalla formattazione della cella.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
#include <DOM/Chart/IChartData.h>
#include <DOM/Chart/CategoryAxisType.h>
#include <DOM/Chart/IChartDataWorkbook.h>
#include <DOM/Chart/IChartDataCell.h>
#include <DOM/Chart/IChartCategoryCollection.h>
#include <DOM/Chart/IChartSeriesCollection.h>
#include <DOM/Chart/IChartSeries.h>
#include <DOM/Chart/IChartDataPointCollection.h>
#include <system/object_ext.h>
#include <system/date_time.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::Line, 50, 50, 450, 300);
chart->get_ChartData()->get_Categories()->Clear();
chart->get_ChartData()->get_Series()->Clear();
auto workbook = chart->get_ChartData()->get_ChartDataWorkbook();
workbook->Clear(0);
auto series = chart->get_ChartData()->get_Series()->Add(ChartType::Line);
for (auto i = 0; i < 4; i++)
{
auto date = System::DateTime(2015 + i, 1, 1);
auto categoryCell = workbook->GetCell(0, i + 1, 0, System::ObjectExt::Box(date.ToOADate()));
chart->get_ChartData()->get_Categories()->Add(categoryCell);
auto valueCell = workbook->GetCell(0, i + 1, 1, System::ObjectExt::Box(i + 1));
series->get_DataPoints()->AddDataPointForLineSeries(valueCell);
}
chart->get_Axes()->get_HorizontalAxis()->set_CategoryAxisType(CategoryAxisType::Date);
chart->get_Axes()->get_HorizontalAxis()->set_IsNumberFormatLinkedToSource(false);
chart->get_Axes()->get_HorizontalAxis()->set_NumberFormat(u"yyyy");
presentation->Save(u"DateAxisFormat.pptx", SaveFormat::Pptx);
Impostare un angolo di rotazione per il titolo di un asse del grafico
Abilita il titolo dell’asse verticale con set_HasTitle, fornisci il testo del titolo e utilizza set_RotationAngle per ruotare il titolo. L’angolo è misurato in gradi; questo esempio salva un grafico a colonne con il titolo dell’asse di valore ruotato di 90 gradi.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
#include <DOM/Chart/IChartTextFormat.h>
#include <DOM/Chart/IChartTextBlockFormat.h>
#include <DOM/Chart/IChartTitle.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::ClusteredColumn, 50, 50, 450, 300);
chart->get_Axes()->get_VerticalAxis()->set_HasTitle(true);
chart->get_Axes()->get_VerticalAxis()->get_Title()->AddTextFrameForOverriding(u"Value");
chart->get_Axes()->get_VerticalAxis()->get_Title()->get_TextFormat()->get_TextBlockFormat()->set_RotationAngle(90);
presentation->Save(u"RotatedAxisTitle.pptx", SaveFormat::Pptx);
Impostare la posizione dell’asse su un asse di categoria o di valore
Usa set_AxisBetweenCategories per controllare se l’asse di valore attraversa l’asse di categoria tra le categorie o sui segni di divisione delle categorie. Questa proprietà si applica agli assi di categoria. L’esempio lo imposta su true sull’asse di categoria orizzontale di un grafico a colonne e salva il risultato.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::ClusteredColumn, 50, 50, 450, 300);
chart->get_Axes()->get_HorizontalAxis()->set_AxisBetweenCategories(true);
presentation->Save(u"AxisBetweenCategories.pptx", SaveFormat::Pptx);
Impostare l’unità di visualizzazione su un asse di valore del grafico
Utilizza set_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.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
#include <DOM/Chart/DisplayUnitType.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::ClusteredColumn, 50, 50, 450, 300);
chart->get_Axes()->get_VerticalAxis()->set_DisplayUnit(DisplayUnitType::Millions);
presentation->Save(u"Result.pptx", SaveFormat::Pptx);
FAQ
Come impostare il valore al quale un asse incrocia l’altro (incrocio dell’asse)?
Utilizza set_CrossType per selezionare il comportamento di incrocio. Per specificare un valore numerico di incrocio, usa set_CrossAt. Queste impostazioni ti consentono di spostare l’incrocio dell’asse a una linea di base adeguata.
Come posso posizionare le etichette dei segni rispetto all’asse?
Utilizza set_TickLabelPosition con un valore da TickLabelPositionType: Low, High, NextTo o None. Per controllare i segni di divisione stessi, usa set_MajorTickMark o set_MinorTickMark; questi sono separati dal posizionamento delle etichette.