Beheer diagramgegevenslabels in presentaties met С++

Inleiding

Gegevenslabels op een diagram tonen details over de gegevensreeksen van het diagram of individuele gegevenspunten. Ze stellen lezers in staat om snel gegevensreeksen te identificeren en maken diagrammen bovendien beter begrijpelijk.

Precisie van gegevens instellen in diagramlabels

Deze C++‑code laat zien hoe u de precisie van gegevens instelt in een diagramlabel:

	// Het pad naar de documentmap
	const String outPath = u"../out/SettingPrecisionOfDataLabel_out.pptx";

	// Instantieert een Presentation‑klasse die een PPTX‑bestand representeert
	SharedPtr<Presentation> pres = MakeObject<Presentation>();

	// Haal de eerste dia op
	SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);

	// Voegt een diagram toe met standaardgegevens
	SharedPtr<IChart> chart = slide->get_Shapes()->AddChart(Aspose::Slides::Charts::ChartType::Line, 0, 0, 500, 500);

	// Stelt getalnotatie voor de reeks in
	chart->set_HasDataTable( true);
	chart->get_ChartData()->get_Series()->idx_get(0)->set_NumberFormatOfValues (u"#,##0.00");

	// Schrijft het presentatiebestand naar schijf
	pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);

Percentages weergeven als labels

Aspose.Slides for C++ maakt het mogelijk om percentage‑labels in weergegeven diagrammen in te stellen. Deze C++‑code demonstreert de werking:

	// Het pad naar de documentmap
	const String outPath = u"../out/DisplayPercentageAsLabels_out.pptx";

	// Maakt een instantie van de Presentation‑klasse
	System::SharedPtr<Presentation> presentation = System::MakeObject<Presentation>();

	System::SharedPtr<ISlide> slide = presentation->get_Slides()->idx_get(0);
	System::SharedPtr<IChart> chart = slide->get_Shapes()->AddChart(Aspose::Slides::Charts::ChartType::StackedColumn, 20, 20, 400, 400);
	System::SharedPtr<IChartSeries> series = chart->get_ChartData()->get_Series()->idx_get(0);
	System::SharedPtr<IChartCategory> cat;
	System::ArrayPtr<double> total_for_Cat = System::MakeObject<System::Array<double>>(chart->get_ChartData()->get_Categories()->get_Count(), 0);
	for (int32_t k = 0; k < chart->get_ChartData()->get_Categories()->get_Count(); k++)
	{
		cat = chart->get_ChartData()->get_Categories()->idx_get(k);

		for (int32_t i = 0; i < chart->get_ChartData()->get_Series()->get_Count(); i++)
		{
			total_for_Cat[k] = total_for_Cat[k] + System::Convert::ToDouble(chart->get_ChartData()->get_Series()->idx_get(i)->get_DataPoints()->idx_get(k)->get_Value()->get_Data());
		}
	}

	double dataPontPercent = 0.f;

	for (int32_t x = 0; x < chart->get_ChartData()->get_Series()->get_Count(); x++)
	{
		series = chart->get_ChartData()->get_Series()->idx_get(x);
		series->get_Labels()->get_DefaultDataLabelFormat()->set_ShowLegendKey(false);

		for (int32_t j = 0; j < series->get_DataPoints()->get_Count(); j++)
		{
			System::SharedPtr<IDataLabel> lbl = series->get_DataPoints()->idx_get(j)->get_Label();
			dataPontPercent = (System::Convert::ToDouble(series->get_DataPoints()->idx_get(j)->get_Value()->get_Data()) / total_for_Cat[j]) * 100;

			System::SharedPtr<IPortion> port = System::MakeObject<Portion>();
			port->set_Text(System::String::Format(u"{0:F2} %", dataPontPercent));
			port->get_PortionFormat()->set_FontHeight(8.f);
			lbl->get_TextFrameForOverriding()->set_Text(u"");
			System::SharedPtr<IParagraph> para = lbl->get_TextFrameForOverriding()->get_Paragraphs()->idx_get(0);
			para->get_Portions()->Add(port);

			lbl->get_DataLabelFormat()->set_ShowSeriesName(false);
			lbl->get_DataLabelFormat()->set_ShowPercentage(false);
			lbl->get_DataLabelFormat()->set_ShowLegendKey(false);
			lbl->get_DataLabelFormat()->set_ShowCategoryName(false);
			lbl->get_DataLabelFormat()->set_ShowBubbleSize(false);
		}
	}

	// Slaat de presentatie met het diagram op
	presentation->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);

Het procentteken instellen met diagramlabels

