प्रस्तुतीकरण में Python का उपयोग करके चार्ट अक्षों को अनुकूलित करें

अवलोकन

यह लेख Aspose.Slides for Python via Java के साथ चार्ट अक्षों को अनुकूलित करने के तरीकों को समझाता है। यह गणना किए गए अक्ष मानों, चार्ट पंक्तियों और स्तंभों को बदलने, अक्ष की दृश्यता, श्रेणी लेबल और टिक‑मार्क अंतराल, तिथि श्रेणियों और स्वरूपण, शीर्षक घूर्णन, अक्ष की स्थिति और प्रदर्शन इकाइयों को कवर करता है।

चार्ट के ऊर्ध्वाधर अक्ष पर अधिकतम मान प्राप्त करें

एक प्रस्तुति बनाएं और डिफ़ॉल्ट डेटा के साथ एक एरिया चार्ट जोड़ें। गणना किए गए अक्ष मानों को पढ़ने से पहले validateChartLayout को कॉल करें ताकि चार्ट लेआउट अद्यतन हो।

अक्ष सीमाओं के लिए getActualMaxValue और getActualMinValue पढ़ें, और टिक अंतराल के लिए getActualMajorUnit और getActualMinorUnit पढ़ें। getActualMajorUnitScale और getActualMinorUnitScale समय‑इकाई स्केल प्रदान करते हैं, जो तिथि अक्षों के लिए प्रासंगिक होते हैं। उदाहरण इन मानों को स्थानीय चर में संग्रहीत करता है और चार्ट सहेजता है।

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()

अक्षों के बीच डेटा बदलें

switchRowColumn का उपयोग करके चार्ट डेटा में श्रृंखलाओं और श्रेणियों की भूमिकाओं को बदलें। प्रत्येक पूर्व श्रेणी एक श्रृंखला बन जाती है, और प्रत्येक पूर्व श्रृंखला एक श्रेणी बन जाती है। यह डेटा के समूह को बदलता है; यह क्षैतिज और ऊर्ध्वाधर अक्षों को नहीं बदलता। उदाहरण setRange का उपयोग करके डिफ़ॉल्ट डेटा को Sheet1!A1:D5 से बाइंड करता है, जिसमें हेडर पंक्ति और श्रेणी स्तंभ शामिल हैं, फिर पंक्तियों और स्तंभों को बदलता है। यह चार श्रृंखला और तीन श्रेणी वाला चार्ट सहेजता है।

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()

लाइन चार्ट के लिए ऊर्ध्वाधर अक्ष को अक्षम करें

ऊर्ध्वाधर अक्ष पर False के साथ setVisible को कॉल करके इसे छिपाएँ। उदाहरण डिफ़ॉल्ट डेटा के साथ एक लाइन चार्ट बनाता है और ऊर्ध्वाधर अक्ष छिपा हुआ सहेजता है।

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()

लाइन चार्ट के लिए क्षैतिज अक्ष को अक्षम करें

क्षैतिज अक्ष पर False के साथ setVisible को कॉल करके इसे छिपाएँ। उदाहरण डिफ़ॉल्ट डेटा के साथ एक लाइन चार्ट बनाता है और क्षैतिज अक्ष छिपा हुआ सहेजता है।

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()

एक श्रेणी अक्ष बदलें

setCategoryAxisType का उपयोग करके तिथि या पाठ श्रेणी अक्ष चुनें। इस उदाहरण को ExistingChart.pptx चाहिए, जिसमें पहली स्लाइड पर पहला आकार एक चार्ट है और श्रेणी कोशिकाओं में संख्यात्मक Excel तिथि मान होते हैं। यह क्षैतिज अक्ष को तिथि अक्ष में बदलता है। setAutomaticMajorUnit को False, setMajorUnit को 1 और setMajorUnitScale को TimeUnitType.Months के साथ कॉल करने से प्रमुख टिक एक‑महीने के अंतराल पर रखी जाती हैं।

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()

श्रेणी अक्ष लेबल अंतराल नियंत्रित करें

