Hantera diagramdataserier i presentationer med C++

Översikt

Denna artikel beskriver rollen för ChartSeries i Aspose.Slides, med fokus på hur data struktureras och visualiseras i presentationer. Dessa objekt tillhandahåller de grundläggande elementen som definierar individuella uppsättningar av datapunkter, kategorier och utseendeparametrar i ett diagram. Genom att arbeta med ChartSeries, kan utvecklare sömlöst integrera underliggande datakällor och upprätthålla full kontroll över hur information visas, vilket resulterar i dynamiska, datadrivna presentationer som tydligt förmedlar insikter och analyser.

En serie är en rad eller kolumn med siffror som plottas i ett diagram.

chart-series-powerpoint

Ange överlappning för dataserier

Med metoden IChartSeries::get_Overlap() kan du ange hur mycket staplar och kolumner ska överlappa i ett 2D-diagram (intervallet: -100 till 100). Denna egenskap gäller för alla serier i den överordnade seriegruppen: det är en projektion av den motsvarande gruppens egenskap.

Använd metoden get_ParentSeriesGroup()::set_Overlap() för att ange ditt föredragna värde för Overlap.

  1. Skapa en instans av klassen Presentation.
  2. Lägg till ett grupperat kolumndiagram på en bild.
  3. Få åtkomst till den första diagramserien.
  4. Hämta diagramseriens ParentSeriesGroup och ange ditt föredragna överlappningsvärde för serien.
  5. Skriv den modifierade presentationen till en PPTX-fil.

Denna C++-kod visar hur du ställer in överlappning för en diagramserie:

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

// Lägger till diagram
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)
{
    // Ställer in seriernas överlappning
    series->idx_get(0)->get_ParentSeriesGroup()->set_Overlap(-30);
}

// Skriver presentationsfilen till disk
presentation->Save(u"SetChartSeriesOverlap_out.pptx", SaveFormat::Pptx);

Ändra färg på dataserie

Aspose.Slides för C++ låter dig ändra en seriefärg på följande sätt:

  1. Skapa en instans av klassen Presentation.
  2. Lägg till ett diagram på bilden.
  3. Hämta den serie vars färg du vill ändra.
  4. Ange önskad fyllningstyp och fyllningsfärg.
  5. Spara den modifierade presentationen.

Denna C++-kod visar hur du ändrar en seriefärg:

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);

Ändra färg på en kategori i dataserie

Aspose.Slides för C++ låter dig ändra en seriekategori vars färg på följande sätt:

  1. Skapa en instans av klassen Presentation.
  2. Lägg till ett diagram på bilden.
  3. Hämta den seriekategori vars färg du vill ändra.
  4. Ange önskad fyllningstyp och fyllningsfärg.
  5. Spara den modifierade presentationen.

Denna C++-kod visar hur du ändrar färg på en seriekategori:

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);

Ändra namn på dataserie

Som standard är legendnamnen för ett diagram innehållet i cellerna ovanför varje kolumn eller rad med data.

I vårt exempel (exempelbild),

  • kolumnerna är Series 1, Series 2, och Series 3;
  • raderna är Category 1, Category 2, Category 3, och Category 4.

Aspose.Slides för C++ låter dig uppdatera eller ändra ett serienamn i dess diagramdata och legend.

Denna C++-kod visar hur du ändrar ett serienamn i dess diagramdata 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);

Denna C++-kod visar hur du ändrar ett serienamn i dess legend via 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"));

Ange fyllningsfärg för dataserie

Aspose.Slides för C++ låter dig ange den automatiska fyllningsfärgen för diagramserier i ett plotområde på följande sätt:

  1. Skapa en instans av klassen Presentation.
  2. Hämta en bilds referens via dess index.
  3. Lägg till ett diagram med standarddata baserat på din föredragna typ (i exemplet nedan använde vi ChartType::ClusteredColumn).
  4. Hämta diagramserien och sätt fyllningsfärgen till Automatic.
  5. Spara presentationen till en PPTX-fil.

Denna C++-kod visar hur du sätter den automatiska fyllningsfärgen för en diagramserie:

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