Deze C++‑code laat zien hoe u het procentteken instelt voor een diagramlabel:

	// Het pad naar de documentmap.
	const String outPath = u"../out/DataLabelsPercentageSign_out.pptx";

	// Maakt een instantie van de Presentation‑klasse
	SharedPtr<Presentation> pres = MakeObject<Presentation>();

	// Haalt een referentie naar een dia op via de index
	SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);

	// Maakt het PercentsStackedColumn‑diagram op een dia
	SharedPtr<IChart> chart = slide->get_Shapes()->AddChart(Aspose::Slides::Charts::ChartType::PercentsStackedColumn, 0, 0, 500, 500);

	// Stelt NumberFormatLinkedToSource in op false
	chart->get_Axes()->get_VerticalAxis()->set_IsNumberFormatLinkedToSource ( false);
	chart->get_Axes()->get_VerticalAxis()->set_NumberFormat(u"0.00%");


	// Stelt de index van het diagramgegevensblad in
	int defaultWorksheetIndex = 0;

	// Haalt het werkblad met diagramgegevens op
	SharedPtr<IChartDataWorkbook> fact = chart->get_ChartData()->get_ChartDataWorkbook();


	// Verwijdert de standaard gegenereerde reeks 
	chart->get_ChartData()->get_Series()->Clear();
	

	// Voegt een nieuwe reeks toe
	chart->get_ChartData()->get_Series()->Add(fact->GetCell(defaultWorksheetIndex, 0, 2, ObjectExt::Box<System::String>(u"Series 2")), chart->get_Type());


	// Neemt de eerste diagramreeks
	SharedPtr<IChartSeries> series=chart->get_ChartData()->get_Series()->Add(fact->GetCell(defaultWorksheetIndex, 0, 1, ObjectExt::Box<System::String>(u"Red")), chart->get_Type());
	// Vult de gegevens van de reeks
	series->get_DataPoints()->AddDataPointForBarSeries(fact->GetCell(defaultWorksheetIndex, 1, 1, ObjectExt::Box<double>(0.50)));
	series->get_DataPoints()->AddDataPointForBarSeries(fact->GetCell(defaultWorksheetIndex, 2, 1, ObjectExt::Box<double>(0.50)));
	series->get_DataPoints()->AddDataPointForBarSeries(fact->GetCell(defaultWorksheetIndex, 3, 1, ObjectExt::Box<double>(0.80)));
	series->get_DataPoints()->AddDataPointForBarSeries(fact->GetCell(defaultWorksheetIndex, 4, 1, ObjectExt::Box<double>(0.65)));

	// Stelt de vulkleur voor de reeks in
	series->get_Format()->get_Fill()->set_FillType(FillType::Solid);
	series->get_Format()->get_Fill()->get_SolidFillColor()->set_Color(System::Drawing::Color::get_Red());

	// Stelt LabelFormat‑eigenschappen in
	series->get_Labels()->get_DefaultDataLabelFormat()->set_ShowValue(true);
	series->get_Labels()->get_DefaultDataLabelFormat()->set_IsNumberFormatLinkedToSource ( false);
	series->get_Labels()->get_DefaultDataLabelFormat()->set_NumberFormat (u"0.0%");
	series->get_Labels()->get_DefaultDataLabelFormat()->get_TextFormat()->get_PortionFormat()->set_FontHeight ( 10);
	series->get_Labels()->get_DefaultDataLabelFormat()->get_TextFormat()->get_PortionFormat()->get_FillFormat()->set_FillType(FillType::Solid);
	series->get_Labels()->get_DefaultDataLabelFormat()->get_TextFormat()->get_PortionFormat()->get_FillFormat()->get_SolidFillColor()->set_Color(System::Drawing::Color::get_White());
	series->get_Labels()->get_DefaultDataLabelFormat()->set_ShowValue(true);

	// Neemt de tweede diagramreeks
	SharedPtr<IChartSeries> series2 = chart->get_ChartData()->get_Series()->Add(fact->GetCell(defaultWorksheetIndex, 0, 2, ObjectExt::Box<System::String>(u"Blues")), chart->get_Type());
	// Vult de gegevens van de reeks
	series2->get_DataPoints()->AddDataPointForBarSeries(fact->GetCell(defaultWorksheetIndex, 1, 2, ObjectExt::Box<double>(0.70)));
	series2->get_DataPoints()->AddDataPointForBarSeries(fact->GetCell(defaultWorksheetIndex, 2, 2, ObjectExt::Box<double>(0.50)));
	series2->get_DataPoints()->AddDataPointForBarSeries(fact->GetCell(defaultWorksheetIndex, 3, 2, ObjectExt::Box<double>(0.20)));
	series2->get_DataPoints()->AddDataPointForBarSeries(fact->GetCell(defaultWorksheetIndex, 4, 2, ObjectExt::Box<double>(0.35)));

	// Stelt de vulkleur voor de reeks in
	series2->get_Format()->get_Fill()->set_FillType(FillType::Solid);
	series2->get_Format()->get_Fill()->get_SolidFillColor()->set_Color(System::Drawing::Color::get_Blue());

	// Stelt LabelFormat‑eigenschappen in
	series2->get_Labels()->get_DefaultDataLabelFormat()->set_ShowValue(true);
	series2->get_Labels()->get_DefaultDataLabelFormat()->set_IsNumberFormatLinkedToSource(false);
	series2->get_Labels()->get_DefaultDataLabelFormat()->set_NumberFormat(u"0.0%");
	series2->get_Labels()->get_DefaultDataLabelFormat()->get_TextFormat()->get_PortionFormat()->set_FontHeight(10);
	series2->get_Labels()->get_DefaultDataLabelFormat()->get_TextFormat()->get_PortionFormat()->get_FillFormat()->set_FillType(FillType::Solid);
	series2->get_Labels()->get_DefaultDataLabelFormat()->get_TextFormat()->get_PortionFormat()->get_FillFormat()->get_SolidFillColor()->set_Color(System::Drawing::Color::get_White());
	series2->get_Labels()->get_DefaultDataLabelFormat()->set_ShowValue(true);

	// Schrijft het presentatiebestand naar schijf
	pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);

