ایجاد یا بهروزرسانی نمودارهای ارائه پاورپوینت در پایتون
بررسی کلی
این مقاله راهنمای جامعی برای ایجاد و سفارشیسازی نمودارها با Aspose.Slides for Python via .NET ارائه میدهد. یاد خواهید گرفت چگونه بهصورت برنامهنویسی یک نمودار را به اسلاید اضافه کنید، آن را با دادهها پر کنید و گزینههای قالببندی مختلف را برای مطابقت با الزامات طراحی خود اعمال کنید. در تمام مقاله، مثالهای کد دقیق هر گام را نشان میدهد، از مقداردهی اولیه ارائه و شیء نمودار تا تنظیم سریها، محورها و افسانهها. با دنبال کردن این راهنما، درک محکمی از چگونگی ادغام تولید دینامیک نمودار در برنامههای Python خود بهدست خواهید آورد و فرآیند ایجاد ارائههای مبتنی بر داده را ساده میکنید.
ایجاد یک نمودار
نمودارها به کاربران کمک میکند تا دادهها را بهسرعت تجسم کرده و بینشهایی بهدست آورند که ممکن است از جدول یا صفحهگسترده بهصورت واضح قابل مشاهده نباشد.
چرا نمودارها را ایجاد کنیم؟
با استفاده از نمودارها میتوانید:
- دادههای حجیم را در یک اسلاید جمعآوری، فشرده یا خلاصه کنید؛
- الگوها و روندهای داده را آشکار کنید؛
- جهت و سرعت تغییرات داده را در طول زمان یا نسبت به یک واحد اندازهگیری خاص تشخیص دهید؛
- مقادیر نامنظم، انحرافات، خطاها و دادههای غیرمنطقی را شناسایی کنید؛
- دادههای پیچیده را ارتباط یا ارائه دهید.
در PowerPoint میتوانید از عملکرد Insert برای ایجاد نمودارها استفاده کنید که قالبهای متنوعی برای طراحی انواع نمودارها فراهم میآورد. با Aspose.Slides میتوانید هم نمودارهای عادی (بر پایه انواع نمودارهای رایج) و هم نمودارهای سفارشی ایجاد کنید.
Note
از شمارشگر ChartType در ماژول aspose.slides.charts استفاده کنید. مقادیر این شمارشگر به انواع مختلف نمودارها correspond میشوند.ایجاد نمودارهای ستون خوشهای
این مثال از add_chart برای ایجاد نمودار ستون خوشهای استفاده میکند که دو سری را در سه دسته مقایسه میکند. سریها از پر کردنهای قرمز و سبز استفاده میکنند و برچسبهای جداگانه نام دستهها، نام سریها و مقادیر را نشان میدهند. شاخص کاربرگ ۰ به اولین شیت در کتابکار نمودار تعبیهشده اشاره دارد.
import aspose.pydrawing as draw
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, 20, 20, 500, 300)
chart.chart_title.add_text_frame_for_overriding("Sample Title")
chart.chart_title.text_frame_for_overriding.text_frame_format.center_text = slides.NullableBool.TRUE
chart.chart_title.height = 20
chart.has_title = True
workbook = chart.chart_data.chart_data_workbook
worksheet_index = 0
chart.chart_data.series.clear()
chart.chart_data.categories.clear()
series_name_cell = workbook.get_cell(worksheet_index, 0, 1, "Series 1")
chart.chart_data.series.add(series_name_cell, chart.type)
series_name_cell = workbook.get_cell(worksheet_index, 0, 2, "Series 2")
chart.chart_data.series.add(series_name_cell, chart.type)
category_cell = workbook.get_cell(worksheet_index, 1, 0, "Category 1")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(worksheet_index, 2, 0, "Category 2")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(worksheet_index, 3, 0, "Category 3")
chart.chart_data.categories.add(category_cell)
series = chart.chart_data.series[0]
value_cell = workbook.get_cell(worksheet_index, 1, 1, 20)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 2, 1, 50)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 3, 1, 30)
series.data_points.add_data_point_for_bar_series(value_cell)
series.format.fill.fill_type = slides.FillType.SOLID
series.format.fill.solid_fill_color.color = draw.Color.red
series = chart.chart_data.series[1]
value_cell = workbook.get_cell(worksheet_index, 1, 2, 30)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 2, 2, 10)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 3, 2, 60)
series.data_points.add_data_point_for_bar_series(value_cell)
series.format.fill.fill_type = slides.FillType.SOLID
series.format.fill.solid_fill_color.color = draw.Color.green
label = series.data_points[0].label
label.data_label_format.show_category_name = True
label = series.data_points[1].label
label.data_label_format.show_series_name = True
label = series.data_points[2].label
label.data_label_format.show_value = True
label.data_label_format.show_series_name = True
label.data_label_format.separator = "/"
presentation.save("AsposeChart.pptx", slides.export.SaveFormat.PPTX)
نتیجه:

ایجاد نمودارهای پراکنده
نمودارهای پراکنده (که بهعنوان scatter plots یا نمودارهای x‑y نیز شناخته میشوند) معمولاً برای بررسی الگوها یا نشان دادن همبستگی بین دو متغیر استفاده میشوند.
از نمودار پراکنده زمانی استفاده کنید که:
- دادههای عددی جفتشده داشته باشید؛
- دو متغیر داشته باشید که بهخوبی با یکدیگر جفت میشوند؛
- بخواهید تعیین کنید آیا دو متغیر ارتباط دارند یا نه؛
- متغیر مستقلی داشته باشید که برای یک متغیر وابسته مقادیر متعدد داشته باشد.
این مثال دو مجموعه مقادیر x‑y را رسم میکند. سری اول از خطوط مستقیم با نشانگرهای ستارهای، و سری دوم از خطوط نرم با نشانگرهای دایرهای استفاده میکند؛ هر دو از یک size برابر ۱۰ استفاده میکنند. ویژگی symbol شکل نشانگر را کنترل میکند.
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.SCATTER_WITH_SMOOTH_LINES, 20, 20, 500, 300)
workbook = chart.chart_data.chart_data_workbook
worksheet_index = 0
chart.chart_data.series.clear()
series_name_cell = workbook.get_cell(worksheet_index, 1, 1, "Series 1")
chart.chart_data.series.add(series_name_cell, chart.type)
series_name_cell = workbook.get_cell(worksheet_index, 1, 3, "Series 2")
chart.chart_data.series.add(series_name_cell, chart.type)
series = chart.chart_data.series[0]
x_value_cell = workbook.get_cell(worksheet_index, 2, 1, 1)
y_value_cell = workbook.get_cell(worksheet_index, 2, 2, 3)
series.data_points.add_data_point_for_scatter_series(x_value_cell, y_value_cell)
x_value_cell = workbook.get_cell(worksheet_index, 3, 1, 2)
y_value_cell = workbook.get_cell(worksheet_index, 3, 2, 10)
series.data_points.add_data_point_for_scatter_series(x_value_cell, y_value_cell)
series.type = charts.ChartType.SCATTER_WITH_STRAIGHT_LINES_AND_MARKERS
series.marker.size = 10
series.marker.symbol = charts.MarkerStyleType.STAR
series = chart.chart_data.series[1]
x_value_cell = workbook.get_cell(worksheet_index, 2, 3, 5)
y_value_cell = workbook.get_cell(worksheet_index, 2, 4, 2)
series.data_points.add_data_point_for_scatter_series(x_value_cell, y_value_cell)
x_value_cell = workbook.get_cell(worksheet_index, 3, 3, 3)
y_value_cell = workbook.get_cell(worksheet_index, 3, 4, 1)
series.data_points.add_data_point_for_scatter_series(x_value_cell, y_value_cell)
x_value_cell = workbook.get_cell(worksheet_index, 4, 3, 2)
y_value_cell = workbook.get_cell(worksheet_index, 4, 4, 2)
series.data_points.add_data_point_for_scatter_series(x_value_cell, y_value_cell)
x_value_cell = workbook.get_cell(worksheet_index, 5, 3, 5)
y_value_cell = workbook.get_cell(worksheet_index, 5, 4, 1)
series.data_points.add_data_point_for_scatter_series(x_value_cell, y_value_cell)
series.marker.size = 10
series.marker.symbol = charts.MarkerStyleType.CIRCLE
presentation.save("AsposeChart.pptx", slides.export.SaveFormat.PPTX)
نتیجه:

ایجاد نمودارهای دایرهای
نمودارهای دایرهای برای نشان دادن رابطهٔ بخش‑به‑کل در دادهها مناسباند، بهویژه وقتی دادهها شامل برچسبهای دستهای با مقادیر عددی باشند. اما اگر دادههای شما شامل بخشها یا برچسبهای زیادی باشد، ممکن است ترجیح دهید بهجای آن از نمودار ستونی استفاده کنید.
این مثال یک نمودار دایرهای با سه مقدار سهماهه ایجاد میکند. هر برش دارای پر کردن و حاشیهٔ سفارشی است و برچسبها ترکیبی مختلفی از مقادیر، درصدها و اطلاعات سری را نشان میدهند. ویژگی first_slice_angle اولین برش را در زاویهٔ ۱۸۰ درجه شروع میکند.
import aspose.pydrawing as draw
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.PIE, 20, 20, 500, 300)
chart.chart_title.add_text_frame_for_overriding("Sample Title")
chart.chart_title.text_frame_for_overriding.text_frame_format.center_text = slides.NullableBool.TRUE
chart.chart_title.height = 20
chart.has_title = True
chart.chart_data.series[0].labels.default_data_label_format.show_value = True
workbook = chart.chart_data.chart_data_workbook
worksheet_index = 0
chart.chart_data.series.clear()
chart.chart_data.categories.clear()
category_cell = workbook.get_cell(0, 1, 0, "1st Qtr")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, 2, 0, "2nd Qtr")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, 3, 0, "3rd Qtr")
chart.chart_data.categories.add(category_cell)
series_name_cell = workbook.get_cell(0, 0, 1, "Series 1")
series = chart.chart_data.series.add(series_name_cell, chart.type)
value_cell = workbook.get_cell(worksheet_index, 1, 1, 20)
series.data_points.add_data_point_for_pie_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 2, 1, 50)
series.data_points.add_data_point_for_pie_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 3, 1, 30)
series.data_points.add_data_point_for_pie_series(value_cell)
chart.chart_data.series_groups[0].is_color_varied = True
first_slice = series.data_points[0]
first_slice.format.fill.fill_type = slides.FillType.SOLID
first_slice.format.fill.solid_fill_color.color = draw.Color.cyan
first_slice.format.line.fill_format.fill_type = slides.FillType.SOLID
first_slice.format.line.fill_format.solid_fill_color.color = draw.Color.gray
first_slice.format.line.width = 3.0
first_slice.format.line.style = slides.LineStyle.THIN_THICK
first_slice.format.line.dash_style = slides.LineDashStyle.LARGE_DASH
second_slice = series.data_points[1]
second_slice.format.fill.fill_type = slides.FillType.SOLID
second_slice.format.fill.solid_fill_color.color = draw.Color.brown
second_slice.format.line.fill_format.fill_type = slides.FillType.SOLID
second_slice.format.line.fill_format.solid_fill_color.color = draw.Color.blue
second_slice.format.line.width = 3.0
second_slice.format.line.style = slides.LineStyle.SINGLE
second_slice.format.line.dash_style = slides.LineDashStyle.LARGE_DASH_DOT
third_slice = series.data_points[2]
third_slice.format.fill.fill_type = slides.FillType.SOLID
third_slice.format.fill.solid_fill_color.color = draw.Color.coral
third_slice.format.line.fill_format.fill_type = slides.FillType.SOLID
third_slice.format.line.fill_format.solid_fill_color.color = draw.Color.red
third_slice.format.line.width = 2.0
third_slice.format.line.style = slides.LineStyle.THIN_THIN
third_slice.format.line.dash_style = slides.LineDashStyle.LARGE_DASH_DOT_DOT
first_label = series.data_points[0].label
first_label.data_label_format.show_value = True
second_label = series.data_points[1].label
second_label.data_label_format.show_value = True
second_label.data_label_format.show_legend_key = True
second_label.data_label_format.show_percentage = True
third_label = series.data_points[2].label
third_label.data_label_format.show_series_name = True
third_label.data_label_format.show_percentage = True
series.labels.default_data_label_format.show_leader_lines = True
chart.chart_data.series_groups[0].first_slice_angle = 180
presentation.save("PieChart.pptx", slides.export.SaveFormat.PPTX)
نتیجه:

برای بهبود قابلیت خواندن برچسبهای خارج از دایره، به مثال Format Leader Lines مراجعه کنید که نشان میدهد چطور برچسبها را موقعیتبندی کرده و رنگ، عرض، شفافیت و سبک خطهای راهنما را سفارشی کنید.
ایجاد نمودارهای خطی
نمودارهای خطی (که بهعنوان line graphs نیز شناخته میشوند) بهترین کاربرد را در شرایطی دارند که میخواهید تغییرات مقدار را در طول زمان نشان دهید. با استفاده از یک نمودار خطی میتوانید حجم زیادی از دادهها را بهطور همزمان مقایسه کنید، تغییرات و روندها را در طول زمان پیگیری کنید، ناهنجاریهای سریهای داده را برجسته کنید و غیره.
این مثال از add_chart برای ایجاد یک نمودار خطی با سریها و دستههای پیشفرض استفاده میکند و سپس ارائه را بهصورت PPTX ذخیره میکند.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
line_chart = slide.shapes.add_chart(charts.ChartType.LINE, 20, 20, 500, 300)
presentation.save("lineChart.pptx", slides.export.SaveFormat.PPTX)
بهطور پیشفرض، نقاط در یک نمودار خطی با خطوط مستقیم پیوسته بههم متصل میشوند. اگر میخواهید نقاط بهجای خطوط پیوسته با خطچینها متصل شوند، ویژگی dash_style را به مقدار دلخواه از LineDashStyle تنظیم کنید:
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
line_chart = slide.shapes.add_chart(charts.ChartType.LINE, 20, 20, 500, 300)
for series in line_chart.chart_data.series:
series.format.line.dash_style = slides.LineDashStyle.DASH
نتیجه:

ایجاد نمودارهای درخت‑نقشه
نمودارهای درخت‑نقشه بهترین کاربرد را برای دادههای فروش دارند هنگامی که میخواهید اندازهٔ نسبی دستههای داده را نشان دهید و بهسرعت توجه را به آیتمهای بزرگساهم در هر دسته جلب کنید.
این مثال یک درخت‑نقشه با هشت برگ که در چهار ساقه و دو شاخه گروهبندی شدهاند ایجاد میکند. متد set_grouping_item ساقهها را در سطح گروهبندی ۱ و شاخهها را در سطح ۲ اختصاص میدهد. مقادیر اندازهٔ نسبی مستطیلها را تعیین میکنند، در حالی که برچسبهای دسته و برچسبهای والد همپوشانی هیرارشی را شناسایی میکنند.
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.TREEMAP, 20, 20, 500, 300)
chart.chart_data.categories.clear()
chart.chart_data.series.clear()
workbook = chart.chart_data.chart_data_workbook
workbook.clear(0)
# شاخه 1
category_cell = workbook.get_cell(0, "C1", "Leaf1")
leaf = chart.chart_data.categories.add(category_cell)
leaf.grouping_levels.set_grouping_item(1, "Stem1")
leaf.grouping_levels.set_grouping_item(2, "Branch1")
category_cell = workbook.get_cell(0, "C2", "Leaf2")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "C3", "Leaf3")
leaf = chart.chart_data.categories.add(category_cell)
leaf.grouping_levels.set_grouping_item(1, "Stem2")
category_cell = workbook.get_cell(0, "C4", "Leaf4")
chart.chart_data.categories.add(category_cell)
# شاخه 2
category_cell = workbook.get_cell(0, "C5", "Leaf5")
leaf = chart.chart_data.categories.add(category_cell)
leaf.grouping_levels.set_grouping_item(1, "Stem3")
leaf.grouping_levels.set_grouping_item(2, "Branch2")
category_cell = workbook.get_cell(0, "C6", "Leaf6")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "C7", "Leaf7")
leaf = chart.chart_data.categories.add(category_cell)
leaf.grouping_levels.set_grouping_item(1, "Stem4")
category_cell = workbook.get_cell(0, "C8", "Leaf8")
chart.chart_data.categories.add(category_cell)
series = chart.chart_data.series.add(charts.ChartType.TREEMAP)
series.labels.default_data_label_format.show_category_name = True
value_cell = workbook.get_cell(0, "D1", 4)
series.data_points.add_data_point_for_treemap_series(value_cell)
value_cell = workbook.get_cell(0, "D2", 5)
series.data_points.add_data_point_for_treemap_series(value_cell)
value_cell = workbook.get_cell(0, "D3", 3)
series.data_points.add_data_point_for_treemap_series(value_cell)
value_cell = workbook.get_cell(0, "D4", 6)
series.data_points.add_data_point_for_treemap_series(value_cell)
value_cell = workbook.get_cell(0, "D5", 9)
series.data_points.add_data_point_for_treemap_series(value_cell)
value_cell = workbook.get_cell(0, "D6", 9)
series.data_points.add_data_point_for_treemap_series(value_cell)
value_cell = workbook.get_cell(0, "D7", 4)
series.data_points.add_data_point_for_treemap_series(value_cell)
value_cell = workbook.get_cell(0, "D8", 3)
series.data_points.add_data_point_for_treemap_series(value_cell)
series.parent_label_layout = charts.ParentLabelLayoutType.OVERLAPPING
presentation.save("Treemap.pptx", slides.export.SaveFormat.PPTX)
نتیجه:

ایجاد نمودارهای آبشاری
نمودار آبشاری نشان میدهد که تغییرات مثبت و منفی چگونه به مقدار نهایی کمک میکنند. بهعنوان مثال، تفکیک سود میتواند با درآمد شروع شود، هزینهها را کسر کند و سایر درآمدها را اضافه کند. ستونهای تغییر بین مقدار قبلی و مقدار جدید جاری شناور میشوند، در حالی که ستونهای مجموع از صفر تا مقدار انباشته شده گسترش مییابند.
مثال زیر مقادیر را بهواحد هزار دلار آمریکا استفاده میکند:
| دسته | مقدار کتابکار | نوع ستون |
|---|---|---|
| درآمد | 1000 | افزایش |
| هزینهٔ فروش | -400 | کاهش |
| سود ناخالص | 600 | جمع میانی |
| هزینههای عملیاتی | -200 | کاهش |
| سایر درآمدها | 50 | افزایش |
| سود خالص | 450 | جمع نهایی |
برای علامتگذاری یک نقطه بهعنوان جمع میانی یا نهایی، ویژگی set_as_total آن را به True تنظیم کنید. مقدار انباشتهٔ واقعی را در سلول کتابکار آن نقطه وارد کنید: 600 برای سود ناخالص (1000 - 400) و 450 برای سود خالص (600 - 200 + 50). این ویژگی ستون را بهعنوان مجموع علامتگذاری میکند؛ محاسبه یا پر کردن مقدار سلول توسط آن انجام نمیشود. از صفر بهعنوان جایگزین استفاده نکنید و مقدار دیگری برای نقطهٔ مجموع ارائه ندهید. یک ستون مجموع مقدار انباشته را بدون افزودن دوباره به مقدار جاری نمایش میدهد.
این مثال کامل C# یک نمودار را با عضو Waterfall از ChartType ایجاد میکند، دادههای پیشفرض را پاک میکند و کتابکار تعبیهشده را پر میکند. شاخص کاربرگ 0 اولین کاربرگ را انتخاب میکند؛ ستون A شامل نامهای دسته و ستون B شامل مقادیر است. هر سلول مقدار با add_data_point_for_waterfall_series اضافه میشود. شاخصهای نقطهٔ صفر‑مبنا 2 و 5 مجموعهای میانی و نهایی را مشخص میکنند. فعالسازی show_value مقادیر را روی ستونها نشان میدهد. هیچ ارائه یا کتابکاری ورودی لازم نیست.
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.WATERFALL, 20, 20, 680, 200)
chart.has_title = True
chart.chart_title.add_text_frame_for_overriding("Profit breakdown (USD thousands)")
chart.chart_title.overlay = False
chart.has_legend = False
chart.chart_data.series.clear()
chart.chart_data.categories.clear()
workbook = chart.chart_data.chart_data_workbook
worksheet_index = 0
workbook.clear(worksheet_index)
series_name_cell = workbook.get_cell(worksheet_index, 0, 1, "Profit")
series = chart.chart_data.series.add(series_name_cell, charts.ChartType.WATERFALL)
categories = ["Revenue", "Cost of sales", "Gross profit", "Operating expenses", "Other income", "Net profit"]
values = [1000, -400, 600, -200, 50, 450]
for i in range(len(categories)):
category_cell = workbook.get_cell(worksheet_index, i + 1, 0, categories[i])
chart.chart_data.categories.add(category_cell)
value_cell = workbook.get_cell(worksheet_index, i + 1, 1, values[i])
series.data_points.add_data_point_for_waterfall_series(value_cell)
# نقطههای سوم و ششم بهعنوان مجموعها محسوب میشوند، نه تغییرات اضافی.
series.data_points[2].set_as_total = True
series.data_points[5].set_as_total = True
series.show_connector_lines = True
series.labels.default_data_label_format.show_value = True
presentation.save("WaterfallChart.pptx", slides.export.SaveFormat.PPTX)
ویژگی سطح‑سری show_connector_lines را به True تنظیم کنید تا خطوطی که ستونهای متوالی را بههم وصل میکند نشان دهد و مقدار جاری را آسانتر دنبال کنید. برای مخفی کردن این خطوط، تخصیص در مثال را قبل از ذخیرهسازی به series.show_connector_lines = False تغییر دهید. این تنها قابلیت مشاهدهٔ خط را تغییر میدهد، نه داده یا مجموعها.
ارائهٔ ذخیرهشده سود ناخالص ۶۰۰ و سود خالص ۴۵۰ را نشان میدهد که هر دو مجموع از صفر استخراج شدهاند:

ایجاد نمودارهای سهام
نمودارهای سهام برای نمایش دادههای مالی مانند قیمتهای باز، بالا، پایین و بسته استفاده میشوند و به تحلیل روندهای بازار و نوسان کمک میکنند. این نمودارها بینشهای اساسی دربارهٔ عملکرد سهام ارائه میدهند و به سرمایهگذاران و تحلیلگران کمک میکنند تصمیمات آگاهانه بگیرند.
این مثال یک نمودار open‑high‑low‑close با چهار سری به ترتیب و سه دسته ایجاد میکند. ویژگی has_up_down_bars نوارهای بالا/پایین را فعال میکند و hi_low_lines_format خطوط بالا‑پایین را که دامنهٔ قیمتها را نشان میدهند کنترل میکند، در حالی که خطوط سریهای فردی و خطوط شبکه افقی جزئی مخفی هستند.
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.OPEN_HIGH_LOW_CLOSE, 20, 20, 500, 300, False)
workbook = chart.chart_data.chart_data_workbook
category_cell = workbook.get_cell(0, 1, 0, "A")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, 2, 0, "B")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, 3, 0, "C")
chart.chart_data.categories.add(category_cell)
series_name_cell = workbook.get_cell(0, 0, 1, "Open")
chart.chart_data.series.add(series_name_cell, charts.ChartType.OPEN_HIGH_LOW_CLOSE)
series_name_cell = workbook.get_cell(0, 0, 2, "High")
chart.chart_data.series.add(series_name_cell, charts.ChartType.OPEN_HIGH_LOW_CLOSE)
series_name_cell = workbook.get_cell(0, 0, 3, "Low")
chart.chart_data.series.add(series_name_cell, charts.ChartType.OPEN_HIGH_LOW_CLOSE)
series_name_cell = workbook.get_cell(0, 0, 4, "Close")
chart.chart_data.series.add(series_name_cell, charts.ChartType.OPEN_HIGH_LOW_CLOSE)
series = chart.chart_data.series[0]
value_cell = workbook.get_cell(0, 1, 1, 72)
series.data_points.add_data_point_for_stock_series(value_cell)
value_cell = workbook.get_cell(0, 2, 1, 25)
series.data_points.add_data_point_for_stock_series(value_cell)
value_cell = workbook.get_cell(0, 3, 1, 38)
series.data_points.add_data_point_for_stock_series(value_cell)
series = chart.chart_data.series[1]
value_cell = workbook.get_cell(0, 1, 2, 172)
series.data_points.add_data_point_for_stock_series(value_cell)
value_cell = workbook.get_cell(0, 2, 2, 57)
series.data_points.add_data_point_for_stock_series(value_cell)
value_cell = workbook.get_cell(0, 3, 2, 57)
series.data_points.add_data_point_for_stock_series(value_cell)
series = chart.chart_data.series[2]
value_cell = workbook.get_cell(0, 1, 3, 12)
series.data_points.add_data_point_for_stock_series(value_cell)
value_cell = workbook.get_cell(0, 2, 3, 12)
series.data_points.add_data_point_for_stock_series(value_cell)
value_cell = workbook.get_cell(0, 3, 3, 13)
series.data_points.add_data_point_for_stock_series(value_cell)
series = chart.chart_data.series[3]
value_cell = workbook.get_cell(0, 1, 4, 25)
series.data_points.add_data_point_for_stock_series(value_cell)
value_cell = workbook.get_cell(0, 2, 4, 38)
series.data_points.add_data_point_for_stock_series(value_cell)
value_cell = workbook.get_cell(0, 3, 4, 50)
series.data_points.add_data_point_for_stock_series(value_cell)
chart.chart_data.series_groups[0].up_down_bars.has_up_down_bars = True
chart.chart_data.series_groups[0].hi_low_lines_format.line.fill_format.fill_type = slides.FillType.SOLID
for stock_series in chart.chart_data.series:
stock_series.format.line.fill_format.fill_type = slides.FillType.NO_FILL
chart.axes.vertical_axis.minor_grid_lines_format.line.fill_format.fill_type = slides.FillType.NO_FILL
presentation.save("Stock-chart.pptx", slides.export.SaveFormat.PPTX)
نتیجه:

ایجاد نمودارهای جعبه‑و‑ویسکر
نمودارهای جعبه‑و‑ویسکر برای نمایش توزیع دادهها با خلاصهسازی معیارهای آماری کلیدی مانند میانه، چهارکها و نقاط احتمالی خارج استفاده میشوند. این نمودارها بهخصوص در تحلیل اکتشافی دادهها و مطالعات آماری برای درک سریع تغییرپذیری دادهها و شناسایی ناهنجاریها مفید هستند.
این مثال یک نمودار جعبه‑و‑ویسکر از شش مقدار ایجاد میکند. ویژگی quartile_method محاسبهٔ چهارک انحصاری را انتخاب میکند. مثال همچنین خطوط میانگین، نشانگرهای میانگین، نقاط داخلی و نقاط خارج را فعال میکند.
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.BOX_AND_WHISKER, 20, 20, 500, 300)
chart.chart_data.categories.clear()
chart.chart_data.series.clear()
workbook = chart.chart_data.chart_data_workbook
workbook.clear(0)
category_cell = workbook.get_cell(0, "A1", "Category 1")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "A2", "Category 2")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "A3", "Category 3")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "A4", "Category 4")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "A5", "Category 5")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "A6", "Category 6")
chart.chart_data.categories.add(category_cell)
series = chart.chart_data.series.add(charts.ChartType.BOX_AND_WHISKER)
series.quartile_method = charts.QuartileMethodType.EXCLUSIVE
series.show_mean_line = True
series.show_mean_markers = True
series.show_inner_points = True
series.show_outlier_points = True
value_cell = workbook.get_cell(0, "B1", 15)
series.data_points.add_data_point_for_box_and_whisker_series(value_cell)
value_cell = workbook.get_cell(0, "B2", 41)
series.data_points.add_data_point_for_box_and_whisker_series(value_cell)
value_cell = workbook.get_cell(0, "B3", 16)
series.data_points.add_data_point_for_box_and_whisker_series(value_cell)
value_cell = workbook.get_cell(0, "B4", 10)
series.data_points.add_data_point_for_box_and_whisker_series(value_cell)
value_cell = workbook.get_cell(0, "B5", 23)
series.data_points.add_data_point_for_box_and_whisker_series(value_cell)
value_cell = workbook.get_cell(0, "B6", 16)
series.data_points.add_data_point_for_box_and_whisker_series(value_cell)
presentation.save("BoxAndWhisker.pptx", slides.export.SaveFormat.PPTX)
ایجاد نمودارهای قیفی
نمودارهای قیفی برای تجسم فرآیندهایی استفاده میشوند که شامل مراحل متوالی هستند و حجم دادهها با پیشروی از یک مرحله به مرحله بعدی کاهش مییابد. این نمودارها بهویژه برای تحلیل نرخ تبدیل، شناسایی گلوگاهها و پیگیری کارایی فرآیندهای فروش یا بازاریابی مفیدند.
این مثال از add_chart برای افزودن یک نمودار قیفی به اولین اسلاید یک ارائه موجود استفاده میکند. دادههای پیشفرض را با شش دسته و مقادیری بین ۵۰ تا ۵۰۰ جایگزین میکند و سپس ارائهٔ بهروزرسانیشده را ذخیره میکند. ارائهٔ ورودی باید حداقل یک اسلاید داشته باشد.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation("test.pptx") as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.FUNNEL, 50, 50, 500, 400)
chart.chart_data.categories.clear()
chart.chart_data.series.clear()
workbook = chart.chart_data.chart_data_workbook
workbook.clear(0)
category_cell = workbook.get_cell(0, "A1", "Category 1")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "A2", "Category 2")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "A3", "Category 3")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "A4", "Category 4")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "A5", "Category 5")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "A6", "Category 6")
chart.chart_data.categories.add(category_cell)
series = chart.chart_data.series.add(charts.ChartType.FUNNEL)
value_cell = workbook.get_cell(0, "B1", 50)
series.data_points.add_data_point_for_funnel_series(value_cell)
value_cell = workbook.get_cell(0, "B2", 100)
series.data_points.add_data_point_for_funnel_series(value_cell)
value_cell = workbook.get_cell(0, "B3", 200)
series.data_points.add_data_point_for_funnel_series(value_cell)
value_cell = workbook.get_cell(0, "B4", 300)
series.data_points.add_data_point_for_funnel_series(value_cell)
value_cell = workbook.get_cell(0, "B5", 400)
series.data_points.add_data_point_for_funnel_series(value_cell)
value_cell = workbook.get_cell(0, "B6", 500)
series.data_points.add_data_point_for_funnel_series(value_cell)
presentation.save("Funnel.pptx", slides.export.SaveFormat.PPTX)
نتیجه:

ایجاد نمودارهای خورشیدی
نمودارهای خورشیدی برای تجسم دادههای سلسلهمراتبی استفاده میشوند؛ سطوح بهصورت حلقههای متحدوردم نمایش داده میشوند. این نمودارها روابط بخش‑به‑کل را نشان میدهند و برای نمایش دستهها و زیرمجموعههای تو در تو در قالبی واضح و فشرده ایدهآلاند.
این مثال یک نمودار خورشیدی با هشت برگ که در چهار ساقه و دو شاخه گروهبندی شدهاند ایجاد میکند. متد set_grouping_item ساقهها را در سطح گروهبندی ۱ و شاخهها را در سطح ۲ اختصاص میدهد. برچسبهای دستهبندی بخشها را شناسایی میکند و مقادیر اندازهٔ نسبی آنها را تعیین میکند.
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.SUNBURST, 20, 20, 500, 300)
chart.chart_data.categories.clear()
chart.chart_data.series.clear()
workbook = chart.chart_data.chart_data_workbook
workbook.clear(0)
# شاخه 1
category_cell = workbook.get_cell(0, "C1", "Leaf1")
leaf = chart.chart_data.categories.add(category_cell)
leaf.grouping_levels.set_grouping_item(1, "Stem1")
leaf.grouping_levels.set_grouping_item(2, "Branch1")
category_cell = workbook.get_cell(0, "C2", "Leaf2")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "C3", "Leaf3")
leaf = chart.chart_data.categories.add(category_cell)
leaf.grouping_levels.set_grouping_item(1, "Stem2")
category_cell = workbook.get_cell(0, "C4", "Leaf4")
chart.chart_data.categories.add(category_cell)
# شاخه 2
category_cell = workbook.get_cell(0, "C5", "Leaf5")
leaf = chart.chart_data.categories.add(category_cell)
leaf.grouping_levels.set_grouping_item(1, "Stem3")
leaf.grouping_levels.set_grouping_item(2, "Branch2")
category_cell = workbook.get_cell(0, "C6", "Leaf6")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "C7", "Leaf7")
leaf = chart.chart_data.categories.add(category_cell)
leaf.grouping_levels.set_grouping_item(1, "Stem4")
category_cell = workbook.get_cell(0, "C8", "Leaf8")
chart.chart_data.categories.add(category_cell)
series = chart.chart_data.series.add(charts.ChartType.SUNBURST)
series.labels.default_data_label_format.show_category_name = True
value_cell = workbook.get_cell(0, "D1", 4)
series.data_points.add_data_point_for_sunburst_series(value_cell)
value_cell = workbook.get_cell(0, "D2", 5)
series.data_points.add_data_point_for_sunburst_series(value_cell)
value_cell = workbook.get_cell(0, "D3", 3)
series.data_points.add_data_point_for_sunburst_series(value_cell)
value_cell = workbook.get_cell(0, "D4", 6)
series.data_points.add_data_point_for_sunburst_series(value_cell)
value_cell = workbook.get_cell(0, "D5", 9)
series.data_points.add_data_point_for_sunburst_series(value_cell)
value_cell = workbook.get_cell(0, "D6", 9)
series.data_points.add_data_point_for_sunburst_series(value_cell)
value_cell = workbook.get_cell(0, "D7", 4)
series.data_points.add_data_point_for_sunburst_series(value_cell)
value_cell = workbook.get_cell(0, "D8", 3)
series.data_points.add_data_point_for_sunburst_series(value_cell)
presentation.save("Sunburst.pptx", slides.export.SaveFormat.PPTX)
نتیجه:

ایجاد نمودارهای هیستوگرام
نمودارهای هیستوگرام نشان میدهند که مقادیر عددی چگونه در بازهها (bins) توزیع میشوند. برای گزارشهای ماهانهٔ زمان پردازش سفارش، از همان عرض bin و آستانهها استفاده کنید تا بازهها سازگار بمانند و توزیعها آسانتر مقایسه شوند.
محور افقی را با aggregation_type به یک حالت از AxisAggregationType تنظیم کنید. ویژگی bin_width تنها برای BY_BIN_WIDTH اعمال میشود؛ number_of_bins تنها برای BY_NUMBER_OF_BINS اعمال میشود. از AUTOMATIC استفاده کنید تا نمودار خود بهصورت خودکار binها را انتخاب کند.
استفاده از عرض ثابت bin
این مثال زمانهای پردازش را به بازههای ۱۰‑دقیقهای گروهبندی میکند، بهطوری که باینهای جداگانهای برای زمانهای برابر یا کمتر از ۱۰ دقیقه و بالای ۴۰ دقیقه وجود دارد. این باینها را با is_underflow_bin و is_overflow_bin فعال کنید. هنگام ارائهٔ آستانههای صریح برای underflow_bin و overflow_bin، ویژگیهای is_automatic_underflow_bin و is_automatic_overflow_bin را به 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.HISTOGRAM, 20, 20, 680, 200)
chart.has_legend = False
chart.has_title = 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.HISTOGRAM)
values = [5, 10, 10, 11, 15, 20, 20, 21, 25, 30, 30, 31, 35, 40, 40, 41, 50]
for i, value in enumerate(values):
value_cell = workbook.get_cell(0, i, 0, value)
series.data_points.add_data_point_for_histogram_series(value_cell)
axis = chart.axes.horizontal_axis
axis.aggregation_type = charts.AxisAggregationType.BY_BIN_WIDTH
axis.bin_width = 10
axis.is_underflow_bin = True
axis.is_automatic_underflow_bin = False
axis.underflow_bin = 10
axis.is_overflow_bin = True
axis.is_automatic_overflow_bin = False
axis.overflow_bin = 40
presentation.save("Histogram-bin-width.pptx", slides.export.SaveFormat.PPTX)
ارائه در PowerPoint نمایش میدهد که تعداد باینها 3, 4, 4, 4, و 2 است. باین زیر جریان شامل 5, 10, 10 است، بنابراین آستانهٔ آن شامل میشود. باین بالای جریان تنها 41, 50 را شامل میشود، بنابراین آستانهٔ آن استثنائی است؛ هر دو مقدار برابر 40 در بازهٔ قبلی باقی میمانند. باینهای داخلی مقادیر بزرگتر از حد پایین و کمتر یا مساوی با حد بالایی را در بر میگیرند.