// Skapar ett grupperat kolumndiagram
auto chart = shapes->AddChart(ChartType::ClusteredColumn, 100.0f, 50.0f, 600.0f, 400.0f);

// Ställer in seriernas fyllningsformat till automatiskt
for (const auto& series : chart->get_ChartData()->get_Series())
{
    series->GetAutomaticSeriesColor();
}

// Skriver presentationsfilen till disk
presentation->Save(u"AutoFillSeries_out.pptx", SaveFormat::Pptx);

Ställ in inverterade fyllningsfärger för dataserier

Aspose.Slides låter dig ange inverterad fyllningsfärg för diagramserier i ett plotområde på följande sätt:

  1. Skapa en instans av klassen Presentation.
  2. Hämta en bilds referens via dess index.
  3. Lägg till ett diagram med standarddata baserat på din föredragna typ (i exemplet nedan använde vi ChartType::ClusteredColumn).
  4. Hämta diagramserien och sätt fyllningsfärgen till invert.
  5. Spara presentationen till en PPTX-fil.

Denna C++-kod demonstrerar operationen:

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);

Ställ in inverterad fyllningsfärg för en diagramserie

Aspose.Slides låter dig ställa in inversioner via metoderna IChartDataPoint::set_InvertIfNegative() och ChartDataPoint.set_InvertIfNegative(). När en inversion är inställd med metoderna ändrar datapunkten sina färger när den får ett negativt värde.

Denna C++-kod demonstrerar operationen:

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);

Rensa specifika datapunktsvärden

Aspose.Slides för C++ låter dig rensa DataPoints‑data för en specifik diagramserie på följande sätt:

  1. Skapa en instans av klassen Presentation.
  2. Hämta referensen till en bild via dess index.
  3. Hämta referensen till ett diagram via dess index.
  4. Iterera genom alla diagrammets DataPoints och sätt XValue och YValue till null.
  5. Rensa alla DataPoints för specifik diagramserie.
  6. Skriv den modifierade presentationen till en PPTX-fil.

Denna C++-kod demonstrerar operationen:

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);

Ange gapbredd för dataserie

Aspose.Slides för C++ låter dig ange en seriers Gap Width via metoden set_GapWidth() på följande sätt:

  1. Skapa en instans av klassen Presentation.
  2. Få åtkomst till den första bilden.
  3. Lägg till ett diagram med standarddata.
  4. Hämta någon diagramserie.
  5. Ange egenskapen GapWidth.
  6. Skriv den modifierade presentationen till en PPTX-fil.

Denna C++-kod visar hur du anger en seriers Gap Width:

// Skapar tom presentation 
auto presentation = System::MakeObject<Presentation>();

// Hämtar presentationens första bild
auto slide = presentation->get_Slides()->idx_get(0);

// Lägger till ett diagram med standarddata
auto chart = slide->get_Shapes()->AddChart(ChartType::StackedColumn, 0.0f, 0.0f, 500.0f, 500.0f);

// Ställer in index för diagramdatasheet
int32_t worksheetIndex = 0;

// Hämtar diagramdatas arbetsblad
auto workbook = chart->get_ChartData()->get_ChartDataWorkbook();

// Lägger till serier
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());

// Lägger till kategorier
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")));

// Hämtar den andra diagramserien
auto series = chart->get_ChartData()->get_Series()->idx_get(1);
auto dataPoints = series->get_DataPoints();

// Fyller seriedata
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)));

// Ställer in GapWidth‑värde
series->get_ParentSeriesGroup()->set_GapWidth(50);

// Sparar presentation till disk
presentation->Save(u"GapWidth_out.pptx", SaveFormat::Pptx);

FAQ

Finns det någon gräns för hur många serier ett enskilt diagram kan innehålla?

Aspose.Slides har ingen fast takgräns för antalet serier du lägger till. Den praktiska takgränsen bestäms av diagrammets läsbarhet och av det minne som finns tillgängligt för din applikation.

Vad händer om kolumnerna inom en grupp är för nära varandra eller för långt ifrån varandra?

Justera gapbreddsinställningen för den serien (eller dess överordnade seriegrupp). Att öka värdet breddar avståndet mellan kolumnerna, medan ett lägre värde för minskar avståndet.