Diagramtengelyek testreszabása prezentációkban C++ használatával
Áttekintés
Ez a cikk bemutatja, hogyan lehet testreszabni a diagramok tengelyeit az Aspose.Slides for C++ segítségével. Tárgyalja a számított tengelyértékeket, a diagram sorainak és oszlopainak megcserélését, a tengely láthatóságát, a kategória címke és jelölő intervallumait, a dátumkategóriákat és formázást, a cím forgatását, a tengely pozicionálását és a megjelenítési egységeket.
A függőleges tengely maximális értékeinek lekérése diagramokban
Hozzon létre egy Prezentáció és adjon hozzá egy alapértelmezett adatokkal rendelkező területdiagramot. Hívja meg a ValidateChartLayout metódust a számított tengelyértékek lekérése előtt, hogy a diagramelrendezés naprakész legyen.
Olvassa a get_ActualMaxValue és a get_ActualMinValue értékeket a tengely határainak meghatározásához, valamint a get_ActualMajorUnit és a get_ActualMinorUnit értékeket a jelölő intervallumokhoz. A get_ActualMajorUnitScale és a get_ActualMinorUnitScale időegység skálákat ad vissza, amelyek a dátumtengelyeknél relevánsak. A példa ezeket az értékeket helyi változókba menti, majd elmenti a diagramot.
#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);
Az adatok cseréje tengelyek között
Használja a SwitchRowColumn metódust a sorozatok és kategóriák szerepének felcseréléséhez a diagram adatain belül. Minden korábbi kategória sorozattá, minden korábbi sorozat pedig kategóriává válik. Ez módosítja az adatcsoportosítást, de nem cseréli fel a vízszintes és függőleges tengelyeket. A példa a SetRange metódust használja az alapértelmezett adatok a Sheet1!A1:D5 tartományra kötéséhez (beleértve a fejlécsort és a kategóriaoszlopot), mielőtt a sorokat és oszlopokat megcserélné. Egy négy sorozatos és három kategóriás diagramot ment el.
#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);
A függőleges tengely letiltása vonaldiagramokhoz
A függőleges tengely elrejtéséhez állítsa a set_IsVisible metódust false‑ra. A példa egy alapértelmezett adatokkal rendelkező vonaldiagramot hoz létre, majd elmenti a függőleges tengely rejtett állapotával.
#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);
A vízszintes tengely letiltása vonaldiagramokhoz
A vízszintes tengely elrejtéséhez állítsa a set_IsVisible metódust false‑ra. A példa egy alapértelmezett adatokkal rendelkező vonaldiagramot hoz létre, majd elmenti a vízszintes tengely rejtett állapotával.
#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);
Kategóriatengely módosítása
Használja a set_CategoryAxisType metódust dátum vagy szöveges kategóriatengely kiválasztásához. Ez a példa a ExistingChart.pptx fájlt igényli, amelynek első diáján az első alakzat egy diagram, és a kategóriacellák numerikus Excel dátumértékeket tartalmaznak. A vízszintes tengelyt dátumtengellyé változtatja. A set_IsAutomaticMajorUnit false, a set_MajorUnit 1, valamint a set_MajorUnitScale havival beállítása havi főjelöléseket helyez el.
#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);
Kategóriatengely címkeintervallumainak vezérlése
Ha a diagram sok kategóriát tartalmaz, csökkentheti a megjelenített tengelycímkék számát a kategóriák vagy adatpontok eltávolítása nélkül. Állítsa a set_IsAutomaticTickLabelSpacing metódust false‑ra, majd a set_TickLabelSpacing metódussal adja meg a kívánt kategóriaintervallumot. Szöveges kategóriák normál sorrendjében a számlálás az első kategóriától indul:
| Intervallum | Példában megjelenített címkék |
|---|---|
1 |
Kategória 1, Kategória 2, Kategória 3, … Kategória 24 |
2 |
Kategória 1, Kategória 3, Kategória 5, … Kategória 23 |
3 |
Kategória 1, Kategória 4, Kategória 7, … Kategória 22 |
A 3 intervallum minden harmadik címkét jelenít meg, két címke marad rejtve a megjelenített címkék között. Ez nem távolítja el a megfelelő oszlopokat. Az automatikus térköz a rendelkezésre álló hely alapján választ intervallumot; nem feltétlenül jeleníti meg az összes címkét.
A jelölőpontoknak külön vezérlése van. Állítsa a set_IsAutomaticTickMarksSpacing metódust false‑ra, majd a set_TickMarksSpacing metódussal adja meg intervallumukat. Például a 1 minden kategóriaintervallumban elhelyez egy jelölőpontot, míg a címkék csak minden harmadik kategórián jelennek meg. Használja a set_MajorTickMark metódust látható stílussal, hogy lássa az eredményt. Bármelyik automatikus‑térköz tulajdonság true‑ra állítása lehetővé teszi, hogy a diagram újra ezt az intervallumot válassza.
Az alábbi önálló példa 24 kategóriát és egy sorozatot hoz létre, majd három diát ment el a CategoryAxisIntervals.pptx fájlba: automatikus térköz, manuális címkeintervallum független jelölőpontokkal, és helyreállított automatikus térköz. A két másolat megtartja az eredeti diagramadatokat. Bemeneti prezentáció nem szükséges. A vízszintes címkeszöveg könnyen látható különbséget mutat a sűrűségben.
#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);
// Dia 2: minden harmadik címkét mutasson, de minden kategóriához maradjon egy jelölőpont.
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);
// Dia 3: engedje, hogy a diagram újra a két intervallumot válassza.
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);
Automatikus térköz (dia 1): Ebben a megjelenítésben minden második kategóriacímke jelenik meg, és két sorba törik. Az automatikus eredmény változhat a diagram méretétől, betűtípusaival és a renderertől függően.

