Gestire le serie di dati dei grafici nelle presentazioni usando C++

Panoramica

Questo articolo descrive il ruolo di ChartSeries in Aspose.Slides, concentrandosi su come i dati sono strutturati e visualizzati nelle presentazioni. Questi oggetti forniscono gli elementi di base che definiscono insiemi individuali di punti dati, categorie e parametri di aspetto in un grafico. Lavorando con ChartSeries, gli sviluppatori possono integrare senza problemi le fonti dati sottostanti e mantenere il pieno controllo su come le informazioni vengono visualizzate, ottenendo presentazioni dinamiche e guidate dai dati che comunicano chiaramente intuizioni e analisi.

Una serie è una riga o una colonna di numeri tracciata in un grafico.

chart-series-powerpoint

Impostare la sovrapposizione della serie di dati

Con il metodo IChartSeries::get_Overlap() è possibile specificare quanto le barre e le colonne devono sovrapporsi in un grafico 2D (intervallo: -100 a 100). Questa proprietà si applica a tutte le serie del gruppo di serie padre: è una proiezione della proprietà di gruppo appropriata.

Utilizzare il metodo get_ParentSeriesGroup()::set_Overlap() per impostare il valore desiderato per Overlap.

  1. Creare un’istanza della classe Presentation.
  2. Aggiungere un grafico a colonne raggruppate su una diapositiva.
  3. Accedere alla prima serie del grafico.
  4. Accedere a ParentSeriesGroup della serie e impostare il valore di sovrapposizione desiderato.
  5. Scrivere la presentazione modificata in un file PPTX.

Questo codice C++ mostra come impostare la sovrapposizione per una serie di grafico:

auto presentation = System::MakeObject<Presentation>();
auto shapes = presentation->get_Slides()->idx_get(0)->get_Shapes();

// Adds chart
auto chart = shapes->AddChart(ChartType::ClusteredColumn, 50.0f, 50.0f, 600.0f, 400.0f, true);
auto series = chart->get_ChartData()->get_Series();
if (series->idx_get(0)->get_Overlap() == 0)
{
    // Imposta la sovrapposizione della serie
    series->idx_get(0)->get_ParentSeriesGroup()->set_Overlap(-30);
}

// Writes the presentation file to disk
presentation->Save(u"SetChartSeriesOverlap_out.pptx", SaveFormat::Pptx);

Modificare il colore della serie di dati

Aspose.Slides per C++ consente di modificare il colore di una serie in questo modo:

  1. Creare un’istanza della classe Presentation.
  2. Aggiungere un grafico alla diapositiva.
  3. Accedere alla serie di cui si desidera cambiare il colore.
  4. Impostare il tipo di riempimento e il colore di riempimento desiderati.
  5. Salvare la presentazione modificata.

Questo codice C++ mostra come modificare il colore di una serie:

auto pres = System::MakeObject<Presentation>(u"test.pptx");
auto shapes = pres->get_Slides()->idx_get(0)->get_Shapes();

auto chart = shapes->AddChart(ChartType::Pie, 50.0f, 50.0f, 600.0f, 400.0f);
auto point = chart->get_ChartData()->get_Series()->idx_get(0)->get_DataPoints()->idx_get(1);

point->set_Explosion(30);
point->get_Format()->get_Fill()->set_FillType(FillType::Solid);
point->get_Format()->get_Fill()->get_SolidFillColor()->set_Color(Color::get_Blue());

pres->Save(u"output.pptx", SaveFormat::Pptx);

Modificare il colore di una categoria della serie di dati

Aspose.Slides per C++ consente di modificare il colore di una categoria di serie in questo modo:

  1. Creare un’istanza della classe Presentation.
  2. Aggiungere un grafico alla diapositiva.
  3. Accedere alla categoria della serie di cui si desidera cambiare il colore.
  4. Impostare il tipo di riempimento e il colore di riempimento desiderati.
  5. Salvare la presentazione modificata.

Questo codice C++ mostra come modificare il colore di una categoria della serie:

auto pres = System::MakeObject<Presentation>();
auto shapes = pres->get_Slides()->idx_get(0)->get_Shapes();
auto chart = shapes->AddChart(ChartType::ClusteredColumn, 50.0f, 50.0f, 600.0f, 400.0f);
auto point = chart->get_ChartData()->get_Series()->idx_get(0)->get_DataPoints()->idx_get(0);

