Prezentációk diagramtengelyeinek testreszabása PHP használatával
Áttekintés
Ez a cikk bemutatja, hogyan lehet testreszabni a diagram tengelyeit az Aspose.Slides for PHP via Java használatával. Bemutatja a kiszámított tengelyértékeket, a diagram sorok és oszlopok cseréjét, a tengely láthatóságát, a kategória címke- és jelölő-intervalumokat, a dátumkategóriákat és formázást, a cím forgatását, a tengely elhelyezését és a megjelenítési egységeket.
A legnagyobb értékek lekérése a függőleges tengelyen a diagramokon
Hozzon létre egy Prezentáció és adjon hozzá egy területdiagramot alapértelmezett adatokkal. Hívja meg a validateChartLayout false értékkel a kiszámított tengelyértékek olvasása előtt, hogy a diagramelrendezés naprakész legyen.
Olvassa ki a getActualMaxValue a getActualMinValue a tengelyhatárokhoz, valamint a getActualMajorUnit a getActualMinorUnit a jelölőintervallumokhoz. A getActualMajorUnitScale és a getActualMinorUnitScale időegység-skálákat ad, amelyek a dátumtengelyekhez relevánsak. A példában ezek az értékek helyi változókba kerülnek, majd a diagram mentésre kerül.
use aspose\slides\ChartType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::Area, 100, 100, 500, 350);
$chart->validateChartLayout();
$maxValue = $chart->getAxes()->getVerticalAxis()->getActualMaxValue();
$minValue = $chart->getAxes()->getVerticalAxis()->getActualMinValue();
$majorUnit = $chart->getAxes()->getVerticalAxis()->getActualMajorUnit();
$minorUnit = $chart->getAxes()->getVerticalAxis()->getActualMinorUnit();
$majorUnitScale = $chart->getAxes()->getVerticalAxis()->getActualMajorUnitScale();
$minorUnitScale = $chart->getAxes()->getVerticalAxis()->getActualMinorUnitScale();
$presentation->save("AxisValues_out.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Az adatok cseréje a tengelyek között
Használja a switchRowColumn a diagramadatokban a sorozatok és kategóriák szerepének felcseréléséhez. Minden korábbi kategória sorozattá, és minden korábbi sorozat kategóriává alakul. Ez megváltoztatja, hogyan csoportosulnak az adatok; nem cseréli fel a vízszintes és függőleges tengelyeket. A példában a setRange a alapértelmezett adatokat a Sheet1!A1:D5 tartományra köt minden fejléccel és kategóriaoszloppal, mielőtt a sorok és oszlopok cseréjét elvégezné. Egy olyan diagramot ment, amely négy sorozatot és három kategóriát tartalmaz.
use aspose\slides\ChartType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::ClusteredColumn, 100, 100, 400, 300);
$chart->getChartData()->setRange("Sheet1!A1:D5");
$chart->getChartData()->switchRowColumn();
$presentation->save("SwitchChartRowColumns_out.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
A függőleges tengely letiltása vonaldiagramoknál
Hívja meg a setVisible false értékkel a függőleges tengelyen, hogy elrejtse. A példában egy alapértelmezett adatokkal rendelkező vonaldiagramot hoz létre, és elmenti a függőleges tengely rejtve.
use aspose\slides\ChartType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::Line, 100, 100, 400, 300);
$chart->getAxes()->getVerticalAxis()->setVisible(false);
$presentation->save("HiddenVerticalAxis.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
A vízszintes tengely letiltása vonaldiagramoknál
Hívja meg a setVisible false értékkel a vízszintes tengelyen, hogy elrejtse. A példában egy alapértelmezett adatokkal rendelkező vonaldiagramot hoz létre, és elmenti a vízszintes tengely rejtve.
use aspose\slides\ChartType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::Line, 100, 100, 400, 300);
$chart->getAxes()->getHorizontalAxis()->setVisible(false);
$presentation->save("HiddenHorizontalAxis.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Kategóriatengely módosítása
Használja a setCategoryAxisType a dátum vagy szöveg kategóriatengely kiválasztásához. Ez a példa az ExistingChart.pptx fájlt igényli, amelynek első diáján az első alakzat egy diagram, és a kategória cellák numerikus Excel dátumértékeket tartalmaznak. A vízszintes tengelyt dátumtengelyre változtatja. A setAutomaticMajorUnit false, a setMajorUnit 1, és a setMajorUnitScale TimeUnitType::Months hívása egy hónapos intervallumokkal helyezi el a fő jelölőket.
use aspose\slides\CategoryAxisType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\TimeUnitType;
$presentation = new Presentation("ExistingChart.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->get_Item(0);
$chart->getAxes()->getHorizontalAxis()->setCategoryAxisType(CategoryAxisType::Date);
$chart->getAxes()->getHorizontalAxis()->setAutomaticMajorUnit(false);
$chart->getAxes()->getHorizontalAxis()->setMajorUnit(1);
$chart->getAxes()->getHorizontalAxis()->setMajorUnitScale(TimeUnitType::Months);
$presentation->save("ChangeChartCategoryAxis_out.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Kategóriatengely címkeintervallumok vezérlése
Ha egy diagram sok kategóriát tartalmaz, csökkentse a látható tengelycímkék számát a kategóriák vagy adatpontok eltávolítása nélkül. Hívja meg a setAutomaticTickLabelSpacing false értékkel, majd adja meg a kívánt kategóriaintervallumot a setTickLabelSpacing segítségével. Szöveges kategóriák esetén a normál sorrendben a számlálás az első kategóriától kezdődik:
| Intervallum | Példában megjelenített címkék |
|---|---|
1 |
Category 1, Category 2, Category 3, … Category 24 |
2 |
Category 1, Category 3, Category 5, … Category 23 |
3 |
Category 1, Category 4, Category 7, … Category 22 |
Egy 3 intervallum minden harmadik címkét jelenít meg, két címke rejtve marad a megjelenített címkék között. Nem távolítja el a megfelelő oszlopokat. Az automatikus távolság az elérhető 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ésük van. Hívja meg a setAutomaticTickMarksSpacing false értékkel, és használja a setTickMarksSpacing a intervallum beállításához. Például a 1 minden kategóriaintervallumban megtart egy jelölőpontot, míg a címkék csak minden harmadik kategórián jelennek meg. Használja a setMajorTickMark látható stílussal, hogy lássa az eredményt. Bármelyik automatikus távolság beállítót true-ra állítva a diagram újra kiválasztja azt az intervallumot.
A következő önálló példa 24 kategóriát és egy sorozatot hoz létre, majd három diát ment a CategoryAxisIntervals.pptx fájlba: automatikus távolság, kézi címke-távolság független jelölőpontokkal, és visszaállított automatikus távolság. A két másolat megtartja az eredeti diagramadatokat. Bemeneti prezentációra nincs szükség. A vízszintes címkeszöveg megkönnyíti a sűrűség különbségének észlelését.
use aspose\slides\CategoryAxisType;
use aspose\slides\ChartType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\TickMarkType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::ClusteredColumn, 30, 40, 660, 320);
$chart->setLegend(false);
$chart->getChartData()->getCategories()->clear();
$chart->getChartData()->getSeries()->clear();
$workbook = $chart->getChartData()->getChartDataWorkbook();
$workbook->clear(0);
$series = $chart->getChartData()->getSeries()->add(ChartType::ClusteredColumn);
for ($i = 0; $i < 24; $i++) {
$categoryCell = $workbook->getCell(0, $i + 1, 0, "Category " . ($i + 1));
$chart->getChartData()->getCategories()->add($categoryCell);
$valueCell = $workbook->getCell(0, $i + 1, 1, 10 + $i % 6 * 5);
$series->getDataPoints()->addDataPointForBarSeries($valueCell);
}
$axis = $chart->getAxes()->getHorizontalAxis();
$axis->setCategoryAxisType(CategoryAxisType::Text);
$axis->getTextFormat()->getTextBlockFormat()->setRotationAngle(0);
$axis->getTextFormat()->getPortionFormat()->setFontHeight(12);
$axis->setMajorTickMark(TickMarkType::Outside);
$axis->setAutomaticTickLabelSpacing(true);
$axis->setAutomaticTickMarksSpacing(true);
// Dia 2: minden harmadik címkét jelenítse meg, de minden kategóriához tartson meg egy jelölőpontot.
$manualSlide = $presentation->getSlides()->addClone($slide);
$manualChart = $manualSlide->getShapes()->get_Item(0);
$manualAxis = $manualChart->getAxes()->getHorizontalAxis();
$manualAxis->setAutomaticTickLabelSpacing(false);
$manualAxis->setTickLabelSpacing(3);
$manualAxis->setAutomaticTickMarksSpacing(false);
$manualAxis->setTickMarksSpacing(1);
// Dia 3: engedje, hogy a diagram újra kiválassza mindkét intervallumot.
$restoredSlide = $presentation->getSlides()->addClone($manualSlide);
$restoredChart = $restoredSlide->getShapes()->get_Item(0);
$restoredChart->getAxes()->getHorizontalAxis()->setAutomaticTickLabelSpacing(true);
$restoredChart->getAxes()->getHorizontalAxis()->setAutomaticTickMarksSpacing(true);
$presentation->save("CategoryAxisIntervals.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Automatikus távolság (1. dia): Ebben a megjelenítésben minden második kategóriacímke jelenik meg, és két sorba törik. Az automatikus eredmény a diagram méretétől, betűtípusoktól és a renderertől függően változhat.

Kézi távolság (2. dia): Minden harmadik címke jelenik meg egy sorban, míg a jelölőpontok minden kategóriaintervallumban megtartják helyüket. Az összes 24 oszlop, beleértve a címké nélküli oszlopokat is, ugyanazokkal az értékekkel látható marad. A 3. dia visszaállítja a fenti automatikus megjelenést.

A megfelelő tengely és intervallum kiválasztása
Ezt a kategóriaszám-intervallumot szöveges kategóriatengely esetén használja, például oszlop-, vonal-, terület- vagy sávdiagram kategóriatengelyén. Oszlopdiagram esetén ez a vízszintes tengely. Vízszintes sávdiagram esetén a kategóriatengely függőleges, ezért ezeket a beállításokat a getVerticalAxis által visszaadott tengelyre alkalmazza. A jelölőpont távolság a sorozattengelyre is érvényes, ha a diagram tartalmaz ilyenet.
Ne használja a kategória címke távolságot az értéktengely numerikus skálájának beállítására. Az értéktengelyen a setMajorUnit az értékek közti különbséget határozza meg: például a 10 főegység 0, 10, 20 stb. jelölőket eredményez, ha a tengely nullánál kezdődik. A 3 kategória címke intervallum ehelyett a kategóriahelyek számát veszi alapul, függetlenül az adatértékektől. Szórt és buborék diagramok értéktengelyt használnak, nem szöveges kategóriatengelyt. Dátumtengely esetén használjon időalapú főegységeket és skálákat, ahogy a Kategóriatengely módosítása szakaszban leírtuk.
A dátumformátum beállítása a kategóriatengely értékeire
A példa a 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), amely a 1899. december 30. óta eltelt napok számát jelenti. Használja a setCategoryAxisType CategoryAxisType::Date értékkel, hívja a setNumberFormatLinkedToSource false-lel, és adja át a yyyy-t a setNumberFormat‑nek, hogy a kategória címkék a négy számjegyű évszámot mutassák, függetlenül a cella formázásától.
use aspose\slides\CategoryAxisType;
use aspose\slides\ChartType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::Line, 50, 50, 450, 300);
$chart->getChartData()->getCategories()->clear();
$chart->getChartData()->getSeries()->clear();
$workbook = $chart->getChartData()->getChartDataWorkbook();
$workbook->clear(0);
$baseDate = gmmktime(0, 0, 0, 12, 30, 1899);
$series = $chart->getChartData()->getSeries()->add(ChartType::Line);
for ($i = 0; $i < 4; $i++) {
$date = gmmktime(0, 0, 0, 1, 1, 2015 + $i);
$serialDate = ($date - $baseDate) / 86400;
$categoryCell = $workbook->getCell(0, $i + 1, 0, $serialDate);
$chart->getChartData()->getCategories()->add($categoryCell);
$valueCell = $workbook->getCell(0, $i + 1, 1, $i + 1);
$series->getDataPoints()->addDataPointForLineSeries($valueCell);
}
$chart->getAxes()->getHorizontalAxis()->setCategoryAxisType(CategoryAxisType::Date);
$chart->getAxes()->getHorizontalAxis()->setNumberFormatLinkedToSource(false);
$chart->getAxes()->getHorizontalAxis()->setNumberFormat("yyyy");
$presentation->save("DateAxisFormat.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Forgási szög beállítása a diagram tengelycíméhez
Hívja meg a setTitle true értékkel a függőleges tengelyen, adja meg a címszöveget, és használja a setRotationAngle függvényt a cím forgatásához. A szög fokban van megadva; ez a példa egy oszlopdiagramot ment, amelynek értéktengely-címe 90 fokkal van elfordítva.
use aspose\slides\ChartType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::ClusteredColumn, 50, 50, 450, 300);
$chart->getAxes()->getVerticalAxis()->setTitle(true);
$chart->getAxes()->getVerticalAxis()->getTitle()->addTextFrameForOverriding("Value");
$chart->getAxes()->getVerticalAxis()->getTitle()->getTextFormat()->getTextBlockFormat()->setRotationAngle(90);
$presentation->save("RotatedAxisTitle.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
A tengely pozíciójának beállítása kategória vagy értéktengelyen
Használja a setAxisBetweenCategories függvényt annak szabályozására, hogy az értéktengely a kategóriatengelyt kategóriák között vagy a kategória jelölőpontoknál metszze. Ez a beállítás a kategóriatengelyekre vonatkozik. A példa a vízszintes kategóriatengelyen true értékre állítja egy oszlopdiagramon, majd elmenti az eredményt.
use aspose\slides\ChartType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::ClusteredColumn, 50, 50, 450, 300);
$chart->getAxes()->getHorizontalAxis()->setAxisBetweenCategories(true);
$presentation->save("AxisBetweenCategories.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Megjelenítési egység beállítása diagram értéktengelyen
Használja a setDisplayUnit függvényt az értéktengely címkéinek skálázásához anélkül, hogy az adatokat módosítaná. A DisplayUnitType Millions értékre állításakor a 60 000 000 érték 60‑ként jelenik meg. A példa egy oszlopdiagramot hoz létre, és a milliós megjelenítési egységet a függőleges tengelyen alkalmazza.
use aspose\slides\ChartType;
use aspose\slides\DisplayUnitType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::ClusteredColumn, 50, 50, 450, 300);
$chart->getAxes()->getVerticalAxis()->setDisplayUnit(DisplayUnitType::Millions);
$presentation->save("Result.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
GYIK
Hogyan állíthatom be, hogy egy tengely hol metszi a másikat (tengelykereszteződés)?
A setCrossType használatával választhatja ki a kereszteződés viselkedését. Numerikus keresztezési érték megadásához a setCrossAt függvényt használja. Ezek a beállítások lehetővé teszik, hogy a tengelykereszteződést egy megfelelő alapvonalra mozgassa.
Hogyan helyezhetem el a jelölőcímkéket a tengelyhez képest?
Hívja meg a setTickLabelPosition a TickLabelPositionType használatával: Low, High, NextTo vagy None. A jelölőpontok saját szabályozásához használja a setMajorTickMark vagy a setMinorTickMark függvényeket; ezek különállóak a címke pozícionálásától.