जब चार्ट में कई श्रेणियां हों, तो श्रेणियों या डेटा बिंदुओं को हटाए बिना दृश्यमान अक्ष लेबलों की संख्या घटाएँ। लेबल अंतराल को नियंत्रित करने के लिए setAutomaticTickLabelSpacing को False के साथ कॉल करें, फिर वांछित श्रेणी अंतराल को setTickLabelSpacing को पास करें। सामान्य क्रम में पाठ श्रेणियों के लिए, गिनती पहली श्रेणी से शुरू होती है:

अंतराल उदाहरण में प्रदर्शित लेबल
1 श्रेणी 1, श्रेणी 2, श्रेणी 3, … श्रेणी 24
2 श्रेणी 1, श्रेणी 3, श्रेणी 5, … श्रेणी 23
3 श्रेणी 1, श्रेणी 4, श्रेणी 7, … श्रेणी 22

3 का अंतराल हर तीसरा लेबल दिखाता है, प्रदर्शित लेबलों के बीच दो लेबल छिपे रहते हैं। यह संबंधित स्तंभों को नहीं हटाता। स्वचालित अंतराल उपलब्ध स्थान के आधार पर चुनता है; यह आवश्यक नहीं कि हर लेबल दर्शाए।

टिक मार्क के लिए अलग नियंत्रण होते हैं। setAutomaticTickMarksSpacing को False करके setTickMarksSpacing के साथ उनका अंतराल सेट करें। उदाहरण के लिए, 1 प्रत्येक श्रेणी अंतराल पर एक टिक मार्क रखता है जबकि लेबल केवल हर तीसरी श्रेणी पर दिखाई देते हैं। दृश्य शैली के साथ setMajorTickMark का उपयोग करें ताकि परिणाम देख सकें। किसी भी स्वचालित‑स्पेसिंग सेटर को फिर से True करने से चार्ट को वही अंतराल फिर से चुनने देता है।

निम्न स्वनिर्भर उदाहरण 24 श्रेणियां और एक श्रृंखला बनाता है, फिर CategoryAxisIntervals.pptx में तीन स्लाइड्स सहेजता है: स्वचालित स्पेसिंग, स्वतंत्र टिक मार्क के साथ मैन्युअल लेबल स्पेसिंग, और पुनर्स्थापित स्वचालित स्पेसिंग। दोनों प्रतियां मूल चार्ट डेटा को बनाए रखती हैं। इनपुट प्रस्तुति की आवश्यकता नहीं होती। क्षैतिज लेबल टेक्स्ट घनत्व में अंतर को स्पष्ट दिखाता है।

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)

    # स्लाइड 2: हर तीसरा लेबल दिखाएँ, लेकिन प्रत्येक श्रेणी के लिए एक टिक मार्क रखें।
    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)

    # स्लाइड 3: चार्ट को फिर से दोनों अंतराल चुनने दें।
    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()

स्वचालित अंतराल (स्लाइड 1): इस रेंडरिंग में हर दूसरी श्रेणी लेबल दिखाई देती है और दो पंक्तियों में लिपटी होती है। स्वचालित परिणाम चार्ट आकार, फ़ॉन्ट और रेंडरर के अनुसार बदल सकता है।

सभी 24 स्तंभ दृश्यमान के साथ स्वचालित श्रेणी लेबल अंतराल

मैन्युअल स्पेसिंग (स्लाइड 2): हर तीसरा लेबल एक पंक्ति पर दिखता है, जबकि टिक मार्क प्रत्येक श्रेणी अंतराल पर बना रहता है। सभी 24 स्तंभ, लेबल न होने वाले सहित, समान मानों के साथ दृश्यमान रहते हैं। स्लाइड 3 ऊपर दर्शाए गए स्वचालित रूप को पुनर्स्थापित करता है।

तीन के साथ मैन्युअल श्रेणी लेबल अंतराल, सभी 24 स्तंभ दृश्यमान

सही अक्ष और अंतराल चुनें

एक पाठ श्रेणी अक्ष के लिए इस श्रेणी‑गणना अंतराल का उपयोग करें, जैसे कि कॉलम, लाइन, एरिया या बार चार्ट का श्रेणी अक्ष। कॉलम चार्ट में यह क्षैतिज अक्ष होता है। क्षैतिज बार चार्ट में श्रेणी अक्ष ऊर्ध्वाधर होता है, इसलिए इसे getVerticalAxis द्वारा लौटाए गए अक्ष पर लागू करें। टिक‑मार्क अंतराल का उपयोग उन चार्ट्स में श्रृंखला अक्ष पर भी किया जा सकता है जिनमें वह मौजूद हो।