point->get_Format()->get_Fill()->set_FillType(FillType::Solid);
point->get_Format()->get_Fill()->get_SolidFillColor()->set_Color(Color::get_Blue());

pres->Save(u"output.pptx", SaveFormat::Pptx);

Modificare il nome della serie di dati

Per impostazione predefinita, i nomi della legenda di un grafico sono i contenuti delle celle sopra ogni colonna o riga di dati.

Nel nostro esempio (immagine di esempio),

  • le colonne sono Series 1, Series 2, e Series 3;
  • le righe sono Category 1, Category 2, Category 3, e Category 4.

Aspose.Slides per C++ consente di aggiornare o modificare il nome di una serie nei dati del grafico e nella legenda.

Questo codice C++ mostra come modificare il nome di una serie nei dati del grafico ChartDataWorkbook:

auto pres = System::MakeObject<Presentation>();

auto shapes = pres->get_Slides()->idx_get(0)->get_Shapes();
auto chart = shapes->AddChart(ChartType::Column3D, 50.0f, 50.0f, 600.0f, 400.0f, true);

auto seriesCell = chart->get_ChartData()->get_ChartDataWorkbook()->GetCell(0, 0, 1);
seriesCell->set_Value(ObjectExt::Box<String>(u"New name"));

pres->Save(u"pres.pptx", SaveFormat::Pptx);

Questo codice C++ mostra come modificare il nome di una serie nella legenda tramite Series:

auto pres = System::MakeObject<Presentation>();
auto shapes = pres->get_Slides()->idx_get(0)->get_Shapes();

auto chart = shapes->AddChart(ChartType::Column3D, 50.0f, 50.0f, 600.0f, 400.0f, true);
auto series = chart->get_ChartData()->get_Series()->idx_get(0);

auto name = series->get_Name();
name->get_AsCells()->idx_get(0)->set_Value(ObjectExt::Box<String>(u"New name"));

Impostare il colore di riempimento della serie di dati

Aspose.Slides per C++ consente di impostare il colore di riempimento automatico per le serie di grafico all’interno dell’area di tracciamento in questo modo:

  1. Creare un’istanza della classe Presentation.
  2. Ottenere il riferimento di una diapositiva tramite il suo indice.
  3. Aggiungere un grafico con dati predefiniti basato sul tipo desiderato (nell’esempio sotto, abbiamo usato ChartType::ClusteredColumn).
  4. Accedere alla serie del grafico e impostare il colore di riempimento su Automatic.
  5. Salvare la presentazione in un file PPTX.

Questo codice C++ mostra come impostare il colore di riempimento automatico per una serie di grafico:

auto presentation = System::MakeObject<Presentation>();
auto shapes = presentation->get_Slides()->idx_get(0)->get_Shapes();

// Crea un grafico a colonne raggruppate
auto chart = shapes->AddChart(ChartType::ClusteredColumn, 100.0f, 50.0f, 600.0f, 400.0f);

// Imposta il formato di riempimento della serie su automatico
for (const auto& series : chart->get_ChartData()->get_Series())
{
    series->GetAutomaticSeriesColor();
}

// Scrive il file della presentazione su disco
presentation->Save(u"AutoFillSeries_out.pptx", SaveFormat::Pptx);

Impostare la serie di dati con inversione dei colori di riempimento

Aspose.Slides consente di impostare l’inversione del colore di riempimento per le serie di grafico all’interno dell’area di tracciamento in questo modo:

  1. Creare un’istanza della classe Presentation.
  2. Ottenere il riferimento di una diapositiva tramite il suo indice.
  3. Aggiungere un grafico con dati predefiniti basato sul tipo desiderato (nell’esempio sotto, abbiamo usato ChartType::ClusteredColumn).
  4. Accedere alla serie del grafico e impostare il colore di riempimento su invert.
  5. Salvare la presentazione in un file PPTX.

Questo codice C++ dimostra l’operazione:

Color inverColor = Color::get_Red();
    
auto pres = System::MakeObject<Presentation>();
auto shapes = pres->get_Slides()->idx_get(0)->get_Shapes();
auto chart = shapes->AddChart(ChartType::ClusteredColumn, 100.0f, 100.0f, 400.0f, 300.0f);

auto workBook = chart->get_ChartData()->get_ChartDataWorkbook();
auto chartData = chart->get_ChartData();