مشخص کردن تعداد باینها
برای داشتن سطح جزئیات ثابت بهجای بازههای ثابت، میتوانید برای همان داده پنج باین درخواست کنید. این مثال باینهای زیر و بالای جریان را غیرفعال میگذارد. نمودار عرض را از بازهٔ دادهها تعیین میکند، بنابراین مرزها میتوانند بین گزارشها تغییر کنند.
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.HISTOGRAM, 20, 20, 680, 200)
chart.has_legend = False
chart.has_title = 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.HISTOGRAM)
values = [5, 10, 10, 11, 15, 20, 20, 21, 25, 30, 30, 31, 35, 40, 40, 41, 50]
for i, value in enumerate(values):
value_cell = workbook.get_cell(0, i, 0, value)
series.data_points.add_data_point_for_histogram_series(value_cell)
axis = chart.axes.horizontal_axis
axis.aggregation_type = charts.AxisAggregationType.BY_NUMBER_OF_BINS
axis.number_of_bins = 5
presentation.save("Histogram-bin-count.pptx", slides.export.SaveFormat.PPTX)
پنج باین تعداد 4, 4, 4, 4, و 1 را دارند. این توزیع را با نتیجهٔ عرض ثابت بالا مقایسه کنید: مقادیر ورودی یکساناند، اما مرزها متفاوتاند.

ایجاد نمودارهای راداری
نمودارهای راداری برای نمایش دادههای چندمتغیره در قالب دو‑بعدی استفاده میشوند و امکان مقایسهٔ آسان چند متغیر بهصورت همزمان را فراهم میکنند. این نمودارها بهویژه برای شناسایی الگوها، قوتها و ضعفها در میان شاخصها یا ویژگیهای عملکردی مختلف مفیدند.
این مثال از add_chart برای ایجاد یک نمودار راداری با سریها و دستههای پیشفرض استفاده میکند و سپس ارائه را بهصورت PPTX ذخیره میکند.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
slide.shapes.add_chart(charts.ChartType.RADAR, 20, 20, 500, 300)
presentation.save("Radar-chart.pptx", slides.export.SaveFormat.PPTX)
نتیجه:

ایجاد نمودارهای چنددستهای
نمودارهای چنددستهای برای نمایش دادههایی استفاده میشوند که شامل بیش از یک گروهبندی دستهای هستند و به شما امکان میدهد مقادیر را در ابعاد متعدد بهصورت همزمان مقایسه کنید. این نمودارها بهویژه زمانی مفیدند که نیاز به تحلیل روندها و روابط در مجموعه دادههای چندلایه و پیچیده داشته باشید.
این مثال یک نمودار ستون خوشهای با هشت دسته که در چهار جفت مرتب شدهاند ایجاد میکند. متد set_grouping_item به هر جفت یک برچسب مشترک در سطح گروهبندی ۱ میدهد و محور دستهبندی را با هر دو برچسب فردی و گروهی تولید میکند.
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, 20, 20, 500, 300)
chart.chart_data.series.clear()
chart.chart_data.categories.clear()
workbook = chart.chart_data.chart_data_workbook
workbook.clear(0)
worksheet_index = 0
category_cell = workbook.get_cell(0, "c2", "A")
category = chart.chart_data.categories.add(category_cell)
category.grouping_levels.set_grouping_item(1, "Group1")
category_cell = workbook.get_cell(0, "c3", "B")
category = chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "c4", "C")
category = chart.chart_data.categories.add(category_cell)
category.grouping_levels.set_grouping_item(1, "Group2")
category_cell = workbook.get_cell(0, "c5", "D")
category = chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "c6", "E")
category = chart.chart_data.categories.add(category_cell)
category.grouping_levels.set_grouping_item(1, "Group3")
category_cell = workbook.get_cell(0, "c7", "F")
category = chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(0, "c8", "G")
category = chart.chart_data.categories.add(category_cell)
category.grouping_levels.set_grouping_item(1, "Group4")
category_cell = workbook.get_cell(0, "c9", "H")
category = chart.chart_data.categories.add(category_cell)
series_name_cell = workbook.get_cell(0, "D1", "Series 1")
series = chart.chart_data.series.add(series_name_cell, charts.ChartType.CLUSTERED_COLUMN)
value_cell = workbook.get_cell(worksheet_index, "D2", 10)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, "D3", 20)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, "D4", 30)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, "D5", 40)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, "D6", 50)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, "D7", 60)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, "D8", 70)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, "D9", 80)
series.data_points.add_data_point_for_bar_series(value_cell)
presentation.save("AsposeChart.pptx", slides.export.SaveFormat.PPTX)
نتیجه:

ایجاد نمودارهای نقشهای
نمودارهای نقشهای برای تجسم دادههای جغرافیایی با نقشهبرداری اطلاعات به مکانهای خاصی مانند کشورها، ایالتها یا شهرها استفاده میشوند. این نمودارها بهویژه برای تحلیل روندهای منطقهای، دادههای جمعیتی و توزیعهای فضایی بهصورت واضح و بصری جذاب مفیدند.
این مثال از add_chart برای ایجاد یک نمودار نقشهای با دادههای جغرافیایی پیشفرض استفاده میکند و آن را برای مشاهده در PowerPoint ذخیره میکند.
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.MAP, 20, 20, 500, 300)
presentation.save("mapChart.pptx", slides.export.SaveFormat.PPTX)
نتیجه:

Note
تصویر بالا نشاندهندهٔ ارائهٔ ذخیرهشده است که در PowerPoint باز شده است. Aspose.Slides نمودار نقشه و دادههای آن را بهدرستی مینویسد، اما خود نمودار نقشه را رسم نمیکند: وقتی اسلایدی که شامل یک نمودار نقشه است به تصویر رندر میشود یا به PDF یا SVG تبدیل میشود، ناحیه نمودار خالی میشود. سایر شکلها در همان اسلاید تحت تأثیر قرار نمیگیرند.ایجاد نمودارهای ترکیبی
نمودار ترکیبی (یا combo chart) دو یا چند نوع نمودار را در یک گراف ترکیب میکند. این نمودار به شما امکان میدهد تا تفاوتها بین دو یا چند مجموعه داده را برجسته، مقایسه یا بررسی کنید و روابط بین آنها را شناسایی کنید.

