Diagramtengelyek testreszabása prezentációkban Python használatával

Áttekintés

Ez a cikk bemutatja, hogyan testreszabhatók a diagram tengelyei az Aspose.Slides-ben. Megmutatja, hogyan lehet lekérni a tényleges tengelyértékeket, cserélni az adatokat a tengelyek között, elrejteni a függőleges vagy vízszintes tengelyt vonaldiagramoknál, módosítani a kategória tengely típusát, beállítani a dátumformátumot a kategória tengely értékeihez, elforgatni a tengelycímét, beállítani a tengely pozícióját, illetve beállítani az értéktengely megjelenítési egységét.

A diagram függőleges tengelyének maximális értékeinek lekérése

Aspose.Slides for Python via Java lehetővé teszi a minimum és maximum értékek lekérését egy függőleges tengelyen. Kövesse az alábbi lépéseket:

  1. Hozzon létre egy példányt a Presentation osztályból.
  2. Nyissa meg az első diát.
  3. Adjon hozzá egy diagramot alapértelmezett adatokkal.
  4. Szerezze meg a tényleges maximális értéket a tengelyen.
  5. Szerezze meg a tényleges minimális értéket a tengelyen.
  6. Szerezze meg a tényleges fő egységet a tengelyen.
  7. Szerezze meg a tényleges alsegységet a tengelyen.
  8. Szerezze meg a tényleges fő egységskálát a tengelyen.
  9. Szerezze meg a tényleges alsegység skálát a tengelyen.

Ez a példakód – a fenti lépések megvalósítása – megmutatja, hogyan szerezhetők meg a szükséges értékek Pythonban:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, ChartType, SaveFormat