chartData->get_Series()->Clear();
chartData->get_Categories()->Clear();

// Adds new series and categories
chartData->get_Series()->Add(workBook->GetCell(0, 0, 1, ObjectExt::Box<String>(u"Series 1")), chart->get_Type());
chartData->get_Categories()->Add(workBook->GetCell(0, 1, 0, ObjectExt::Box<String>(u"Category 1")));
chartData->get_Categories()->Add(workBook->GetCell(0, 2, 0, ObjectExt::Box<String>(u"Category 2")));
chartData->get_Categories()->Add(workBook->GetCell(0, 3, 0, ObjectExt::Box<String>(u"Category 3")));

// Takes the first chart series and populates its series data.
auto series = chartData->get_Series()->idx_get(0);
series->get_DataPoints()->AddDataPointForBarSeries(workBook->GetCell(0, 1, 1, ObjectExt::Box<int32_t>(-20)));
series->get_DataPoints()->AddDataPointForBarSeries(workBook->GetCell(0, 2, 1, ObjectExt::Box<int32_t>(50)));
series->get_DataPoints()->AddDataPointForBarSeries(workBook->GetCell(0, 3, 1, ObjectExt::Box<int32_t>(-30)));
Color seriesColor = series->GetAutomaticSeriesColor();
series->set_InvertIfNegative(true);
series->get_Format()->get_Fill()->set_FillType(FillType::Solid);
series->get_Format()->get_Fill()->get_SolidFillColor()->set_Color(seriesColor);
series->get_InvertedSolidFillColor()->set_Color(inverColor);
pres->Save(u"SetInvertFillColorChart_out.pptx", SaveFormat::Pptx);

Impostare l’inversione del colore di riempimento per una serie di grafico

Aspose.Slides consente di impostare l’inversione tramite i metodi IChartDataPoint::set_InvertIfNegative() e ChartDataPoint.set_InvertIfNegative(). Quando l’inversione è impostata con questi metodi, il punto dati inverte i colori quando riceve un valore negativo.

Questo codice C++ dimostra l’operazione:

auto pres = System::MakeObject<Presentation>();
auto shapes = pres->get_Slides()->idx_get(0)->get_Shapes();
auto chart = shapes->AddChart(ChartType::ClusteredColumn, 50.0f, 50.0f, 600.0f, 400.0f, true);
auto series = chart->get_ChartData()->get_Series();
chart->get_ChartData()->get_Series()->Clear();

auto workBook = chart->get_ChartData()->get_ChartDataWorkbook();
series->Add(workBook->GetCell(0, u"B1"), chart->get_Type());
auto dataPoints = series->idx_get(0)->get_DataPoints();
dataPoints->AddDataPointForBarSeries(workBook->GetCell(0, u"B2", ObjectExt::Box<int32_t>(-5)));
dataPoints->AddDataPointForBarSeries(workBook->GetCell(0, u"B3", ObjectExt::Box<int32_t>(3)));
dataPoints->AddDataPointForBarSeries(workBook->GetCell(0, u"B4", ObjectExt::Box<int32_t>(-2)));
dataPoints->AddDataPointForBarSeries(workBook->GetCell(0, u"B5", ObjectExt::Box<int32_t>(1)));

series->idx_get(0)->set_InvertIfNegative(false);

series->idx_get(0)->get_DataPoints()->idx_get(2)->set_InvertIfNegative(true);

pres->Save(u"out.pptx", SaveFormat::Pptx);

Cancella i valori di punti dati specifici

Aspose.Slides per C++ consente di cancellare i dati DataPoints per una serie di grafico specifica in questo modo:

  1. Creare un’istanza della classe Presentation.
  2. Ottenere il riferimento di una diapositiva tramite il suo indice.
  3. Ottenere il riferimento di un grafico tramite il suo indice.
  4. Iterare tutti i DataPoints del grafico e impostare XValue e YValue su null.
  5. Cancellare tutti i DataPoints per la serie di grafico specifica.
  6. Scrivere la presentazione modificata in un file PPTX.

Questo codice C++ dimostra l’operazione:

auto pres = System::MakeObject<Presentation>(u"TestChart.pptx");
auto sl = pres->get_Slides()->idx_get(0);

auto chart = System::ExplicitCast<IChart>(sl->get_Shapes()->idx_get(0));
auto dataPoints = chart->get_ChartData()->get_Series()->idx_get(0)->get_DataPoints();

