تخصيص محاور المخططات في العروض التقديمية باستخدام بايثون
نظرة عامة
تشرح هذه المقالة كيفية تخصيص محاور المخططات باستخدام Aspose.Slides for Python عبر .NET. تتناول القيم المحسوبة للمحاور، تبديل صفوف وأعمدة المخطط، إظهار أو إخفاء المحور، فواصل تسميات الفئة وعلامات الفواصل، الفئات التاريخية وتنسيقها، دوران العنوان، موضع المحور، ووحدات العرض.
الحصول على القيم القصوى على المحور الرأسي في المخططات
إنشاء العرض التقديمي وإضافة مخطط مساحة ببيانات افتراضية. استدعاء validate_chart_layout قبل قراءة القيم المحسوبة للمحاور لضمان تحديث تخطيط المخطط.
قراءة actual_max_value وactual_min_value لتحديد حدود المحور، وactual_major_unit وactual_minor_unit لفواصل العلامات. توفر actual_major_unit_scale وactual_minor_unit_scale مقاييس الوحدات الزمنية ذات الصلة بالمحاور التاريخية. يخزن المثال هذه القيم في متغيرات محلية ويحفظ المخطط.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.AREA, 100, 100, 500, 350)
chart.validate_chart_layout()
max_value = chart.axes.vertical_axis.actual_max_value
min_value = chart.axes.vertical_axis.actual_min_value
major_unit = chart.axes.vertical_axis.actual_major_unit
minor_unit = chart.axes.vertical_axis.actual_minor_unit
major_unit_scale = chart.axes.vertical_axis.actual_major_unit_scale
minor_unit_scale = chart.axes.vertical_axis.actual_minor_unit_scale
presentation.save("AxisValues_out.pptx", slides.export.SaveFormat.PPTX)
تبديل البيانات بين المحاور
استخدام switch_row_column لتبادل أدوار السلاسل والفئات في بيانات المخطط. كل فئة سابقة تصبح سلسلة، وكل سلسلة سابقة تصبح فئة. هذا يغيّر طريقة تجميع البيانات؛ ولا يبدّل المحاور الأفقية والعمودية. يستخدم المثال set_range لربط البيانات الافتراضية بـ Sheet1!A1:D5، بما في ذلك صف الرأس وعمود الفئة، قبل تبديل الصفوف والأعمدة. يحفظ المخطط بأربع سلاسل وثلاث فئات.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 100, 100, 400, 300)
chart.chart_data.set_range("Sheet1!A1:D5")
chart.chart_data.switch_row_column()
presentation.save("SwitchChartRowColumns_out.pptx", slides.export.SaveFormat.PPTX)
تعطيل المحور الرأسي للمخططات الخطية
ضبط is_visible إلى False على المحور الرأسي لإخفائه. ينشئ المثال مخططًا خطيًا ببيانات افتراضية ويحفظه مع إخفاء المحور الرأسي.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.LINE, 100, 100, 400, 300)
chart.axes.vertical_axis.is_visible = False
presentation.save("HiddenVerticalAxis.pptx", slides.export.SaveFormat.PPTX)
تعطيل المحور الأفقي للمخططات الخطية
ضبط is_visible إلى False على المحور الأفقي لإخفائه. ينشئ المثال مخططًا خطيًا ببيانات افتراضية ويحفظه مع إخفاء المحور الأفقي.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.LINE, 100, 100, 400, 300)
chart.axes.horizontal_axis.is_visible = False
presentation.save("HiddenHorizontalAxis.pptx", slides.export.SaveFormat.PPTX)
تغيير محور الفئة
ضبط category_axis_type لاختيار محور فئة تاريخية أو نصية. يتطلب هذا المثال ملف ExistingChart.pptx، حيث يكون المخطط هو الشكل الأول في الشريحة الأولى وتحتوي خلايا الفئة على قيم تاريخية رقمية من Excel. يغيّر المثال المحور الأفقي إلى محور تاريخي. ضبط is_automatic_major_unit إلى False، وmajor_unit إلى 1، وmajor_unit_scale إلى أشهر يضع العلامات الرئيسية على فواصل شهرية.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation("ExistingChart.pptx") as presentation:
slide = presentation.slides[0]
chart = slide.shapes[0]
chart.axes.horizontal_axis.category_axis_type = charts.CategoryAxisType.DATE
chart.axes.horizontal_axis.is_automatic_major_unit = False
chart.axes.horizontal_axis.major_unit = 1
chart.axes.horizontal_axis.major_unit_scale = charts.TimeUnitType.MONTHS
presentation.save("ChangeChartCategoryAxis_out.pptx", slides.export.SaveFormat.PPTX)
التحكم في فواصل تسميات محور الفئة
عند وجود العديد من الفئات في المخطط، قلل عدد تسميات المحور الظاهرة دون حذف الفئات أو نقاط البيانات. اضبط is_automatic_tick_label_spacing إلى False، ثم ضبط tick_label_spacing إلى الفاصل الفئوي المطلوب. بالنسبة للفئات النصية بترتيبها الطبيعي، يبدأ العد من الفئة الأولى:
| الفاصل | التسميات المعروضة في المثال |
|---|---|
1 |
الفئة 1, الفئة 2, الفئة 3, … الفئة 24 |
2 |
الفئة 1, الفئة 3, الفئة 5, … الفئة 23 |
3 |
الفئة 1, الفئة 4, الفئة 7, … الفئة 22 |
يعرض فاصل 3 كل تسمية ثالثة، مع إخفاء تسمينتين بين كل تسمية مرئية. لا يزيل ذلك الأعمدة المقابلة. يختار التباعد التلقائي فاصلًا بناءً على المساحة المتاحة؛ ولا يُظهر بالضرورة كل تسمية.
علامات الفواصل لها تحكم مستقل. اضبط is_automatic_tick_marks_spacing إلى False واستخدم tick_marks_spacing لتعيين فاصلها. على سبيل المثال، 1 يحافظ على علامة فاصل عند كل فاصل فئة بينما تظهر التسميات كل فئة ثالثة فقط. اضبط major_tick_mark إلى نمط مرئي لتتمكن من رؤية النتيجة. إعادة تعيين أي من خصائص التباعد التلقائي إلى True يسمح للمخطط باختيار ذلك الفاصل مرة أخرى.
ينشئ المثال المستقل التالي 24 فئة وسلسلة واحدة، ثم يحفظ ثلاث شرائح في CategoryAxisIntervals.pptx: تباعد تلقائي، تباعد يدوي للتسميات مع علامات فواصل مستقلة، واستعادة التباعد التلقائي. تحتفظ النسختان بن بيانات المخطط الأصلية. لا يلزم عرض تقديمي إدخالي. يجعل نص التسميات الأفقي الفرق في الكثافة واضحًا.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 30, 40, 660, 320)
chart.has_legend = False
chart.chart_data.categories.clear()
chart.chart_data.series.clear()
workbook = chart.chart_data.chart_data_workbook
workbook.clear(0)
series = chart.chart_data.series.add(charts.ChartType.CLUSTERED_COLUMN)
for i in range(24):
category_cell = workbook.get_cell(0, i + 1, 0, f"Category {i + 1}")
chart.chart_data.categories.add(category_cell)
value_cell = workbook.get_cell(0, i + 1, 1, 10 + i % 6 * 5)
series.data_points.add_data_point_for_bar_series(value_cell)
axis = chart.axes.horizontal_axis
axis.category_axis_type = charts.CategoryAxisType.TEXT
axis.text_format.text_block_format.rotation_angle = 0
axis.text_format.portion_format.font_height = 12
axis.major_tick_mark = charts.TickMarkType.OUTSIDE
axis.is_automatic_tick_label_spacing = True
axis.is_automatic_tick_marks_spacing = True
# الشريحة 2: عرض كل تسمية ثالثة، مع الحفاظ على علامة فاصل لكل فئة.
manual_slide = presentation.slides.add_clone(slide)
manual_chart = manual_slide.shapes[0]
manual_axis = manual_chart.axes.horizontal_axis
manual_axis.is_automatic_tick_label_spacing = False
manual_axis.tick_label_spacing = 3
manual_axis.is_automatic_tick_marks_spacing = False
manual_axis.tick_marks_spacing = 1
# الشريحة 3: السماح للمخطط باختيار كلا الفاصلين مرة أخرى.
restored_slide = presentation.slides.add_clone(manual_slide)
restored_chart = restored_slide.shapes[0]
restored_chart.axes.horizontal_axis.is_automatic_tick_label_spacing = True
restored_chart.axes.horizontal_axis.is_automatic_tick_marks_spacing = True
presentation.save("CategoryAxisIntervals.pptx", slides.export.SaveFormat.PPTX)
تباعد تلقائي (الشريحة 1): في هذا العرض، تُظهر كل تسمية فئة ثانية وتُكّسّر إلى سطرين. قد يختلف الناتج التلقائي مع حجم المخطط، الخطوط، والمحرك.

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