presentation = Presentation()
try:
    chart = presentation.getSlides().get_Item(0).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()

    # Elmenti a prezentációt
    presentation.save("MaxValuesVerticalAxis_out.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Az adatok cseréje a tengelyek között

Az Aspose.Slides lehetővé teszi az adatok gyors cseréjét a tengelyek között – a függőleges tengelyen (y-tengely) megjelenített adatok a vízszintes tengelyre (x-tengely) kerülnek, és fordítva.

Ez a Python kód megmutatja, hogyan hajtható végre az adatcserélés a tengelyek között egy diagramon:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, ChartType, SaveFormat

presentation = Presentation()
try:
    chart = presentation.getSlides().get_Item(0).getShapes().addChart(ChartType.ClusteredColumn, 100, 100, 400, 300)

    # Betölti a diagram alapértelmezett adatait a munkafüzetbe — a switchRowColumn áttranszponálja a munkafüzetet,
    # ezért először fel kell tölteni
    workbook = chart.getChartData().getChartDataWorkbook()

    # Átváltja a sorokat és oszlopokat
    chart.getChartData().switchRowColumn()

    # Elmenti a prezentációt
    presentation.save("SwitchChartRowColumns_out.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

A függőleges tengely letiltása vonaldiagramoknál

Ez a Python kód megmutatja, hogyan rejthető el a függőleges tengely egy vonaldiagramon:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, ChartType, SaveFormat

presentation = Presentation()
try:
    chart = presentation.getSlides().get_Item(0).getShapes().addChart(ChartType.Line, 100, 100, 400, 300)
    chart.getAxes().getVerticalAxis().setVisible(False)

    presentation.save("chart.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

A vízszintes tengely letiltása vonaldiagramoknál

Ez a kód megmutatja, hogyan rejthető el a vízszintes tengely egy vonaldiagramon:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, ChartType, SaveFormat

presentation = Presentation()
try:
    chart = presentation.getSlides().get_Item(0).getShapes().addChart(ChartType.Line, 100, 100, 400, 300)
    chart.getAxes().getHorizontalAxis().setVisible(False)

    presentation.save("chart.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Kategória tengely módosítása

A setCategoryAxisType metódus használatával megadhatja a kívánt kategória tengely típusát (date vagy text). Ez a Python kód bemutatja a műveletet:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, Chart, SaveFormat, CategoryAxisType, TimeUnitType

presentation = Presentation("ExistingChart.pptx")
try:
    if presentation.getSlides().size() > 0 and presentation.getSlides().get_Item(0).getShapes().size() > 0:
        chart = presentation.getSlides().get_Item(0).getShapes().get_Item(0)
        if isinstance(chart, Chart):
            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)
        else:
            print("The first shape is not a chart.")
    else:
        print("The presentation has no first shape to update.")
finally:
    presentation.dispose()

Dátumformátum beállítása a kategória tengely értékeihez

Az Aspose.Slides for Python via Java lehetővé teszi a dátumformátum beállítását egy kategória tengely értékéhez. A műveletet ez a Python kód mutatja be:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, ChartType, SaveFormat, CategoryAxisType

from datetime import datetime

def convert_to_oa_date(date):
    base_date = datetime(1899, 12, 30)
    return (date - base_date).total_seconds() / 86400


presentation = Presentation()
try:
    chart = presentation.getSlides().get_Item(0).getShapes().addChart(ChartType.Area, 50, 50, 450, 300)

    workbook = chart.getChartData().getChartDataWorkbook()
    workbook.clear(0)

    chart.getChartData().getCategories().clear()
    chart.getChartData().getSeries().clear()
    category_date = datetime(2015, 2, 1)
    category_value = convert_to_oa_date(category_date)
    category_cell = workbook.getCell(0, "A2", category_value)
    chart.getChartData().getCategories().add(category_cell)
    category_date = datetime(2016, 2, 1)
    category_value = convert_to_oa_date(category_date)
    category_cell = workbook.getCell(0, "A3", category_value)
    chart.getChartData().getCategories().add(category_cell)
    category_date = datetime(2017, 2, 1)
    category_value = convert_to_oa_date(category_date)
    category_cell = workbook.getCell(0, "A4", category_value)
    chart.getChartData().getCategories().add(category_cell)
    category_date = datetime(2018, 2, 1)
    category_value = convert_to_oa_date(category_date)
    category_cell = workbook.getCell(0, "A5", category_value)
    chart.getChartData().getCategories().add(category_cell)

    series = chart.getChartData().getSeries().add(ChartType.Line)
    value_cell = workbook.getCell(0, "B2", 1.0)
    series.getDataPoints().addDataPointForLineSeries(value_cell)
    value_cell = workbook.getCell(0, "B3", 2.0)
    series.getDataPoints().addDataPointForLineSeries(value_cell)
    value_cell = workbook.getCell(0, "B4", 3.0)
    series.getDataPoints().addDataPointForLineSeries(value_cell)
    value_cell = workbook.getCell(0, "B5", 4.0)
    series.getDataPoints().addDataPointForLineSeries(value_cell)
    chart.getAxes().getHorizontalAxis().setCategoryAxisType(CategoryAxisType.Date)
    chart.getAxes().getHorizontalAxis().setNumberFormatLinkedToSource(False)
    chart.getAxes().getHorizontalAxis().setNumberFormat("yyyy")

    presentation.save("output.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Forgatási szög beállítása a diagram tengelycíméhez

Az Aspose.Slides for Python via Java lehetővé teszi a diagram tengelycímének forgatási szögének beállítását. Ez a Python kód mutatja be a műveletet:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, ChartType, SaveFormat

presentation = Presentation()
try:
    chart = presentation.getSlides().get_Item(0).getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 450, 300)

    chart.getAxes().getVerticalAxis().setTitle(True)
    chart.getAxes().getVerticalAxis().getTitle().getTextFormat().getTextBlockFormat().setRotationAngle(90)

    presentation.save("output.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Tengelypozíció beállítása kategória vagy értéktengelyen

Az Aspose.Slides for Python via Java lehetővé teszi a tengely pozíciójának beállítását egy kategória vagy értéktengelyen. Ez a Python kód bemutatja, hogyan hajtható végre a feladat:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, ChartType, SaveFormat

presentation = Presentation()
try:
    chart = presentation.getSlides().get_Item(0).getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 450, 300)

    chart.getAxes().getHorizontalAxis().setAxisBetweenCategories(True)

    presentation.save("output.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Megjelenítési egység beállítása egy diagram értéktengelyén

Az Aspose.Slides for Python via Java lehetővé teszi a diagram értéktengely megjelenítési egységének beállítását. A tengely ezután az egységnek megfelelően skálázza a jelölőcímkéket: a DisplayUnitType.Millions használatával egy 60 000 000-ig tartó tengely 0–60-ig lesz jelölve. Ez a Python kód mutatja be a műveletet:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, ChartType, SaveFormat, DisplayUnitType

presentation = Presentation()
try:
    chart = presentation.getSlides().get_Item(0).getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 450, 300)

    chart.getAxes().getVerticalAxis().setDisplayUnit(DisplayUnitType.Millions)

    presentation.save("output.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

GYIK

Hogyan állíthatom be azt az értéket, ahol egy tengely áthalad a másikon (tengelykereszteződés)?

A tengelyek kereszteződés beállítást kínálnak: választhat, hogy a tengely a nullánál, a maximális kategória/értéknél vagy egy adott numerikus értéknél kereszteződjön. Ez hasznos az X-tengely fel vagy le mozgatásához, illetve egy alapvonal hangsúlyozásához.

Hogyan pozícionálhatom a jelölőket a tengelyhez képest (kereszt, kívül, belül)?

Állítsa a jelölő pozícióját „cross”, „outside” vagy „inside” értékre. Ez befolyásolja az olvashatóságot, és segít helyet megtakarítani, különösen kis diagramok esetén.