श्रेणी लेबल अंतराल का उपयोग मान अक्ष के संख्यात्मक स्केल को सेट करने के लिये न करें। मान अक्ष पर, setMajorUnit मानों के अंतर को निर्दिष्ट करता है: उदाहरण के लिए 10 का प्रमुख इकाई 0, 10, 20 आदि पर टिक बनाता है जब अक्ष शून्य से शुरू होता है। श्रेणी लेबल अंतराल 3 केवल श्रेणी स्थितियों को गिनता है, उनके डेटा मानों की परवाह किए बिना। स्कैटर और बबल चार्ट मान अक्षों का उपयोग करते हैं, न कि पाठ श्रेणी अक्ष का। तिथि अक्ष के लिये, Change a Category Axis में वर्णित समय‑आधारित प्रमुख इकाइयों और स्केलों का उपयोग करें।

श्रेणी अक्ष मानों के लिए तिथि स्वरूप सेट करें

उदाहरण डिफ़ॉल्ट चार्ट डेटा को चार वार्षिक मानों से बदलता है। तिथियां पहले कार्यपत्रक (सूचकांक 0) में OLE Automation क्रमांक के रूप में संग्रहीत होती हैं, जो 30 December 1899 से बीते दिनों की संख्या है। setCategoryAxisType को CategoryAxisType.Date के साथ उपयोग करें, setNumberFormatLinkedToSource को False सेट करें, और setNumberFormat को yyyy पास करें ताकि श्रेणी लेबल सेल स्वरूप से स्वतंत्र चार अंकों के वर्ष दिखाएँ।

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()

चार्ट अक्ष शीर्षक के लिए घूर्णन कोण सेट करें

ऊर्ध्वाधर अक्ष पर True के साथ setTitle को कॉल करें, शीर्षक पाठ प्रदान करें, और शीर्षक के टेक्स्ट ब्लॉक स्वरूप में घूर्णन कोण सेट करें। कोण डिग्री में मापा जाता है; यह उदाहरण एक कॉलम चार्ट को 90 डिग्री घुमाए हुए मान‑अक्ष शीर्षक के साथ सहेजता है।

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()

श्रेणी या मान अक्ष पर अक्ष की स्थिति सेट करें

setAxisBetweenCategories का उपयोग करके तय करें कि मान अक्ष श्रेणी अक्ष को श्रेणियों के बीच या श्रेणी टिक‑मार्क पर पार करे। यह सेटिंग श्रेणी अक्षों पर लागू होती है। उदाहरण इसे कॉलम चार्ट के क्षैतिज श्रेणी अक्ष पर True सेट करता है और परिणाम सहेजता है।

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()

चार्ट मान अक्ष पर प्रदर्शन इकाई सेट करें

setDisplayUnit का उपयोग करके मान अक्ष पर लेबलों को डेटा बदले बिना स्केल करें। जब DisplayUnitType Millions पर सेट हो, तो 60 000 000 का मान 60 के रूप में दिखता है। उदाहरण एक कॉलम चार्ट बनाता है और उसकी ऊर्ध्वाधर अक्ष पर मिलियन प्रदर्शन इकाई लागू करता है।

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()

अक्सर पूछे जाने वाले प्रश्न

मैं एक अक्ष को दूसरे के साथ जहाँ प्रतिच्छेदित हो, उस मान को कैसे सेट करूँ?

setCrossType का उपयोग करके प्रतिच्छेद व्यवहार चुनें। संख्यात्मक प्रतिच्छेद मान निर्दिष्ट करने के लिये, setCrossAt का उपयोग करें। ये सेटिंग्स आपको अक्ष प्रतिच्छेद को उपयुक्त आधार रेखा पर ले जाने की अनुमति देती हैं।

मैं टिक लेबल को अक्ष के सापेक्ष कैसे स्थित करूँ?

setTickLabelPosition को TickLabelPositionType के साथ उपयोग करें: Low, High, NextTo या None। टिक मार्क स्वयं को नियंत्रित करने के लिये, setMajorTickMark या setMinorTickMark का उपयोग करें; ये लेबल स्थान निर्धारित करने से अलग हैं।