این مثال دو سری ستون خوشهای را با یک سری خطی در چهار دسته ترکیب میکند. ستونها از محور عمودی اصلی استفاده میکنند، در حالی که plot_on_second_axis خط را بر روی محور عمودی ثانویه در سمت راست قرار میدهد. توابع کمکی عنوان، افسانه، برچسبهای محور و خطوط شبکه را تنظیم میکنند.
import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.charts as charts
def create_combo_chart():
with slides.Presentation() as presentation:
chart = create_chart_with_first_series(presentation.slides[0])
add_second_series_to_chart(chart)
add_third_series_to_chart(chart)
set_primary_axes_format(chart)
set_secondary_axes_format(chart)
presentation.save("combo-chart.pptx", slides.export.SaveFormat.PPTX)
def create_chart_with_first_series(slide):
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 50, 50, 600, 400)
chart.has_title = True
chart.chart_title.add_text_frame_for_overriding("Chart Title")
chart.chart_title.overlay = False
portion_format = chart.chart_title.text_frame_for_overriding.paragraphs[0].paragraph_format.default_portion_format
portion_format.font_bold = slides.NullableBool.FALSE
portion_format.font_height = 18
chart.legend.position = charts.LegendPositionType.BOTTOM
chart.legend.text_format.portion_format.font_height = 12
chart.chart_data.series.clear()
chart.chart_data.categories.clear()
workbook = chart.chart_data.chart_data_workbook
worksheet_index = 0
category_cell = workbook.get_cell(worksheet_index, 1, 0, "Category 1")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(worksheet_index, 2, 0, "Category 2")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(worksheet_index, 3, 0, "Category 3")
chart.chart_data.categories.add(category_cell)
category_cell = workbook.get_cell(worksheet_index, 4, 0, "Category 4")
chart.chart_data.categories.add(category_cell)
series_name_cell = workbook.get_cell(worksheet_index, 0, 1, "Series 1")
series = chart.chart_data.series.add(series_name_cell, chart.type)
series.parent_series_group.overlap = -25
series.parent_series_group.gap_width = 220
value_cell = workbook.get_cell(worksheet_index, 1, 1, 4.3)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 2, 1, 2.5)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 3, 1, 3.5)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 4, 1, 4.5)
series.data_points.add_data_point_for_bar_series(value_cell)
return chart
def add_second_series_to_chart(chart):
workbook = chart.chart_data.chart_data_workbook
worksheet_index = 0
series_name_cell = workbook.get_cell(worksheet_index, 0, 2, "Series 2")
series = chart.chart_data.series.add(series_name_cell, charts.ChartType.CLUSTERED_COLUMN)
series.parent_series_group.overlap = -25
series.parent_series_group.gap_width = 220
value_cell = workbook.get_cell(worksheet_index, 1, 2, 2.4)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 2, 2, 4.4)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 3, 2, 1.8)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 4, 2, 2.8)
series.data_points.add_data_point_for_bar_series(value_cell)
def add_third_series_to_chart(chart):
workbook = chart.chart_data.chart_data_workbook
worksheet_index = 0
series_name_cell = workbook.get_cell(worksheet_index, 0, 3, "Series 3")
series = chart.chart_data.series.add(series_name_cell, charts.ChartType.LINE)
value_cell = workbook.get_cell(worksheet_index, 1, 3, 2.0)
series.data_points.add_data_point_for_line_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 2, 3, 2.0)
series.data_points.add_data_point_for_line_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 3, 3, 3.0)
series.data_points.add_data_point_for_line_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 4, 3, 5.0)
series.data_points.add_data_point_for_line_series(value_cell)
series.plot_on_second_axis = True
def set_primary_axes_format(chart):
horizontal_axis = chart.axes.horizontal_axis
horizontal_axis.text_format.portion_format.font_height = 12
horizontal_axis.format.line.fill_format.fill_type = slides.FillType.NO_FILL
set_axis_title(horizontal_axis, "X Axis")
vertical_axis = chart.axes.vertical_axis
vertical_axis.text_format.portion_format.font_height = 12
vertical_axis.format.line.fill_format.fill_type = slides.FillType.NO_FILL
set_axis_title(vertical_axis, "Y Axis 1")
major_grid_lines_format = vertical_axis.major_grid_lines_format.line.fill_format
major_grid_lines_format.fill_type = slides.FillType.SOLID
major_grid_lines_format.solid_fill_color.color = draw.Color.from_argb(217, 217, 217)
def set_secondary_axes_format(chart):
secondary_horizontal_axis = chart.axes.secondary_horizontal_axis
secondary_horizontal_axis.position = charts.AxisPositionType.BOTTOM
secondary_horizontal_axis.cross_type = charts.CrossesType.MAXIMUM
secondary_horizontal_axis.is_visible = False
secondary_horizontal_axis.major_grid_lines_format.line.fill_format.fill_type = slides.FillType.NO_FILL
secondary_horizontal_axis.minor_grid_lines_format.line.fill_format.fill_type = slides.FillType.NO_FILL
secondary_vertical_axis = chart.axes.secondary_vertical_axis
secondary_vertical_axis.position = charts.AxisPositionType.RIGHT
secondary_vertical_axis.text_format.portion_format.font_height = 12
secondary_vertical_axis.format.line.fill_format.fill_type = slides.FillType.NO_FILL
secondary_vertical_axis.major_grid_lines_format.line.fill_format.fill_type = slides.FillType.NO_FILL
secondary_vertical_axis.minor_grid_lines_format.line.fill_format.fill_type = slides.FillType.NO_FILL
set_axis_title(secondary_vertical_axis, "Y Axis 2")
def set_axis_title(axis, axis_title):
axis.has_title = True
axis.title.overlay = False
title_portion_format = axis.title.add_text_frame_for_overriding(axis_title).paragraphs[0].paragraph_format.default_portion_format
title_portion_format.font_bold = slides.NullableBool.FALSE
title_portion_format.font_height = 12
create_combo_chart()
بهروزرسانی نمودارها
Aspose.Slides for Python via .NET به شما امکان میدهد نمودارهای PowerPoint را با اصلاح دادههای نمودار، قالببندی و استایل بهروزرسانی کنید. این قابلیت فرآیند نگهداری ارائهها با محتوای پویا را ساده میسازد و اطمینان میدهد که نمودارها بهدقت دادهها و استانداردهای بصری جاری را بازتاب میدهند.
این مثال نمودار با نام “My chart” را در اولین اسلاید یک ارائه موجود بهروزرسانی میکند. این مثال به دو سری ستونی با سه نقطه دادهٔ هر کدام نیاز دارد که برچسبهای دسته در ستون A و نامهای سری در ردیف اول اولین کاربرگ باشند. مثال از get_cell برای تغییر سلولهای کتابکار استفاده میکند، مقادیر سریها را بهروزرسانی میکند، یک سری سوم اضافه میکند و نوع نمودار را از طریق type به سیلندرهای خوشهای تغییر میدهد.
import aspose.slides as slides
import aspose.slides.charts as charts
chart_name = "My chart"
with slides.Presentation("ExistingChart.pptx") as presentation:
slide = presentation.slides[0]
for shape in slide.shapes:
if isinstance(shape, charts.Chart) and shape.name == chart_name:
chart = shape
worksheet_index = 0
workbook = chart.chart_data.chart_data_workbook
workbook.get_cell(worksheet_index, 1, 0, "Modified Category 1")
workbook.get_cell(worksheet_index, 2, 0, "Modified Category 2")
series = chart.chart_data.series[0]
workbook.get_cell(worksheet_index, 0, 1, "New_Series 1")
series.data_points[0].value.data = 90
series.data_points[1].value.data = 123
series.data_points[2].value.data = 44
series = chart.chart_data.series[1]
workbook.get_cell(worksheet_index, 0, 2, "New_Series 2")
series.data_points[0].value.data = 23
series.data_points[1].value.data = 67
series.data_points[2].value.data = 99
series_name_cell = workbook.get_cell(worksheet_index, 0, 3, "Series 3")
series = chart.chart_data.series.add(series_name_cell, chart.type)
value_cell = workbook.get_cell(worksheet_index, 1, 3, 20)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 2, 3, 50)
series.data_points.add_data_point_for_bar_series(value_cell)
value_cell = workbook.get_cell(worksheet_index, 3, 3, 30)
series.data_points.add_data_point_for_bar_series(value_cell)
chart.type = charts.ChartType.CLUSTERED_CYLINDER
presentation.save("AsposeChartModified.pptx", slides.export.SaveFormat.PPTX)
تنظیم بازه داده برای یک نمودار
برای بررسی بازهای که قبلاً توسط یک نمودار موجود استفاده شده است، به Retrieve a Chart’s Data Range مراجعه کنید.
Aspose.Slides for Python via .NET انعطافپذیری تعریف یک بازه دادهٔ خاص از یک کاربرگ بهعنوان منبع دادهٔ نمودار شما را فراهم میکند. این به این معنی است که میتوانید بهصورت مستقیم بخشی از کاربرگ خود را به نمودار نگاشت کنید و کنترل کنید کدام سلولها به سریها و دستههای نمودار کمک میکنند. در نتیجه میتوانید بهراحتی نمودارهای خود را با آخرین تغییرات داده در کاربرگ هماهنگ و بهروزرسانی کنید و اطمینان حاصل کنید که ارائههای PowerPoint شما اطلاعات جاری و دقیق را نمایش میدهند.
این مثال از set_range برای تنظیم منبع دادهٔ نمودار با نام “My chart” در اولین اسلاید یک ارائه موجود به Sheet1!A1:B4 استفاده میکند. کتابکار نمودار باید آن کاربرگ و یک بازهٔ پرشده با سرعنوان سری در ردیف اول، برچسبهای دسته در ستون A و سه مقدار در ستون B داشته باشد.
import aspose.slides as slides
import aspose.slides.charts as charts
chart_name = "My chart"
with slides.Presentation("ExistingChart.pptx") as presentation:
slide = presentation.slides[0]
for shape in slide.shapes:
if isinstance(shape, charts.Chart) and shape.name == chart_name:
chart = shape
chart.chart_data.set_range("Sheet1!A1:B4")
presentation.save("SetDataRange.pptx", slides.export.SaveFormat.PPTX)
استفاده از نشانگرهای پیشفرض در نمودارها
وقتی از نشانگرهای پیشفرض در نمودارها استفاده میکنید، هر سری نمودار بهصورت خودکار یک نماد نشانگر پیشفرض متفاوت دریافت میکند.
این مثال از add_chart برای ایجاد یک نمودار با دو سری خطی و یک افسانه استفاده میکند. تنظیمات marker نمادهای نشانگر اختصاص دادهشده بهصورت خودکار را حفظ میکند. سری اول شامل یک مقدار منفی و یک مقدار گمشده که با None نمایش داده میشود، در حالی که سری دوم برای هر دسته مقدار دارد.
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_WITH_MARKERS, 10, 10, 400, 400)
chart.chart_data.series.clear()
chart.chart_data.categories.clear()
workbook = chart.chart_data.chart_data_workbook
series_name_cell = workbook.get_cell(0, 0, 1, "Series 1")
series = chart.chart_data.series.add(series_name_cell, chart.type)
category_cell = workbook.get_cell(0, 1, 0, "C1")
chart.chart_data.categories.add(category_cell)
value_cell = workbook.get_cell(0, 1, 1, 24)
series.data_points.add_data_point_for_line_series(value_cell)
category_cell = workbook.get_cell(0, 2, 0, "C2")
chart.chart_data.categories.add(category_cell)
value_cell = workbook.get_cell(0, 2, 1, 23)
series.data_points.add_data_point_for_line_series(value_cell)
category_cell = workbook.get_cell(0, 3, 0, "C3")
chart.chart_data.categories.add(category_cell)
value_cell = workbook.get_cell(0, 3, 1, -10)
series.data_points.add_data_point_for_line_series(value_cell)
category_cell = workbook.get_cell(0, 4, 0, "C4")
chart.chart_data.categories.add(category_cell)
value_cell = workbook.get_cell(0, 4, 1, None)
series.data_points.add_data_point_for_line_series(value_cell)
series_name_cell = workbook.get_cell(0, 0, 2, "Series 2")
second_series = chart.chart_data.series.add(series_name_cell, chart.type)
value_cell = workbook.get_cell(0, 1, 2, 30)
second_series.data_points.add_data_point_for_line_series(value_cell)
value_cell = workbook.get_cell(0, 2, 2, 10)
second_series.data_points.add_data_point_for_line_series(value_cell)
value_cell = workbook.get_cell(0, 3, 2, 60)
second_series.data_points.add_data_point_for_line_series(value_cell)
value_cell = workbook.get_cell(0, 4, 2, 40)
second_series.data_points.add_data_point_for_line_series(value_cell)
chart.has_legend = True
chart.legend.overlay = False
presentation.save("DefaultMarkersInChart.pptx", slides.export.SaveFormat.PPTX)
پرسشهای متداول
کدام انواع نمودارها توسط Aspose.Slides for Python via .NET پشتیبانی میشوند؟
Aspose.Slides for Python via .NET انواع گستردهای از نمودارها شامل نوار، خط، دایرهای، مساحت، پراکنده، هیستوگرام، رادار و بسیاری دیگر را پشتیبانی میکند. این انعطافپذیری به شما اجازه میدهد مناسبترین نوع نمودار را برای نیازهای تجسم دادهٔ خود انتخاب کنید.
چگونه یک نمودار جدید به اسلاید اضافه کنم؟
برای افزودن یک نمودار، ابتدا یک نمونه از کلاس Presentation ایجاد کنید، اسلاید مورد نظر را با استفاده از شاخص آن بازیابید، سپس متد افزودن نمودار را صدا بزنید و نوع نمودار و دادههای اولیه را مشخص کنید. این فرآیند نمودار را بهصورت مستقیم در ارائهٔ شما ادغام میکند.
چگونگی بهروزرسانی دادههای نمایش دادهشده در یک نمودار؟
میتوانید دادهٔ یک نمودار را با دسترسی به کتابکار دادهٔ آن (ChartDataWorkbook)، حذف هر سری و دستهٔ پیشفرض، و سپس افزودن دادههای سفارشی خود بهروزرسانی کنید. این امکان برنامهنویسی شما را قادر میسازد تا نمودار را با جدیدترین دادهها تازه کنید.
آیا امکان سفارشیسازی ظاهر نمودار وجود دارد؟
بله، Aspose.Slides for Python via .NET گزینههای سفارشیسازی گستردهای ارائه میدهد. میتوانید رنگها، قلمها، برچسبها، افسانهها و سایر عناصر قالببندی را برای تطبیق ظاهر نمودار با الزامات طراحی خاص خود تغییر دهید.