Manuális térköz (dia 2): Minden harmadik címke jelenik meg egy sorban, míg a jelölőpontok minden kategóriaintervallumban megmaradnak. Az összes 24 oszlop, beleértve a címke nélküli oszlopokat is, ugyanazokkal az értékekkel látható. A 3. dia helyreállítja a fenti automatikus megjelenést.

A megfelelő tengely és intervallum kiválasztása
Használja ezt a kategóriaszám‑intervallumot szöveges kategóriatengelyhez, például oszlop-, vonal-, terület- vagy sávdiagram kategóriatengelyéhez. Oszlopdiagram esetén ez a vízszintes tengely. Vízszintes sávdiagram esetén a kategóriatengely függőleges, ezért alkalmazza ezeket a beállításokat a get_VerticalAxis metódusra. A jelölőpont-térköz alkalmazható sorozat tengelyre is azokban a diagramokban, ahol van ilyen.
Ne használja a kategóriacímke‑térközt a numerikus értéktengely skálájának beállítására. Értéktengelyen a set_MajorUnit egy értékbeli különbséget határoz meg: például a 10 főegység 0, 10, 20 stb. jelölőket eredményez, ha a tengely a nullánál kezdődik. A 3 kategóriacímke‑intervallum a kategóriahelyeket számolja, függetlenül az adatértékektől. Szórt és buborék diagramok értéktengelyt használnak, nem szöveges kategóriatengelyt. Dátumtengelyhez használja a Change a Category Axis szakaszban leírt időalapú főegységeket és skálákat.
A kategóriatengely értékeinek dátumformátumának beállítása
A példa az alapértelmezett diagramadatokat négy éves értékkel helyettesíti. A dátumok OLE Automation sorozatszámként vannak tárolva az első munkalapon (index 0). Használja a set_CategoryAxisType metódust dátumtengely kiválasztásához, kapcsolja ki a forrásra hivatkozó formázást a set_IsNumberFormatLinkedToSource metódussal, és állítsa be a yyyy formátumot a set_NumberFormat metódussal, hogy a kategóriacímkék a négyjegyű éveket a cellaformázástól függetlenül jelenítsék meg.
#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);
A diagramtengely címének forgásszögének beállítása
Engedélyezze a függőleges tengely címét a set_HasTitle metódussal, adja meg a cím szövegét, és használja a set_RotationAngle metódust a cím elforgatásához. A szög fokban van megadva; ez a példa egy oszlopdiagramot ment el, amelynek értéktengely címe 90 fokra van elforgatva.
#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);
A tengely pozíciójának beállítása kategória vagy értéktengelyen
Használja a set_AxisBetweenCategories metódust annak szabályozására, hogy az értéktengely a kategóriatengely között vagy a kategóriajelölőnél keresztezi-e. Ez a tulajdonság a kategóriatengelyekre vonatkozik. A példa true‑ra állítja a vízszintes kategóriatengelyen egy oszlopdiagram esetén, és elmenti az eredményt.
#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);
A megjelenítési egység beállítása diagram értéktengelyen
Használja a set_DisplayUnit metódust a címke skálázására egy értéktengelyen anélkül, hogy az underlying adatot módosítaná. A DisplayUnitType Millions‑re állításával a 60 000 000 érték 60‑ként jelenik meg. A példa egy oszlopdiagramot hoz létre, és a függőleges tengelyen alkalmazza a milliós megjelenítési egységet.
#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);
GYIK
Hogyan állíthatom be azt az értéket, ahol egy tengely áthalad a másik (tengelykereszt) pontján?
Használja a set_CrossType metódust a keresztelési viselkedés kiválasztásához. Numerikus keresztelési érték megadásához használja a set_CrossAt metódust. Ezek a beállítások lehetővé teszik a tengelykereszt elhelyezését egy megfelelő alapvonalra.
Hogyan helyezhetem el a jelölőcímkéket a tengelyhez viszonyítva?
Használja a set_TickLabelPosition metódust a TickLabelPositionType egyik értékével: Low, High, NextTo vagy None. A jelölőpontok szabályozásához használja a set_MajorTickMark vagy a set_MinorTickMark metódust; ezek különállóak a címke‑pozicionálástól.