Diagramtengelyek testreszabása prezentációkban Python használatával
Áttekintés
Ez a cikk bemutatja, hogyan lehet testreszabni a diagram tengelyeit az Aspose.Slides for Python via Java segítségével. Tárgyalja a számított tengelyértékeket, a diagram sorainak és oszlopainak felcserélését, a tengely láthatóságát, a kategória címke- és jelöltív távokat, a dátumkategóriákat és formázást, a cím forgatását, a tengely pozícionálását és a megjelenítési egységeket.
A diagram függőleges tengelyének legnagyobb értékeinek lekérése
Hozzon létre egy Prezentáció objektumot, és adjon hozzá egy területdiagramot alapértelmezett adatokkal. Hívja meg a validateChartLayout metódust, mielőtt a számított tengelyértékeket olvasná, hogy a diagram elrendezése naprakész legyen.
Olvassa ki a getActualMaxValue és a getActualMinValue értékeket a tengelyhatárokhoz, valamint a getActualMajorUnit és a getActualMinorUnit értékeket a jelölőtávolságokhoz. A getActualMajorUnitScale és a getActualMinorUnitScale időegység skálákat adnak vissza, amelyek dátumtengelyek esetén relevánsak. A példa ezeket az értékeket helyi változókba menti, majd elmenti a diagramot.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.Area, 100, 100, 500, 350)
chart.validateChartLayout()
max_value = chart.getAxes().getVerticalAxis().getActualMaxValue()
min_value = chart.getAxes().getVerticalAxis().getActualMinValue()
major_unit = chart.getAxes().getVerticalAxis().getActualMajorUnit()
minor_unit = chart.getAxes().getVerticalAxis().getActualMinorUnit()
major_unit_scale = chart.getAxes().getVerticalAxis().getActualMajorUnitScale()
minor_unit_scale = chart.getAxes().getVerticalAxis().getActualMinorUnitScale()
presentation.save("AxisValues_out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Adatok cseréje a tengelyek között
Használja a switchRowColumn metódust a sorozatok és a kategóriák szerepének felcserélésére a diagram adatainál. Minden korábbi kategória sorozattá, minden korábbi sorozat pedig kategóriává válik. Ez megváltoztatja az adatok csoportosítását; nem cseréli fel a vízszintes és függőleges tengelyeket. A példa a setRange metódust használja, hogy a alapértelmezett adatokat a Sheet1!A1:D5 tartományra kötse, beleértve a fejlécsort és a kategóriaoszlopot, mielőtt a sorokat és oszlopokat felcserélné. Egy négy sorozatos és három kategóriás diagramot ment.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat
presentation = 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()
Függőleges tengely letiltása vonaldiagramoknál
Hívja meg a setVisible metódust False értékkel a függőleges tengelyen, hogy elrejtse azt. A példa egy alapértelmezett adatokkal rendelkező vonaldiagramot hoz létre, és a függőleges tengely letiltásával menti el.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat
presentation = 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()
Vízszintes tengely letiltása vonaldiagramoknál
Hívja meg a setVisible metódust False értékkel a vízszintes tengelyen, hogy elrejtse azt. A példa egy alapértelmezett adatokkal rendelkező vonaldiagramot hoz létre, és a vízszintes tengely letiltásával menti el.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat
presentation = 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 metódust, hogy dátum- vagy szöveges kategóriatengelyt válasszon. Ez a példa az ExistingChart.pptx fájlt igényli, amelyben a diagram az első dián az első alakzat, a kategória cellák numerikus Excel dátumértékeket tartalmaznak. A vízszintes tengelyt dátumtengelyre állítja. A setAutomaticMajorUnit False, a setMajorUnit 1, és a setMajorUnitScale TimeUnitType.Months használata egyhónapos fő jelölőket helyez el.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, CategoryAxisType, TimeUnitType
presentation = 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 szabályozása
Ha egy diagram sok kategóriát tartalmaz, csökkentheti 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 metódust False értékkel, majd adja meg a kívánt kategóriaintervallumot a setTickLabelSpacing metódusnak. Szöveges kategóriák esetén a normál sorrendben a számlálás az első kategóriától indul:
| Intervallum | Példában megjelenített feliratok |
|---|---|
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 feliratot jelenít meg, a megjelenő feliratok között két felirat rejtve marad. Nem törli 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 feliratot.
A jelölőjeleknek külön vezérlői vannak. Hívja meg a setAutomaticTickMarksSpacing False értékkel, és a setTickMarksSpacing metódussal állítsa be az intervallumukat. Például a 1 minden kategóriaintervallumnál hagy egy jelölőt, míg a címkék csak minden harmadik kategórián jelennek meg. Használja a setMajorTickMark látható stílusát, hogy lássa az eredményt. Bármelyik automatikus távolságbeállítót újra True-ra állítva a diagram újra a saját intervallumát választja.
Az alábbi ö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, manuális címkeintervallum független jelölőkkel, és visszaállított automatikus távolság. A két másolat az eredeti diagramadatokat tartalmazza. Bemutató fájlra nincs szükség. A vízszintes címkeszöveg könnyen láthatóvá teszi a sűrűség különbségét.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat, CategoryAxisType, TickMarkType
presentation = 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 in range(24):
category_cell = workbook.getCell(0, i + 1, 0, f"Category {i + 1}")
chart.getChartData().getCategories().add(category_cell)
value_cell = workbook.getCell(0, i + 1, 1, float(10 + i % 6 * 5))
series.getDataPoints().addDataPointForBarSeries(value_cell)
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 feliratot jelenítsen meg, de minden kategóriához hagyjon meg egy jelölőt.
manual_slide = presentation.getSlides().addClone(slide)
manual_chart = manual_slide.getShapes().get_Item(0)
manual_axis = manual_chart.getAxes().getHorizontalAxis()
manual_axis.setAutomaticTickLabelSpacing(False)
manual_axis.setTickLabelSpacing(3)
manual_axis.setAutomaticTickMarksSpacing(False)
manual_axis.setTickMarksSpacing(1)
# Dia 3: hagyja, hogy a diagram újra mindkét intervallumot kiválassza.
restored_slide = presentation.getSlides().addClone(manual_slide)
restored_chart = restored_slide.getShapes().get_Item(0)
restored_chart.getAxes().getHorizontalAxis().setAutomaticTickLabelSpacing(True)
restored_chart.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óriafelirat látható és két sorba törik. Az automatikus eredmény a diagram méretétől, betűtípusától és a renderertől függően változhat.

Manuális távolság (2. dia): Minden harmadik felirat egy sorban jelenik meg, miközben a jelölőjelek minden kategóriaintervallumnál maradnak. Az összes 24 oszlop, beleértve a címke nélküli oszlopokat is, látható marad ugyanazokkal az értékekkel. A 3. dia visszaá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 a vízszintes tengelyről van szó. Vízszintes sávdiagramnál a kategóriatengely függőleges, ezért ezeket a beállításokat a getVerticalAxis által visszaadott tengelyre alkalmazza. A jelölőjel‑intervallum sorozattengelyre is vonatkozik azokban a diagramokban, ahol van ilyen.
Ne használja a kategóriacímke‑intervallumot az értéktengely numerikus skálájának beállítására. Értéktengelyen a setMajorUnit 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 generál, ha a tengely a nulláról indul. A 3 kategóriacímke‑intervallum a kategóriapozíciókat számolja, adatértékük függetlenül. Szórási és buborékdiagramok értéktengelyt használnak, nem szöveges kategóriatengelyt. Dátumtengely esetén időalapú fő egységeket és skálákat használjon, ahogy a Kategóriatengely módosítása részben leírtuk.
A kategória tengely értékeinek dátumformátumának beállítása
A példa lecseréli a diagram alapértelmezett adatait négy éves értékre. A dátumok az első munkalapon (index 0) OLE Automation sorozatszámokként tárolódnak, amely a 1899. december 30. óta eltelt napok számát jelenti. Használja a setCategoryAxisType metódust a CategoryAxisType.Date értékkel, hívja meg a setNumberFormatLinkedToSource metódust False-ra, és adja meg a yyyy formátumot a setNumberFormat metódusnak, hogy a kategóriacímkék a cellaformázástól függetlenül négy számjegyű évként jelenjenek meg.
from datetime import date
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat, CategoryAxisType
presentation = 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)
base_date = date(1899, 12, 30)
series = chart.getChartData().getSeries().add(ChartType.Line)
for i in range(4):
category_date = date(2015 + i, 1, 1)
category_value = float((category_date - base_date).days)
category_cell = workbook.getCell(0, i + 1, 0, category_value)
chart.getChartData().getCategories().add(category_cell)
value_cell = workbook.getCell(0, i + 1, 1, float(i + 1))
series.getDataPoints().addDataPointForLineSeries(value_cell)
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()
Diagramtengely címének forgatási szögének beállítása
Hívja meg a setTitle metódust True értékkel a függőleges tengelyen, adja meg a cím szövegét, és állítsa be a forgatási szöget a cím szövegtömb formázásában. A szög fokokban mérődik; ez a példa egy oszlopdiagramot ment, amelynek értéktengely címe 90 fokkal van elforgatva.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat
presentation = 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 metódust, hogy szabályozza, az értéktengely a kategóriatengelyet a kategóriák között vagy a kategória‑jelölőknél metssze-e. Ez a beállítás csak kategóriatengelyekre vonatkozik. A példa a vízszintes kategóriatengelyen True‑ra állítja, majd elmenti az eredményt.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat
presentation = 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 metódust, hogy a értéktengely feliratainak skáláját módosítsa anélkül, hogy az alapadatok változnának. A DisplayUnitType Millions értékével 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 a milliókat jelző egységet alkalmazza.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ChartType, SaveFormat, DisplayUnitType
presentation = 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ítható be az az érték, ahol egy tengely keresztezi a másikat (tengelykeresztezés)?
Használja a setCrossType metódust a keresztelés viselkedésének kiválasztásához. Numerikus keresztelési érték megadásához használja a setCrossAt metódust. Ezek a beállítások lehetővé teszik a tengelykeresztezés pozíciójának egy megfelelő alapvonalra helyezését.
Hogyan helyezhetők el a jelölőcímkék a tengelyhez viszonyítva?
Hívja meg a setTickLabelPosition metódust a TickLabelPositionType használatával: Low, High, NextTo, vagy None. A jelölőjelek vezérléséhez használja a setMajorTickMark vagy a setMinorTickMark metódusokat; ezek különállóak a címkék pozicionálásától.