Labelafstand tot as instellen

Deze C++‑code laat zien hoe u de labelafstand tot een categorische as instelt wanneer u werkt met een diagram dat vanuit assen is getekend:

	// Het pad naar de documentmap
	const String outPath = u"../out/CategoryAxisLabelDistance_out.pptx";

	// Maakt een instantie van de Presentation-klasse
	SharedPtr<Presentation> pres = MakeObject<Presentation>();

	// Haalt een referentie naar de dia op
	SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);

	// Maakt een diagram op de dia
	SharedPtr<IChart> chart = slide->get_Shapes()->AddChart(Aspose::Slides::Charts::ChartType::ClusteredColumn, 0, 0, 500, 500);


	// Haalt de collectie van diagramreeksen op
	SharedPtr<IChartSeriesCollection> seriesCollection = chart->get_ChartData()->get_Series();

	// Stelt de labelafstand vanaf een as in
	chart->get_Axes()->get_HorizontalAxis()->set_LabelOffset ( 500);

	// Schrijft het presentatiebestand naar schijf
	pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);

Labelpositie aanpassen

Wanneer u een diagram maakt dat niet op een as steunt, zoals een cirkeldiagram, kunnen de gegevenslabels van het diagram te dicht bij de rand komen te liggen. In dat geval moet u de positie van het label aanpassen zodat de verbindingslijnen duidelijk worden weergegeven.

Deze C++‑code laat zien hoe u de labelpositie aanpast op een cirkeldiagram:

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

System::SharedPtr<IChart> chart = pres->get_Slide(0)->get_Shapes()->AddChart(ChartType::Pie, 50.0f, 50.0f, 200.0f, 200.0f);

System::SharedPtr<IChartSeriesCollection> series = chart->get_ChartData()->get_Series();
System::SharedPtr<IDataLabel> label = series->idx_get(0)->get_Label(0);
System::SharedPtr<IDataLabelFormat> dataLabelFormat = label->get_DataLabelFormat();

dataLabelFormat->set_ShowValue(true);
dataLabelFormat->set_Position(LegendDataLabelPosition::OutsideEnd);
label->set_X(0.71f);
label->set_Y(0.04f);

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

pie-chart-adjusted-label

FAQ

Hoe kan ik voorkomen dat gegevenslabels overlappen in dichtbevolkte diagrammen?

Combineer automatische labelplaatsing, verbindingslijnen en een verkleinde lettergrootte; verberg indien nodig enkele velden (bijvoorbeeld de categorie) of toon labels alleen voor extreme/sleutelpunten.

Hoe kan ik labels uitschakelen voor uitsluitend nul-, negatieve of lege waarden?

Filter gegevenspunten voordat u de labels inschakelt en schakel de weergave uit voor waarden van 0, negatieve waarden of ontbrekende waarden volgens een gedefinieerde regel.

Hoe kan ik een consistente labelstijl garanderen bij het exporteren naar PDF/afbeeldingen?

Stel expliciet lettertypen (familie, grootte) in en controleer dat het lettertype beschikbaar is aan de renderzijde om een fallback te vermijden.