for (const auto& dataPoint : dataPoints)
{
    dataPoint->get_XValue()->get_AsCell()->set_Value(nullptr);
    dataPoint->get_YValue()->get_AsCell()->set_Value(nullptr);
}

dataPoints->Clear();

pres->Save(u"ClearSpecificChartSeriesDataPointsData.pptx", SaveFormat::Pptx);

Impostare la larghezza dello spazio tra le serie di dati

Aspose.Slides per C++ consente di impostare la larghezza dello spazio (GapWidth) di una serie tramite il metodo set_GapWidth() in questo modo:

  1. Creare un’istanza della classe Presentation.
  2. Accedere alla prima diapositiva.
  3. Aggiungere un grafico con dati predefiniti.
  4. Accedere a una qualsiasi serie del grafico.
  5. Impostare la proprietà GapWidth.
  6. Scrivere la presentazione modificata in un file PPTX.

Questo codice C++ mostra come impostare la larghezza dello spazio per una serie:

// Crea una presentazione vuota 
// Accede alla prima diapositiva della presentazione
// Aggiunge un grafico con dati predefiniti
// Imposta l'indice del foglio dati del grafico
// Ottiene il foglio dati del grafico
// Aggiunge le serie
// Aggiunge le categorie
// Prende la seconda serie del grafico
// Popola i dati della serie
// Imposta il valore di GapWidth
// Salva la presentazione su disco
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slides()->idx_get(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::StackedColumn, 0.0f, 0.0f, 500.0f, 500.0f);
int32_t worksheetIndex = 0;
auto workbook = chart->get_ChartData()->get_ChartDataWorkbook();
chart->get_ChartData()->get_Series()->Add(workbook->GetCell(worksheetIndex, 0, 1, ObjectExt::Box<String>(u"Series 1")), chart->get_Type());
chart->get_ChartData()->get_Series()->Add(workbook->GetCell(worksheetIndex, 0, 2, ObjectExt::Box<String>(u"Series 2")), chart->get_Type());
chart->get_ChartData()->get_Categories()->Add(workbook->GetCell(worksheetIndex, 1, 0, ObjectExt::Box<String>(u"Category 1")));
chart->get_ChartData()->get_Categories()->Add(workbook->GetCell(worksheetIndex, 2, 0, ObjectExt::Box<String>(u"Category 2")));
chart->get_ChartData()->get_Categories()->Add(workbook->GetCell(worksheetIndex, 3, 0, ObjectExt::Box<String>(u"Category 3")));
auto series = chart->get_ChartData()->get_Series()->idx_get(1);
auto dataPoints = series->get_DataPoints();
dataPoints->AddDataPointForBarSeries(workbook->GetCell(worksheetIndex, 1, 1, ObjectExt::Box<int32_t>(20)));
dataPoints->AddDataPointForBarSeries(workbook->GetCell(worksheetIndex, 2, 1, ObjectExt::Box<int32_t>(50)));
dataPoints->AddDataPointForBarSeries(workbook->GetCell(worksheetIndex, 3, 1, ObjectExt::Box<int32_t>(30)));
dataPoints->AddDataPointForBarSeries(workbook->GetCell(worksheetIndex, 1, 2, ObjectExt::Box<int32_t>(30)));
dataPoints->AddDataPointForBarSeries(workbook->GetCell(worksheetIndex, 2, 2, ObjectExt::Box<int32_t>(10)));
dataPoints->AddDataPointForBarSeries(workbook->GetCell(worksheetIndex, 3, 2, ObjectExt::Box<int32_t>(60)));
series->get_ParentSeriesGroup()->set_GapWidth(50);
presentation->Save(u"GapWidth_out.pptx", SaveFormat::Pptx);

FAQ

Esiste un limite al numero di serie che un singolo grafico può contenere?

Aspose.Slides non impone un limite fisso al numero di serie aggiunte. Il limite pratico è determinato dalla leggibilità del grafico e dalla memoria disponibile per l’applicazione.

Cosa succede se le colonne all’interno di un gruppo sono troppo vicine o troppo distanti?

Regolare l’impostazione della larghezza dello spazio per quella serie (o per il suo gruppo di serie padre). Aumentare il valore amplia lo spazio tra le colonne, mentre diminuirlo le avvicina.