تخصيص محاور المخطط في العروض التقديمية على Android
نظرة عامة
تشرح هذه المقالة كيفية تخصيص محاور المخطط باستخدام Aspose.Slides لنظام Android عبر Java. تغطي القيم المحسوبة للمحاور، تبديل صفوف وأعمدة المخطط، إظهار/إخفاء المحاور، فواصل تسميات الفئات وعلامات الفواصل، الفئات التاريخية والتنسيق، تدوير العنوان، تموضع المحور، ووحدات العرض.
الحصول على القيم العظمى على المحور العمودي في المخططات
قم بإنشاء عرض تقديمي وأضف مخططًا من نوع منطقة بالبيانات الافتراضية. استدعِ validateChartLayout قبل قراءة القيم المحسوبة للمحاور لضمان أن تخطيط المخطط محدث.
اقرأ getActualMaxValue و getActualMinValue لحدود المحور، و getActualMajorUnit و getActualMinorUnit لفواصل العلامات. توفر getActualMajorUnitScale و getActualMinorUnitScale مقاييس وحدة الوقت، وهي ذات صلة بمحاور التاريخ. يخزن المثال هذه القيم في متغيرات محلية ويحفظ المخطط.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Area, 100, 100, 500, 350);
chart.validateChartLayout();
double maxValue = chart.getAxes().getVerticalAxis().getActualMaxValue();
double minValue = chart.getAxes().getVerticalAxis().getActualMinValue();
double majorUnit = chart.getAxes().getVerticalAxis().getActualMajorUnit();
double minorUnit = chart.getAxes().getVerticalAxis().getActualMinorUnit();
int majorUnitScale = chart.getAxes().getVerticalAxis().getActualMajorUnitScale();
int minorUnitScale = chart.getAxes().getVerticalAxis().getActualMinorUnitScale();
presentation.save("AxisValues_out.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
تبديل البيانات بين المحاور
استخدم switchRowColumn لتبادل أدوار السلاسل والفئات في بيانات المخطط. كل فئة سابقة تصبح سلسلة، وكل سلسلة سابقة تصبح فئة. هذا يغيّر طريقة تجميع البيانات؛ لا يبدل المحورين الأفقي والعمودي. يستخدم المثال setRange لربط البيانات الافتراضية بـ Sheet1!A1:D5، بما في ذلك صف العنوان وعمود الفئة، قبل تبديل الصفوف والأعمدة. يحفظ المخطط بأربع سلاسل وثلاث فئات.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart 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();
}
إلغاء تفعيل المحور العمودي لمخططات الخط
استدعِ setVisible مع false على المحور العمودي لإخفائه. ينشئ المثال مخطط خط بالبيانات الافتراضية ويحفظه مع إخفاء المحور العمودي.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Line, 100, 100, 400, 300);
chart.getAxes().getVerticalAxis().setVisible(false);
presentation.save("HiddenVerticalAxis.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
إلغاء تفعيل المحور الأفقي لمخططات الخط
استدعِ setVisible مع false على المحور الأفقي لإخفائه. ينشئ المثال مخطط خط بالبيانات الافتراضية ويحفظه مع إخفاء المحور الأفقي.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart 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، مع مخطط كأول شكل في الشريحة الأولى وخلايا الفئة التي تحتوي على قيم تاريخ إكسل رقمية. يغيّر المحور الأفقي إلى محور تاريخ. استدعِ setAutomaticMajorUnit مع false، setMajorUnit مع 1، و setMajorUnitScale مع TimeUnitType.Months لتحديد الفواصل الرئيسية على فواصل شهرية.
import com.aspose.slides.*;
Presentation presentation = new Presentation("ExistingChart.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = (IChart) 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 com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 30, 40, 660, 320);
chart.setLegend(false);
chart.getChartData().getCategories().clear();
chart.getChartData().getSeries().clear();
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
workbook.clear(0);
IChartSeries series = chart.getChartData().getSeries().add(ChartType.ClusteredColumn);
for (int i = 0; i < 24; i++) {
IChartDataCell categoryCell = workbook.getCell(0, i + 1, 0, "Category " + (i + 1));
chart.getChartData().getCategories().add(categoryCell);
IChartDataCell valueCell = workbook.getCell(0, i + 1, 1, 10 + i % 6 * 5);
series.getDataPoints().addDataPointForBarSeries(valueCell);
}
IAxis 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: إظهار كل تسمية ثالثة، لكن إبقاء علامة فاصل لكل فئة.
ISlide manualSlide = presentation.getSlides().addClone(slide);
IChart manualChart = (IChart)manualSlide.getShapes().get_Item(0);
IAxis manualAxis = manualChart.getAxes().getHorizontalAxis();
manualAxis.setAutomaticTickLabelSpacing(false);
manualAxis.setTickLabelSpacing(3);
manualAxis.setAutomaticTickMarksSpacing(false);
manualAxis.setTickMarksSpacing(1);
// الشريحة 3: السماح للمخطط باختيار الفواصل مرة أخرى.
ISlide restoredSlide = presentation.getSlides().addClone(manualSlide);
IChart restoredChart = (IChart)restoredSlide.getShapes().get_Item(0);
restoredChart.getAxes().getHorizontalAxis().setAutomaticTickLabelSpacing(true);
restoredChart.getAxes().getHorizontalAxis().setAutomaticTickMarksSpacing(true);
presentation.save("CategoryAxisIntervals.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
التباعد التلقائي (الشريحة 1): في هذا العرض، تُعرض كل تسمية فئة ثانية وتُلتف إلى سطرين. قد تختلف النتيجة التلقائية حسب حجم المخطط، الخطوط، وموطن الرسم.

التباعد اليدوي (الشريحة 2): تُعرض كل تسمية ثالثة على سطر واحد، بينما تظل علامات الفواصل عند كل فاصل فئة. تبقى جميع الأعمدة الـ 24، بما في ذلك التي لا تحمل تسمية، مرئية بنفس القيم. تستعيد الشريحة 3 المظهر التلقائي المعروض أعلاه.

اختر المحور والفاصل الصحيحين
استخدم هذا الفاصل العددي للفئات لمحور فئة نصية، مثل محور الفئة في مخطط عمودي، خطي، مساحة أو شريطي. في المخطط العمودي يكون هو المحور الأفقي. في المخطط الشريطي الأفقي يكون محور الفئة عموديًا، لذا طبّق هذه الإعدادات على المحور الذي تُعيده الدالة getVerticalAxis. ينطبق تباعد علامات الفواصل أيضًا على محور السلسلة في المخططات التي تحتوي على واحد.
لا تستخدم تباعد تسميات الفئة لتعيين مقياس عددي لمحور القيمة. على محور القيمة، يحدد setMajorUnit فرق القيم: على سبيل المثال، وحدة رئيسية بـ 10 تنتج علامات عند 0، 10، 20، وهكذا عندما يبدأ المحور من الصفر. بينما فاصل تسمية الفئة 3 يحسب مواضع الفئات بغض النظر عن قيم البيانات. تستخدم مخططات التشتت والفقاعات محاور قيم بدلاً من محور فئة نصية. للمحور التاريخي، استخدم وحدات رئيسية ومقاييس زمنية كما هو موضح في تغيير محور الفئة.
تعيين تنسيق التاريخ لقيم محور الفئة
يستبدل المثال البيانات الافتراضية للمخطط بأربعة قيم سنوية. تُخزن التواريخ كأرقام تسلسلية OLE Automation في ورقة العمل الأولى (المؤشر 0)، محسوبة كعدد الأيام منذ 30 ديسمبر 1899. يستخدم كلا التقويمين توقيت UTC وتُمسح القيم قبل ضبط التواريخ لتجنب تأثير التوقيت الصيفي والوقت الحالي من اليوم على الحساب. استخدم setCategoryAxisType مع CategoryAxisType.Date، ثم استدعِ setNumberFormatLinkedToSource مع false، ومرّر yyyy إلى setNumberFormat لتظهر تسميات الفئات بأربع أرقام للسنوات بشكل مستقل عن تنسيق الخلية.
import com.aspose.slides.*;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Line, 50, 50, 450, 300);
chart.getChartData().getCategories().clear();
chart.getChartData().getSeries().clear();
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
workbook.clear(0);
TimeZone timeZone = TimeZone.getTimeZone("UTC");
Calendar baseDate = new GregorianCalendar(timeZone);
baseDate.clear();
baseDate.set(1899, Calendar.DECEMBER, 30);
IChartSeries series = chart.getChartData().getSeries().add(ChartType.Line);
for (int i = 0; i < 4; i++) {
Calendar date = new GregorianCalendar(timeZone);
date.clear();
date.set(2015 + i, Calendar.JANUARY, 1);
double serialDate = (date.getTimeInMillis() - baseDate.getTimeInMillis()) / 86400000.0;
IChartDataCell categoryCell = workbook.getCell(0, i + 1, 0, serialDate);
chart.getChartData().getCategories().add(categoryCell);
IChartDataCell 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();
}
تعيين زاوية تدوير لعنوان محور المخطط
استدعِ setTitle مع true على المحور العمودي، وزد نص العنوان، ثم استخدم setRotationAngle لتدوير العنوان. تُقاس الزاوية بالدرجات؛ يحفظ هذا المثال مخططًا عموديًا مع تدوير عنوان محور القيمة بزاوية 90 درجة.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart 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 com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart 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 com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart 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; هذه منفصلة عن تموضع التسميات.