اختر المحور والفاصل الصحيح
استخدم هذا الفاصل المتعدد الفئات لمحور فئة نصية، مثل محور فئة عمودي، خطي، مساحي، أو شريطي. في المخطط العمودي يكون هو المحور الأفقي. في المخطط الشريطي الأفقي يكون محور الفئة عموديًا، لذا طبّق هذه الإعدادات على vertical_axis. ينطبق تباعد علامات الفواصل أيضًا على محور سلسلة في المخططات التي تحتوي على واحد.
لا تستخدم تباعد تسميات الفئات لضبط المقياس الرقمي لمحور القيمة. على محور القيمة، يحدد major_unit فرق القيم: على سبيل المثال، وحدة رئيسية 10 تنتج علامات عند 0, 10, 20، وهكذا عندما يبدأ المحور من الصفر. فاصل تسمية الفئة 3 يعد مواضع الفئات بغض النظر عن قيم البيانات. تستخدم المخططات المتناثرة والفقاعية محاور قيم بدلاً من محور فئة نصية. للمحور التاريخي، استخدم وحدات رئيسية ومقاييس زمنية كما هو موضح في تغيير محور الفئة.
تعيين تنسيق التاريخ لقيم محور الفئة
يستبدل المثال بيانات المخطط الافتراضية بأربع قيم سنوية. تُخزن التواريخ كأرقام تسلسلية OLE Automation في ورقة العمل الأولى (الفهرس 0). اضبط category_axis_type إلى محور تاريخ، عطل is_number_format_linked_to_source، وعيّن yyyy إلى number_format حتى تعرض تسميات الفئة سنوات بأربعة أرقام بشكل مستقل عن تنسيق الخلية.
from datetime import date
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.LINE, 50, 50, 450, 300)
chart.chart_data.categories.clear()
chart.chart_data.series.clear()
workbook = chart.chart_data.chart_data_workbook
workbook.clear(0)
series = chart.chart_data.series.add(charts.ChartType.LINE)
for i in range(4):
category_date = date(2015 + i, 1, 1)
serial_date = (category_date - date(1899, 12, 30)).days
category_cell = workbook.get_cell(0, i + 1, 0, serial_date)
chart.chart_data.categories.add(category_cell)
value_cell = workbook.get_cell(0, i + 1, 1, i + 1)
series.data_points.add_data_point_for_line_series(value_cell)
chart.axes.horizontal_axis.category_axis_type = charts.CategoryAxisType.DATE
chart.axes.horizontal_axis.is_number_format_linked_to_source = False
chart.axes.horizontal_axis.number_format = "yyyy"
presentation.save("DateAxisFormat.pptx", slides.export.SaveFormat.PPTX)
تعيين زاوية دوران لعنوان محور المخطط
فعّل has_title على المحور الرأسي، قدّم نص العنوان، واضبط rotation_angle لتدوير العنوان. تُقاس الزاوية بالدرجات؛ يحفظ المثال مخططًا عموديًا مع دوران عنوان محور القيمة بزاوية 90 درجة.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 50, 50, 450, 300)
chart.axes.vertical_axis.has_title = True
chart.axes.vertical_axis.title.add_text_frame_for_overriding("Value")
chart.axes.vertical_axis.title.text_format.text_block_format.rotation_angle = 90
presentation.save("RotatedAxisTitle.pptx", slides.export.SaveFormat.PPTX)
تعيين موضع المحور على محور الفئة أو القيمة
استخدام axis_between_categories للتحكم فيما إذا كان محور القيمة يقاطع محور الفئة بين الفئات أو عند علامات الفئة. تُطبق هذه الخاصية على محاور الفئة. يضبط المثال القيمة إلى True على محور الفئة الأفقي في مخطط عمودي ويحفظ النتيجة.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 50, 50, 450, 300)
chart.axes.horizontal_axis.axis_between_categories = True
presentation.save("AxisBetweenCategories.pptx", slides.export.SaveFormat.PPTX)
تعيين وحدة العرض على محور القيمة في المخطط
اضبط display_unit لتكبير التسميات على محور القيمة دون تغيير البيانات الأساسية. مع ضبط DisplayUnitType إلى MILLIONS، يُعرض القيمة 60,000,000 كـ 60. ينشئ المثال مخططًا عموديًا ويطبق وحدة العرض بالملايين على محوره الرأسي.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 50, 50, 450, 300)
chart.axes.vertical_axis.display_unit = charts.DisplayUnitType.MILLIONS
presentation.save("Result.pptx", slides.export.SaveFormat.PPTX)
الأسئلة الشائعة
كيف يمكنني ضبط القيمة التي يتقاطع عندها محور مع آخر (تقاطع المحور)؟
استخدم cross_type لاختيار سلوك التقاطع. لتحديد قيمة تقاطع رقمية، اضبط cross_at. تسمح هذه الإعدادات بنقل تقاطع المحور إلى خط أساس مناسب.
كيف يمكنني موضع تسميات العلامات بالنسبة للمحور؟
اضبط tick_label_position باستخدام TickLabelPositionType: LOW، HIGH، NEXT_TO، أو NONE. للتحكم في علامات الفواصل نفسها، استخدم major_tick_mark أو minor_tick_mark; فهذه منفصلة عن موضع التسميات.