ایجاد یا بهروزرسانی نمودارهای ارائه PowerPoint در اندروید
نمای کلی
این مقاله راهنمای جامعی برای ایجاد و سفارشیسازی نمودارها با استفاده از Aspose.Slides برای اندروید از طریق Java ارائه میدهد. شما خواهید آموخت که چگونه بهصورت برنامهنویسی یک نمودار را به اسلاید افزوده، دادهها را به آن اختصاص دهید و گزینههای قالببندی مختلفی را برای مطابقت با نیازهای طراحی خود اعمال کنید. در طول مقاله، مثالهای کدی مفصل هر گام را نشان میدهند؛ از مقداردهی اولیه ارائه و شیء نمودار تا پیکربندی سریها، محورها و علائم توضیحی. با دنبال کردن این راهنما، درک solidی از نحوه ادغام تولید پویا نمودارها در برنامههای اندروید خود خواهید یافت و فرآیند ایجاد ارائههای مبتنی بر داده را ساده میکنید.
ایجاد یک نمودار
نمودارها به افراد کمک میکنند تا دادهها را بهسرعت تجسم کرده و بینشهایی بهدست آورند که ممکن است از جدول یا صفحهگسترده بهوضوح آشکار نشود.
چرا نمودار ایجاد کنیم؟
با استفاده از نمودارها میتوانید:
- حجم زیاد دادهها را در یک اسلاید تکدسته جمعآوری، فشرده یا خلاصه کنید؛
- الگوها و روندهای داده را آشکار کنید؛
- جهت و شتاب داده را در طول زمان یا نسبت به یک واحد اندازهگیری خاص استنتاج کنید؛
- نقاط دور افتاده، ناهنجاریها، انحرافات، خطاها و دادههای بیمعنی را شناسایی کنید؛
- دادههای پیچیده را ارتباطی یا ارائه کنید.
در PowerPoint میتوانید از عملکرد Insert برای ایجاد نمودارها استفاده کنید که الگوهایی برای طراحی انواع مختلف نمودارها فراهم میکند. با Aspose.Slides میتوانید هم نمودارهای استاندارد (بر پایه انواع نمودارهای محبوب) و هم نمودارهای سفارشی ایجاد کنید.
Note
از شمارشگر ChartType در بسته com.aspose.slides استفاده کنید. مقادیر این شمارشگر به انواع مختلف نمودارها مربوط میشوند.ایجاد نمودارهای ستونی خوشهای
این مثال از addChart برای ایجاد یک نمودار ستونی خوشهای استفاده میکند که دو سری را در سه دسته مقایسه میکند. سریها از پرکنندههای قرمز و سبز استفاده میکنند و برچسبهای جداگانه نام دستهها، نام سریها و مقادیر را نشان میدهند. شاخص کاربرگ ۰ به اولین شیت موجود در کتاب کار نمودار توکار اشاره دارد.
import com.aspose.slides.*;
import android.graphics.Color;
Presentation presentation = new Presentation();
try
{
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 300);
chart.getChartTitle().addTextFrameForOverriding("Sample Title");
chart.getChartTitle().getTextFrameForOverriding().getTextFrameFormat().setCenterText(NullableBool.True);
chart.getChartTitle().setHeight(20);
chart.setTitle(true);
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
int worksheetIndex = 0;
chart.getChartData().getSeries().clear();
chart.getChartData().getCategories().clear();
IChartDataCell seriesNameCell = workbook.getCell(worksheetIndex, 0, 1, "Series 1");
chart.getChartData().getSeries().add(seriesNameCell, chart.getType());
seriesNameCell = workbook.getCell(worksheetIndex, 0, 2, "Series 2");
chart.getChartData().getSeries().add(seriesNameCell, chart.getType());
IChartDataCell categoryCell = workbook.getCell(worksheetIndex, 1, 0, "Category 1");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(worksheetIndex, 2, 0, "Category 2");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(worksheetIndex, 3, 0, "Category 3");
chart.getChartData().getCategories().add(categoryCell);
IChartSeries series = chart.getChartData().getSeries().get_Item(0);
IChartDataCell valueCell = workbook.getCell(worksheetIndex, 1, 1, 20);
series.getDataPoints().addDataPointForBarSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, 2, 1, 50);
series.getDataPoints().addDataPointForBarSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, 3, 1, 30);
series.getDataPoints().addDataPointForBarSeries(valueCell);
series.getFormat().getFill().setFillType(FillType.Solid);
series.getFormat().getFill().getSolidFillColor().setColor(Color.RED);
series = chart.getChartData().getSeries().get_Item(1);
valueCell = workbook.getCell(worksheetIndex, 1, 2, 30);
series.getDataPoints().addDataPointForBarSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, 2, 2, 10);
series.getDataPoints().addDataPointForBarSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, 3, 2, 60);
series.getDataPoints().addDataPointForBarSeries(valueCell);
series.getFormat().getFill().setFillType(FillType.Solid);
series.getFormat().getFill().getSolidFillColor().setColor(Color.rgb(0, 128, 0));
IDataLabel label = series.getDataPoints().get_Item(0).getLabel();
label.getDataLabelFormat().setShowCategoryName(true);
label = series.getDataPoints().get_Item(1).getLabel();
label.getDataLabelFormat().setShowSeriesName(true);
label = series.getDataPoints().get_Item(2).getLabel();
label.getDataLabelFormat().setShowValue(true);
label.getDataLabelFormat().setShowSeriesName(true);
label.getDataLabelFormat().setSeparator("/");
presentation.save("AsposeChart.pptx", SaveFormat.Pptx);
}
finally
{
presentation.dispose();
}
نتیجه:

ایجاد نمودارهای پراکندگی
نمودارهای پراکندگی (که بهعنوان scatter plot یا نمودار x‑y نیز شناخته میشوند) اغلب برای بررسی الگوها یا نشان دادن همبستگی بین دو متغیر استفاده میشوند.
از نمودار پراکندگی زمانی استفاده کنید که:
- دادههای عددی جفت شده دارید؛
- دو متغیر دارید که بهراحتی میتوانند با هم جفت شوند؛
- میخواهید تعیین کنید آیا دو متغیر بهیکدیگر مرتبط هستند یا نه؛
- متغیر مستقلی دارید که برای یک متغیر وابسته مقادیر متعدد دارد.
این مثال دو مجموعه مقادیر x‑y را رسم میکند. سری اول از خطوط مستقیم با نشانگرهای ستارهای استفاده میکند، در حالی که سری دوم از خطوط صاف با نشانگرهای دایرهای استفاده میکند؛ هر دو از اندازه نشانگر ۱۰ استفاده میکنند که با setSize تنظیم شده است. متد setSymbol شکل نشانگر را کنترل میکند.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try
{
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.ScatterWithSmoothLines, 20, 20, 500, 300);
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
int worksheetIndex = 0;
chart.getChartData().getSeries().clear();
IChartDataCell seriesNameCell = workbook.getCell(worksheetIndex, 1, 1, "Series 1");
chart.getChartData().getSeries().add(seriesNameCell, chart.getType());
seriesNameCell = workbook.getCell(worksheetIndex, 1, 3, "Series 2");
chart.getChartData().getSeries().add(seriesNameCell, chart.getType());
IChartSeries series = chart.getChartData().getSeries().get_Item(0);
IChartDataCell xValueCell = workbook.getCell(worksheetIndex, 2, 1, 1);
IChartDataCell yValueCell = workbook.getCell(worksheetIndex, 2, 2, 3);
series.getDataPoints().addDataPointForScatterSeries(xValueCell, yValueCell);
xValueCell = workbook.getCell(worksheetIndex, 3, 1, 2);
yValueCell = workbook.getCell(worksheetIndex, 3, 2, 10);
series.getDataPoints().addDataPointForScatterSeries(xValueCell, yValueCell);
series.setType(ChartType.ScatterWithStraightLinesAndMarkers);
series.getMarker().setSize(10);
series.getMarker().setSymbol(MarkerStyleType.Star);
series = chart.getChartData().getSeries().get_Item(1);
xValueCell = workbook.getCell(worksheetIndex, 2, 3, 5);
yValueCell = workbook.getCell(worksheetIndex, 2, 4, 2);
series.getDataPoints().addDataPointForScatterSeries(xValueCell, yValueCell);
xValueCell = workbook.getCell(worksheetIndex, 3, 3, 3);
yValueCell = workbook.getCell(worksheetIndex, 3, 4, 1);
series.getDataPoints().addDataPointForScatterSeries(xValueCell, yValueCell);
xValueCell = workbook.getCell(worksheetIndex, 4, 3, 2);
yValueCell = workbook.getCell(worksheetIndex, 4, 4, 2);
series.getDataPoints().addDataPointForScatterSeries(xValueCell, yValueCell);
xValueCell = workbook.getCell(worksheetIndex, 5, 3, 5);
yValueCell = workbook.getCell(worksheetIndex, 5, 4, 1);
series.getDataPoints().addDataPointForScatterSeries(xValueCell, yValueCell);
series.getMarker().setSize(10);
series.getMarker().setSymbol(MarkerStyleType.Circle);
presentation.save("AsposeChart.pptx", SaveFormat.Pptx);
}
finally
{
presentation.dispose();
}
نتیجه:

ایجاد نمودارهای دایرهای
نمودارهای دایرهای بهترین استفاده را برای نمایش رابطهٔ بخش به کل در دادهها دارند، بهویژه زمانی که دادهها شامل برچسبهای دستهای با مقادیر عددی هستند. اگر دادههای شما شامل بخشها یا برچسبهای بسیار زیاد باشد، شاید بهتر باشد بهجای آن از نمودار میلهای استفاده کنید.
این مثال یک نمودار دایرهای با سه مقدار فصلی ایجاد میکند. هر قطعه دارای پرکننده و حاشیهٔ سفارشی است و برچسبها ترکیبیهای مختلفی از مقادیر، درصدها و اطلاعات سری را نشان میدهند. متد setFirstSliceAngle اولین قطعه را در زاویهٔ ۱۸۰ درجه آغاز میکند.
import com.aspose.slides.*;
import android.graphics.Color;
Presentation presentation = new Presentation();
try
{
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Pie, 20, 20, 500, 300);
chart.getChartTitle().addTextFrameForOverriding("Sample Title");
chart.getChartTitle().getTextFrameForOverriding().getTextFrameFormat().setCenterText(NullableBool.True);
chart.getChartTitle().setHeight(20);
chart.setTitle(true);
chart.getChartData().getSeries().get_Item(0).getLabels().getDefaultDataLabelFormat().setShowValue(true);
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
int worksheetIndex = 0;
chart.getChartData().getSeries().clear();
chart.getChartData().getCategories().clear();
IChartDataCell categoryCell = workbook.getCell(0, 1, 0, "1st Qtr");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(0, 2, 0, "2nd Qtr");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(0, 3, 0, "3rd Qtr");
chart.getChartData().getCategories().add(categoryCell);
IChartDataCell seriesNameCell = workbook.getCell(0, 0, 1, "Series 1");
IChartSeries series = chart.getChartData().getSeries().add(seriesNameCell, chart.getType());
IChartDataCell valueCell = workbook.getCell(worksheetIndex, 1, 1, 20);
series.getDataPoints().addDataPointForPieSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, 2, 1, 50);
series.getDataPoints().addDataPointForPieSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, 3, 1, 30);
series.getDataPoints().addDataPointForPieSeries(valueCell);
chart.getChartData().getSeriesGroups().get_Item(0).setColorVaried(true);
IChartDataPoint firstSlice = series.getDataPoints().get_Item(0);
firstSlice.getFormat().getFill().setFillType(FillType.Solid);
firstSlice.getFormat().getFill().getSolidFillColor().setColor(Color.CYAN);
firstSlice.getFormat().getLine().getFillFormat().setFillType(FillType.Solid);
firstSlice.getFormat().getLine().getFillFormat().getSolidFillColor().setColor(Color.rgb(128, 128, 128));
firstSlice.getFormat().getLine().setWidth(3.0);
firstSlice.getFormat().getLine().setStyle(LineStyle.ThinThick);
firstSlice.getFormat().getLine().setDashStyle(LineDashStyle.LargeDash);
IChartDataPoint secondSlice = series.getDataPoints().get_Item(1);
secondSlice.getFormat().setFill().setFillType(FillType.Solid);
secondSlice.getFormat().getFill().getSolidFillColor().setColor(Color.rgb(165, 42, 42));
secondSlice.getFormat().getLine().getFillFormat().setFillType(FillType.Solid);
secondSlice.getFormat().getLine().getFillFormat().getSolidFillColor().setColor(Color.BLUE);
secondSlice.getFormat().getLine().setWidth(3.0);
secondSlice.getFormat().getLine().setStyle(LineStyle.Single);
secondSlice.getFormat().getLine().setDashStyle(LineDashStyle.LargeDashDot);
IChartDataPoint thirdSlice = series.getDataPoints().get_Item(2);
thirdSlice.getFormat().getFill().setFillType(FillType.Solid);
thirdSlice.getFormat().getFill().getSolidFillColor().setColor(Color.rgb(255, 127, 80));
thirdSlice.getFormat().getLine().getFillFormat().setFillType(FillType.Solid);
thirdSlice.getFormat().getLine().getFillFormat().getSolidFillColor().setColor(Color.RED);
thirdSlice.getFormat().getLine().setWidth(2.0);
thirdSlice.getFormat().getLine().setStyle(LineStyle.ThinThin);
thirdSlice.getFormat().getLine().setDashStyle(LineDashStyle.LargeDashDotDot);
IDataLabel firstLabel = series.getDataPoints().get_Item(0).getLabel();
firstLabel.getDataLabelFormat().setShowValue(true);
IDataLabel secondLabel = series.getDataPoints().get_Item(1).getLabel();
secondLabel.getDataLabelFormat().setShowValue(true);
secondLabel.getDataLabelFormat().setShowLegendKey(true);
secondLabel.getDataLabelFormat().setShowPercentage(true);
IDataLabel thirdLabel = series.getDataPoints().get_Item(2).getLabel();
thirdLabel.getDataLabelFormat().setShowSeriesName(true);
thirdLabel.getDataLabelFormat().setShowPercentage(true);
series.getLabels().getDefaultDataLabelFormat().setShowLeaderLines(true);
chart.getChartData().getSeriesGroups().get_Item(0).setFirstSliceAngle(180);
presentation.save("PieChart.pptx", SaveFormat.Pptx);
}
finally
{
presentation.dispose();
}
نتیجه:

برای بهبود خوانایی برچسبهای خارج از دایره، به مثال Format Leader Lines مراجعه کنید تا برچسبها موقعیتگذاری شوند و رنگ، عرض، شفافیت و سبک خطها سفارشی شود.
ایجاد نمودارهای خطی
نمودارهای خطی (که بهعنوان line graph نیز شناخته میشوند) بهترین استفاده را در موقعیتهایی دارند که میخواهید تغییرات مقدار را در طول زمان نشان دهید. با استفاده از یک نمودار خطی میتوانید مقدار زیادی داده را یکباره مقایسه کنید، تغییرات و روندها را در زمان پیگیری کنید، ناهنجاریهای سری دادهها را برجسته کنید و غیره.
این مثال از addChart برای ایجاد یک نمودار خطی با سریها و دستههای پیشفرض استفاده میکند و سپس ارائه را به صورت PPTX ذخیره میکند.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try
{
ISlide slide = presentation.getSlides().get_Item(0);
IChart lineChart = slide.getShapes().addChart(ChartType.Line, 20, 20, 500, 300);
presentation.save("lineChart.pptx", SaveFormat.Pptx);
}
finally
{
presentation.dispose();
}
بهطور پیشفرض، نقاط یک نمودار خطی با خطوط پیوستهٔ مستقیم بههم پیوست میشوند. اگر میخواهید بهجای آن نقاط با خطهای نقطهچین بههم متصل شوند، متد setDashStyle را با مقداری از LineDashStyle فراخوانی کنید:
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try
{
ISlide slide = presentation.getSlides().get_Item(0);
IChart lineChart = slide.getShapes().addChart(ChartType.Line, 20, 20, 500, 300);
for (IChartSeries series : lineChart.getChartData().getSeries())
{
series.getFormat().getLine().setDashStyle(LineDashStyle.Dash);
}
}
finally
{
presentation.dispose();
}
نتیجه:

ایجاد نمودارهای درختنقشه (Tree Map)
نمودارهای درختنقشه بهخصوص برای دادههای فروش مفید هستند وقتی میخواهید اندازه نسبی دستههای داده را نشان دهید و سریعاً به مواردی که سهم بزرگتری در هر دسته دارند، توجه کنید.
این مثال یک درختنقشه با هشت برگ که به چهار ساقه و دو شاخه گروهبندی شدهاند، میسازد. متد setGroupingItem ساقهها را در سطح گروهبندی ۱ و شاخهها را در سطح ۲ اختصاص میدهد. مقادیر، اندازه نسبی مستطیلها را تعیین میکند، در حالی که برچسبهای دسته و برچسبهای والد همپوشانیشده سلسله مراتب را نشان میدهند.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try
{
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Treemap, 20, 20, 500, 300);
chart.getChartData().getCategories().clear();
chart.getChartData().getSeries().clear();
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
workbook.clear(0);
// شاخه 1
IChartDataCell categoryCell = workbook.getCell(0, "C1", "Leaf1");
IChartCategory leaf = chart.getChartData().getCategories().add(categoryCell);
leaf.getGroupingLevels().setGroupingItem(1, "Stem1");
leaf.getGroupingLevels().setGroupingItem(2, "Branch1");
categoryCell = workbook.getCell(0, "C2", "Leaf2");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(0, "C3", "Leaf3");
leaf = chart.getChartData().getCategories().add(categoryCell);
leaf.getGroupingLevels().setGroupingItem(1, "Stem2");
categoryCell = workbook.getCell(0, "C4", "Leaf4");
chart.getChartData().getCategories().add(categoryCell);
// شاخه 2
categoryCell = workbook.getCell(0, "C5", "Leaf5");
leaf = chart.getChartData().getCategories().add(categoryCell);
leaf.getGroupingLevels().setGroupingItem(1, "Stem3");
leaf.getGroupingLevels().setGroupingItem(2, "Branch2");
categoryCell = workbook.getCell(0, "C6", "Leaf6");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(0, "C7", "Leaf7");
leaf = chart.getChartData().getCategories().add(categoryCell);
leaf.getGroupingLevels().setGroupingItem(1, "Stem4");
categoryCell = workbook.getCell(0, "C8", "Leaf8");
chart.getChartData().getCategories().add(categoryCell);
IChartSeries series = chart.getChartData().getSeries().add(ChartType.Treemap);
series.getLabels().getDefaultDataLabelFormat().setShowCategoryName(true);
IChartDataCell valueCell = workbook.getCell(0, "D1", 4);
series.getDataPoints().addDataPointForTreemapSeries(valueCell);
valueCell = workbook.getCell(0, "D2", 5);
series.getDataPoints().addDataPointForTreemapSeries(valueCell);
valueCell = workbook.getCell(0, "D3", 3);
series.getDataPoints().addDataPointForTreemapSeries(valueCell);
valueCell = workbook.getCell(0, "D4", 6);
series.getDataPoints().addDataPointForTreemapSeries(valueCell);
valueCell = workbook.getCell(0, "D5", 9);
series.getDataPoints().addDataPointForTreemapSeries(valueCell);
valueCell = workbook.getCell(0, "D6", 9);
series.getDataPoints().addDataPointForTreemapSeries(valueCell);
valueCell = workbook.getCell(0, "D7", 4);
series.getDataPoints().addDataPointForTreemapSeries(valueCell);
valueCell = workbook.getCell(0, "D8", 3);
series.getDataPoints().addDataPointForTreemapSeries(valueCell);
series.setParentLabelLayout(ParentLabelLayoutType.Overlapping);
presentation.save("Treemap.pptx", SaveFormat.Pptx);
}
finally
{
presentation.dispose();
}
نتیجه:

ایجاد نمودارهای آبشاری (Waterfall)
نمودار آبشاری نشان میدهد که تغییرات مثبت و منفی چگونه به مقدار نهایی منجر میشوند. بهعنوان مثال، یک تجزیه سود میتواند با درآمد شروع شود، هزینهها را کسر کند و سپس درآمدهای دیگر را اضافه کند. ستونهای تغییر بین مقدار قبلی و مقدار جدید شناور میشوند، در حالی که ستونهای مجموع از صفر تا مقدار انباشته شده امتداد مییابند.
مثال زیر از مقادیر بهواحد هزار دلار آمریکا استفاده میکند:
| Category | Workbook value | Column type |
|---|---|---|
| Revenue | 1000 | Increase |
| Cost of sales | -400 | Decrease |
| Gross profit | 600 | Intermediate total |
| Operating expenses | -200 | Decrease |
| Other income | 50 | Increase |
| Net profit | 450 | Final total |
برای علامتگذاری یک نقطه بهعنوان مجموع میانی یا نهایی، متد setSetAsTotal را با true فراخوانی کنید. مقدار واقعی انباشتهشده را در سلول کاربرگ آن نقطه قرار دهید: 600 برای سود ناخالص (1000 - 400) و 450 برای سود خالص (600 - 200 + 50). این متد ستون را بهعنوان مجموع علامتگذاری میکند؛ محاسبه یا پر کردن مقدار سلول را انجام نمیدهد. از صفر بهعنوان جایگزین استفاده نکنید یا مقدار دیگری برای نقطهٔ مجموع فراهم نکنید. یک ستون مجموع مقدار انباشتهشده را بدون افزودن دوباره به مقدار جاری نمایش میدهد.
این مثال کامل Java یک نمودار با استفاده از عضو Waterfall از ChartType ایجاد میکند، دادههای پیشفرض را پاک میکند و کتاب کار توکار را پر میکند. شاخص کاربرگ 0 اولین کاربرگ را انتخاب میکند؛ ستون A شامل نامهای دسته و ستون B شامل مقادیر است. هر سلول مقدار با addDataPointForWaterfallSeries اضافه میشود. اندیسهای نقطهٔ صفر‑مبنا 2 و 5 بهترتیب مجموع میانی و نهایی را شناسایی میکنند. فراخوانی setShowValue با true مقادیر را روی ستونها نمایش میدهد. هیچ ارائه یا کتاب کاری ورودی لازم نیست.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try
{
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Waterfall, 20, 20, 680, 200);
chart.setTitle(true);
chart.getChartTitle().addTextFrameForOverriding("Profit breakdown (USD thousands)");
chart.getChartTitle().setOverlay(false);
chart.setLegend(false);
chart.getChartData().getSeries().clear();
chart.getChartData().getCategories().clear();
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
int worksheetIndex = 0;
workbook.clear(worksheetIndex);
IChartDataCell seriesNameCell = workbook.getCell(worksheetIndex, 0, 1, "Profit");
IChartSeries series = chart.getChartData().getSeries().add(seriesNameCell, ChartType.Waterfall);
String[] categories = new String[] { "Revenue", "Cost of sales", "Gross profit", "Operating expenses", "Other income", "Net profit" };
double[] values = new double[] { 1000, -400, 600, -200, 50, 450 };
for (int i = 0; i < categories.length; i++)
{
IChartDataCell categoryCell = workbook.getCell(worksheetIndex, i + 1, 0, categories[i]);
chart.getChartData().getCategories().add(categoryCell);
IChartDataCell valueCell = workbook.getCell(worksheetIndex, i + 1, 1, values[i]);
series.getDataPoints().addDataPointForWaterfallSeries(valueCell);
}
// نقطههای سوم و ششم بهعنوان مجموعها هستند، نه تغییرات اضافی.
series.getDataPoints().get_Item(2).setSetAsTotal(true);
series.getDataPoints().get_Item(5).setSetAsTotal(true);
series.setShowConnectorLines(true);
series.getLabels().getDefaultDataLabelFormat().setShowValue(true);
presentation.save("WaterfallChart.pptx", SaveFormat.Pptx);
}
finally
{
presentation.dispose();
}
متد سطح‑سری setShowConnectorLines را با true صدا بزنید تا خطوطی که ستونهای پی در پی را بههم وصل میکند نشان داده شود و مقدار جاری راحتتر دنبال شود. برای مخفیکردن این خطوط، فراخوانی متد را در مثال با series.setShowConnectorLines(false); قبل از ذخیرهسازی تعویض کنید. این فقط نمایش خط را تغییر میدهد، نه داده یا مجموعها.
ارائهٔ ذخیرهشده سود ناخالص ۶۰۰ و سود خالص ۴۵۰ را نشان میدهد که هر دو مجموع از صفر استخراج شدهاند:

ایجاد نمودارهای سهام (Stock)
نمودارهای سهام برای نمایش دادههای مالی مانند قیمتهای باز، بالا، پایین و بسته استفاده میشوند و به تحلیل روندهای بازار و نوسانپذیری کمک میکنند. این نمودارها بینشهای مهمی درباره عملکرد سهام بهدست میدهند و به سرمایهگذاران و تحلیلگران در اتخاذ تصمیمات آگاهانه کمک میکنند.
این مثال یک نمودار Open‑High‑Low‑Close با چهار سری به ترتیب ذکر شده و سه دسته را میسازد. متد setUpDownBars نوارهای بالا/پایین را فعال میکند و getHiLowLinesFormat خطوط High‑Low را که بازهٔ قیمتی را نشان میدهند، کنترل میکند؛ در حالی که خطوط سریهای جداگانه و خطوط شبکه افقی جزئی مخفی هستند.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try
{
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.OpenHighLowClose, 20, 20, 500, 300, false);
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
IChartDataCell categoryCell = workbook.getCell(0, 1, 0, "A");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(0, 2, 0, "B");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(0, 3, 0, "C");
chart.getChartData().getCategories().add(categoryCell);
IChartDataCell seriesNameCell = workbook.getCell(0, 0, 1, "Open");
chart.getChartData().getSeries().add(seriesNameCell, ChartType.OpenHighLowClose);
seriesNameCell = workbook.getCell(0, 0, 2, "High");
chart.getChartData().getSeries().add(seriesNameCell, ChartType.OpenHighLowClose);
seriesNameCell = workbook.getCell(0, 0, 3, "Low");
chart.getChartData().getSeries().add(seriesNameCell, ChartType.OpenHighLowClose);
seriesNameCell = workbook.getCell(0, 0, 4, "Close");
chart.getChartData().getSeries().add(seriesNameCell, ChartType.OpenHighLowClose);
IChartSeries series = chart.getChartData().getSeries().get_Item(0);
IChartDataCell valueCell = workbook.getCell(0, 1, 1, 72);
series.getDataPoints().addDataPointForStockSeries(valueCell);
valueCell = workbook.getCell(0, 2, 1, 25);
series.getDataPoints().addDataPointForStockSeries(valueCell);
valueCell = workbook.getCell(0, 3, 1, 38);
series.getDataPoints().addDataPointForStockSeries(valueCell);
series = chart.getChartData().getSeries().get_Item(1);
valueCell = workbook.getCell(0, 1, 2, 172);
series.getDataPoints().addDataPointForStockSeries(valueCell);
valueCell = workbook.getCell(0, 2, 2, 57);
series.getDataPoints().addDataPointForStockSeries(valueCell);
valueCell = workbook.getCell(0, 3, 2, 57);
series.getDataPoints().addDataPointForStockSeries(valueCell);
series = chart.getChartData().getSeries().get_Item(2);
valueCell = workbook.getCell(0, 1, 3, 12);
series.getDataPoints().addDataPointForStockSeries(valueCell);
valueCell = workbook.getCell(0, 2, 3, 12);
series.getDataPoints().addDataPointForStockSeries(valueCell);
valueCell = workbook.getCell(0, 3, 3, 13);
series.getDataPoints().addDataPointForStockSeries(valueCell);
series = chart.getChartData().getSeries().get_Item(3);
valueCell = workbook.getCell(0, 1, 4, 25);
series.getDataPoints().addDataPointForStockSeries(valueCell);
valueCell = workbook.getCell(0, 2, 4, 38);
series.getDataPoints().addDataPointForStockSeries(valueCell);
valueCell = workbook.getCell(0, 3, 4, 50);
series.getDataPoints().addDataPointForStockSeries(valueCell);
chart.getChartData().getSeriesGroups().get_Item(0).getUpDownBars().setUpDownBars(true);
chart.getChartData().getSeriesGroups().get_Item(0).getHiLowLinesFormat().getLine().getFillFormat().setFillType(FillType.Solid);
for (IChartSeries stockSeries : chart.getChartData().getSeries())
{
stockSeries.getFormat().getLine().getFillFormat().setFillType(FillType.NoFill);
}
chart.getAxes().getVerticalAxis().getMinorGridLinesFormat().getLine().getFillFormat().setFillType(FillType.NoFill);
presentation.save("Stock-chart.pptx", SaveFormat.Pptx);
}
finally
{
presentation.dispose();
}
نتیجه:

ایجاد نمودارهای جعبهای و ویسکر (Box and Whisker)
نمودارهای جعبهای و ویسکر برای نمایش توزیع دادهها از طریق خلاصهسازی معیارهای آماری کلیدی مانند میانه، چارکها و نقاط دور افتاده استفاده میشوند. این نمودارها در تحلیلهای اکتشافی داده و مطالعات آماری برای درک سریع تغییرپذیری دادهها و شناسایی ناهنجاریها بسیار مفیدند.
این مثال یک نمودار جعبهای و ویسکر از شش مقدار میسازد. متد setQuartileMethod محاسبهٔ چارکهای انحصاری را انتخاب میکند. مثال همچنین خطوط میانگین، نشانگرهای میانگین، نقاط داخلی و نقاط دور افتاده را فعال میکند.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try
{
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.BoxAndWhisker, 20, 20, 500, 300);
chart.getChartData().getCategories().clear();
chart.getChartData().getSeries().clear();
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
workbook.clear(0);
IChartDataCell categoryCell = workbook.getCell(0, "A1", "Category 1");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(0, "A2", "Category 2");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(0, "A3", "Category 3");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(0, "A4", "Category 4");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(0, "A5", "Category 5");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(0, "A6", "Category 6");
chart.getChartData().getCategories().add(categoryCell);
IChartSeries series = chart.getChartData().getSeries().add(ChartType.BoxAndWhisker);
series.setQuartileMethod(QuartileMethodType.Exclusive);
series.setShowMeanLine(true);
series.setShowMeanMarkers(true);
series.setShowInnerPoints(true);
series.setShowOutlierPoints(true);
IChartDataCell valueCell = workbook.getCell(0, "B1", 15);
series.getDataPoints().addDataPointForBoxAndWhiskerSeries(valueCell);
valueCell = workbook.getCell(0, "B2", 41);
series.getDataPoints().addDataPointForBoxAndWhiskerSeries(valueCell);
valueCell = workbook.getCell(0, "B3", 16);
series.getDataPoints().addDataPointForBoxAndWhiskerSeries(valueCell);
valueCell = workbook.getCell(0, "B4", 10);
series.getDataPoints().addDataPointForBoxAndWhiskerSeries(valueCell);
valueCell = workbook.getCell(0, "B5", 23);
series.getDataPoints().addDataPointForBoxAndWhiskerSeries(valueCell);
valueCell = workbook.getCell(0, "B6", 16);
series.getDataPoints().addDataPointForBoxAndWhiskerSeries(valueCell);
presentation.save("BoxAndWhisker.pptx", SaveFormat.Pptx);
}
finally
{
presentation.dispose();
}
ایجاد نمودارهای قیفی (Funnel)
نمودارهای قیفی برای تجسم فرآیندهایی استفاده میشوند که شامل مراحل متوالی هستند و حجم دادهها در هر مرحله کاهش مییابد. این نمودارها برای تحلیل نرخ تبدیل، شناسایی گلوگاهها و پیگیری کارایی فرآیندهای فروش یا بازاریابی بسیار مفیدند.
این مثال از addChart برای افزودن یک نمودار قیفی به اولین اسلاید یک ارائهٔ موجود استفاده میکند. دادههای پیشفرض را با شش دسته و مقادیری بین ۵۰ تا ۵۰۰ جایگزین میکند و سپس ارائه بهروزشده را ذخیره میکند. ارائهٔ ورودی باید حداقل یک اسلاید داشته باشد.
import com.aspose.slides.*;
Presentation presentation = new Presentation("test.pptx");
try
{
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Funnel, 50, 50, 500, 400);
chart.getChartData().getCategories().clear();
chart.getChartData().getSeries().clear();
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
workbook.clear(0);
IChartDataCell categoryCell = workbook.getCell(0, "A1", "Category 1");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(0, "A2", "Category 2");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(0, "A3", "Category 3");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(0, "A4", "Category 4");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(0, "A5", "Category 5");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(0, "A6", "Category 6");
chart.getChartData().getCategories().add(categoryCell);
IChartSeries series = chart.getChartData().getSeries().add(ChartType.Funnel);
IChartDataCell valueCell = workbook.getCell(0, "B1", 50);
series.getDataPoints().addDataPointForFunnelSeries(valueCell);
valueCell = workbook.getCell(0, "B2", 100);
series.getDataPoints().addDataPointForFunnelSeries(valueCell);
valueCell = workbook.getCell(0, "B3", 200);
series.getDataPoints().addDataPointForFunnelSeries(valueCell);
valueCell = workbook.getCell(0, "B4", 300);
series.getDataPoints().addDataPointForFunnelSeries(valueCell);
valueCell = workbook.getCell(0, "B5", 400);
series.getDataPoints().addDataPointForFunnelSeries(valueCell);
valueCell = workbook.getCell(0, "B6", 500);
series.getDataPoints().addDataPointForFunnelSeries(valueCell);
presentation.save("Funnel.pptx", SaveFormat.Pptx);
}
finally
{
presentation.dispose();
}
نتیجه:

ایجاد نمودارهای خورشیدی (Sunburst)
نمودارهای خورشیدی برای تجسم دادههای سلسلهمراتبی استفاده میشوند؛ سطوح بهصورت حلقههای متحدمرکزی نمایش داده میشوند. این نمودارها رابطهٔ بخش‑به‑کل را نشان میدهند و برای نمایش دستهها و زیرمجموعههای تو در تو در قالبی واضح و فشرده ایدهآل هستند.
این مثال یک نمودار خورشیدی با هشت برگ که به چهار ساقه و دو شاخه گروهبندی شدهاند، میسازد. متد setGroupingItem ساقهها را در سطح گروهبندی ۱ و شاخهها را در سطح ۲ اختصاص میدهد. برچسبهای دسته بخشها را شناسایی میکنند و مقادیر، اندازهٔ نسبی آنها را تعیین میکنند.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try
{
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Sunburst, 20, 20, 500, 300);
chart.getChartData().getCategories().clear();
chart.getChartData().getSeries().clear();
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
workbook.clear(0);
// شاخه 1
IChartDataCell categoryCell = workbook.getCell(0, "C1", "Leaf1");
IChartCategory leaf = chart.getChartData().getCategories().add(categoryCell);
leaf.getGroupingLevels().setGroupingItem(1, "Stem1");
leaf.getGroupingLevels().setGroupingItem(2, "Branch1");
categoryCell = workbook.getCell(0, "C2", "Leaf2");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(0, "C3", "Leaf3");
leaf = chart.getChartData().getCategories().add(categoryCell);
leaf.getGroupingLevels().setGroupingItem(1, "Stem2");
categoryCell = workbook.getCell(0, "C4", "Leaf4");
chart.getChartData().getCategories().add(categoryCell);
// شاخه 2
categoryCell = workbook.getCell(0, "C5", "Leaf5");
leaf = chart.getChartData().getCategories().add(categoryCell);
leaf.getGroupingLevels().setGroupingItem(1, "Stem3");
leaf.getGroupingLevels().setGroupingItem(2, "Branch2");
categoryCell = workbook.getCell(0, "C6", "Leaf6");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(0, "C7", "Leaf7");
leaf = chart.getChartData().getCategories().add(categoryCell);
leaf.getGroupingLevels().setGroupingItem(1, "Stem4");
categoryCell = workbook.getCell(0, "C8", "Leaf8");
chart.getChartData().getCategories().add(categoryCell);
IChartSeries series = chart.getChartData().getSeries().add(ChartType.Sunburst);
series.getLabels().getDefaultDataLabelFormat().setShowCategoryName(true);
IChartDataCell valueCell = workbook.getCell(0, "D1", 4);
series.getDataPoints().addDataPointForSunburstSeries(valueCell);
valueCell = workbook.getCell(0, "D2", 5);
series.getDataPoints().addDataPointForSunburstSeries(valueCell);
valueCell = workbook.getCell(0, "D3", 3);
series.getDataPoints().addDataPointForSunburstSeries(valueCell);
valueCell = workbook.getCell(0, "D4", 6);
series.getDataPoints().addDataPointForSunburstSeries(valueCell);
valueCell = workbook.getCell(0, "D5", 9);
series.getDataPoints().addDataPointForSunburstSeries(valueCell);
valueCell = workbook.getCell(0, "D6", 9);
series.getDataPoints().addDataPointForSunburstSeries(valueCell);
valueCell = workbook.getCell(0, "D7", 4);
series.getDataPoints().addDataPointForSunburstSeries(valueCell);
valueCell = workbook.getCell(0, "D8", 3);
series.getDataPoints().addDataPointForSunburstSeries(valueCell);
presentation.save("Sunburst.pptx", SaveFormat.Pptx);
}
finally
{
presentation.dispose();
}
نتیجه:

ایجاد نمودارهای هیستوگرام (Histogram)
نمودارهای هیستوگرام نشان میدهند که مقادیر عددی چگونه در بازههای (bins) مختلف توزیع میشوند. برای گزارشهای ماهانه درباره زمانهای پردازش سفارش، از عرض bin و آستانههای یکسان استفاده کنید تا بازهها ثابت بمانند و مقایسه توزیعها آسان شود.
متد setAggregationType را بر محور افقی با یک حالت از AxisAggregationType فراخوانی کنید. setBinWidth تنها برای ByBinWidth اعمال میشود؛ setNumberOfBins تنها برای ByNumberOfBins کار میکند. برای اجازه به نمودار جهت انتخاب خودکار binها، از Automatic استفاده کنید.
استفاده از عرض ثابت برای bin
این مثال زمانهای پردازش را به بازههای ۱۰‑دقیقهای تقسیم میکند، بهگونهای که binهای جداگانهای برای زمانهای ≤ ۱۰ دقیقه و > ۴۰ دقیقه وجود دارد. این binها را با setUnderflowBin و setOverflowBin فعال کنید. هنگامی که آستانههای صریح را از طریق setUnderflowBin و setOverflowBin فراهم میکنید، متدهای setAutomaticUnderflowBin و setAutomaticOverflowBin را با false فراخوانی کنید.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try
{
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Histogram, 20, 20, 680, 200);
chart.setLegend(false);
chart.setTitle(false);
chart.getChartData().getCategories().clear();
chart.getChartData().getSeries().clear();
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
workbook.clear(0);
IChartSeries series = chart.getChartData().getSeries().add(ChartType.Histogram);
double[] values = { 5, 10, 10, 11, 15, 20, 20, 21, 25, 30, 30, 31, 35, 40, 40, 41, 50 };
for (int i = 0; i < values.length; i++)
{
IChartDataCell valueCell = workbook.getCell(0, i, 0, values[i]);
series.getDataPoints().addDataPointForHistogramSeries(valueCell);
}
IAxis axis = chart.getAxes().getHorizontalAxis();
axis.setAggregationType(AxisAggregationType.ByBinWidth);
axis.setBinWidth(10);
axis.setUnderflowBin(true);
axis.setAutomaticUnderflowBin(false);
axis.setUnderflowBin(10);
axis.setOverflowBin(true);
axis.setAutomaticOverflowBin(false);
axis.setOverflowBin(40);
presentation.save("Histogram-bin-width.pptx", SaveFormat.Pptx);
}
finally
{
presentation.dispose();
}
ارائهٔ نمایشدادهشده در PowerPoint تعداد binهای ۳، ۴، ۴، ۴ و ۲ را نشان میدهد. bin زیر جریان شامل 5, 10, 10 است، بنابراین آستانهٔ آن شامل مقادیر میشود. bin بالایی فقط 41, 50 را شامل میشود، بنابراین آستانهٔ آن مستثنی است؛ هر دو مقدار برابر با 40 در بازهٔ قبلی میمانند. binهای داخلی مقادیر بزرگتر از حد پایین و کمتر یا برابر با حد بالایی خود را شامل میشوند.

مشخصکردن تعداد binها
برای سطح ثابت جزئیات بهجای بازههای ثابت، برای همان دادهها پنج bin درخواست کنید. این مثال binهای زیر و بالایی را غیرفعال میگذارد. نمودار عرض را از بازهٔ دادهها محاسبه میکند، بنابراین مرزها میتوانند بین گزارشها تغییر کنند.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try
{
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Histogram, 20, 20, 680, 200);
chart.setLegend(false);
chart.setTitle(false);
chart.getChartData().getCategories().clear();
chart.getChartData().getSeries().clear();
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
workbook.clear(0);
IChartSeries series = chart.getChartData().getSeries().add(ChartType.Histogram);
double[] values = { 5, 10, 10, 11, 15, 20, 20, 21, 25, 30, 30, 31, 35, 40, 40, 41, 50 };
for (int i = 0; i < values.length; i++)
{
IChartDataCell valueCell = workbook.getCell(0, i, 0, values[i]);
series.getDataPoints().addDataPointForHistogramSeries(valueCell);
}
IAxis axis = chart.getAxes().getHorizontalAxis();
axis.setAggregationType(AxisAggregationType.ByNumberOfBins);
axis.setNumberOfBins(5);
presentation.save("Histogram-bin-count.pptx", SaveFormat.Pptx);
}
finally
{
presentation.dispose();
}
پنج bin دارای تعداد ۴، ۴، ۴، ۴ و ۱ هستند. این توزیع را با نتیجهٔ عرض ثابت بالا مقایسه کنید: مقادیر ورودی یکساناند، اما مرزها متفاوتاند.

ایجاد نمودارهای رادار (Radar)
نمودارهای رادار برای نمایش دادههای چندمتغیره در قالب دو‑بعدی استفاده میشوند و امکان مقایسهٔ همزمان چندین متغیر را فراهم میکنند. این نمودارها برای شناسایی الگوها، قوتها و ضعفها در میان معیارهای عملکرد متعدد یا ویژگیها بسیار مفیدند.
این مثال از addChart برای ایجاد یک نمودار رادار با سریها و دستههای پیشفرض استفاده میکند و سپس ارائه را به صورت PPTX ذخیره میکند.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try
{
ISlide slide = presentation.getSlides().get_Item(0);
slide.getShapes().addChart(ChartType.Radar, 20, 20, 500, 300);
presentation.save("Radar-chart.pptx", SaveFormat.Pptx);
}
finally
{
presentation.dispose();
}
نتیجه:

ایجاد نمودارهای چنددستهای (Multi-Category)
نمودارهای چنددستهای برای نمایش دادههایی که شامل بیش از یک گروهبندی دستهای هستند بهکار میروند و امکان مقایسهٔ مقادیر در چندین بُعد بهصورت همزمان را فراهم میکنند. این نمودارها بهویژه زمانی مفیدند که نیاز به تحلیل روندها و روابط در دیتاستهای چند لایه پیچیده داشته باشید.
این مثال یک نمودار ستونی خوشهای با هشت دسته که به چهار جفت مرتب شدهاند، میسازد. متد setGroupingItem به هر جفت یک برچسب مشترک در سطح گروهبندی ۱ میدهد و محور دسته را هم با برچسبهای فردی و هم با برچسبهای گروهی عرضه میکند.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try
{
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 300);
chart.getChartData().getSeries().clear();
chart.getChartData().getCategories().clear();
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
workbook.clear(0);
int worksheetIndex = 0;
IChartDataCell categoryCell = workbook.getCell(0, "c2", "A");
IChartCategory category = chart.getChartData().getCategories().add(categoryCell);
category.getGroupingLevels().setGroupingItem(1, "Group1");
categoryCell = workbook.getCell(0, "c3", "B");
category = chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(0, "c4", "C");
category = chart.getChartData().getCategories().add(categoryCell);
category.getGroupingLevels().setGroupingItem(1, "Group2");
categoryCell = workbook.getCell(0, "c5", "D");
category = chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(0, "c6", "E");
category = chart.getChartData().getCategories().add(categoryCell);
category.getGroupingLevels().setGroupingItem(1, "Group3");
categoryCell = workbook.getCell(0, "c7", "F");
category = chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(0, "c8", "G");
category = chart.getChartData().getCategories().add(categoryCell);
category.getGroupingLevels().setGroupingItem(1, "Group4");
categoryCell = workbook.getCell(0, "c9", "H");
category = chart.getChartData().getCategories().add(categoryCell);
IChartDataCell seriesNameCell = workbook.getCell(0, "D1", "Series 1");
IChartSeries series = chart.getChartData().getSeries().add(seriesNameCell, ChartType.ClusteredColumn);
IChartDataCell valueCell = workbook.getCell(worksheetIndex, "D2", 10);
series.getDataPoints().addDataPointForBarSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, "D3", 20);
series.getDataPoints().addDataPointForBarSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, "D4", 30);
series.getDataPoints().addDataPointForBarSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, "D5", 40);
series.getDataPoints().addDataPointForBarSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, "D6", 50);
series.getDataPoints().addDataPointForBarSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, "D7", 60);
series.getDataPoints().addDataPointForBarSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, "D8", 70);
series.getDataPoints().addDataPointForBarSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, "D9", 80);
series.getDataPoints().addDataPointForBarSeries(valueCell);
presentation.save("AsposeChart.pptx", SaveFormat.Pptx);
}
finally
{
presentation.dispose();
}
نتیجه:

ایجاد نمودارهای نقشه (Map)
نمودارهای نقشه برای تجسم دادههای جغرافیایی با نگاشت اطلاعات به مکانهای خاصی مانند کشورها، ایالتها یا شهرها استفاده میشوند. این نمودارها برای تحلیل روندهای منطقهای، دادههای جمعیتشناسی و توزیعهای مکانی بهصورت واضح و جذاب بصری بسیار مفیدند.
این مثال از addChart برای ایجاد یک نمودار نقشه با دادههای جغرافیایی پیشفرض استفاده میکند و آن را برای مشاهده در PowerPoint ذخیره مینماید.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try
{
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Map, 20, 20, 500, 300);
presentation.save("mapChart.pptx", SaveFormat.Pptx);
}
finally
{
presentation.dispose();
}
نتیجه:

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

این مثال دو سری ستونی خوشهای را با یک سری خطی در چهار دسته ترکیب میکند. ستونها از محور عمودی اصلی استفاده میکنند، در حالی که متد setPlotOnSecondAxis خط را بر روی محور عمودی ثانوی سمت راست قرار میدهد. توابع کمکی عنوان، افسانه، برچسبهای محور و خطوط شبکه را پیکربندی میکنند.
import com.aspose.slides.*;
import android.graphics.Color;
class ComboChartExample
{
void createComboChart()
{
Presentation presentation = new Presentation();
try
{
IChart chart = createChartWithFirstSeries(presentation.getSlides().get_Item(0));
addSecondSeriesToChart(chart);
addThirdSeriesToChart(chart);
setPrimaryAxesFormat(chart);
setSecondaryAxesFormat(chart);
presentation.save("combo-chart.pptx", SaveFormat.Pptx);
}
finally
{
presentation.dispose();
}
}
IChart createChartWithFirstSeries(ISlide slide)
{
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 600, 400);
chart.setTitle(true);
chart.getChartTitle().addTextFrameForOverriding("Chart Title");
chart.getChartTitle().setOverlay(false);
IPortionFormat portionFormat = chart.getChartTitle().getTextFrameForOverriding().getParagraphs().get_Item(0).getParagraphFormat().getDefaultPortionFormat();
portionFormat.setFontBold(NullableBool.False);
portionFormat.setFontHeight(18f);
chart.getLegend().setPosition(LegendPositionType.Bottom);
chart.getLegend().getTextFormat().getPortionFormat().setFontHeight(12f);
chart.getChartData().getSeries().clear();
chart.getChartData().getCategories().clear();
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
int worksheetIndex = 0;
IChartDataCell categoryCell = workbook.getCell(worksheetIndex, 1, 0, "Category 1");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(worksheetIndex, 2, 0, "Category 2");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(worksheetIndex, 3, 0, "Category 3");
chart.getChartData().getCategories().add(categoryCell);
categoryCell = workbook.getCell(worksheetIndex, 4, 0, "Category 4");
chart.getChartData().getCategories().add(categoryCell);
IChartDataCell seriesNameCell = workbook.getCell(worksheetIndex, 0, 1, "Series 1");
IChartSeries series = chart.getChartData().getSeries().add(seriesNameCell, chart.getType());
series.getParentSeriesGroup().setOverlap((byte) -25);
series.getParentSeriesGroup().setGapWidth(220);
IChartDataCell valueCell = workbook.getCell(worksheetIndex, 1, 1, 4.3);
series.getDataPoints().addDataPointForBarSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, 2, 1, 2.5);
series.getDataPoints().addDataPointForBarSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, 3, 1, 3.5);
series.getDataPoints().addDataPointForBarSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, 4, 1, 4.5);
series.getDataPoints().addDataPointForBarSeries(valueCell);
return chart;
}
void addSecondSeriesToChart(IChart chart)
{
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
final int worksheetIndex = 0;
IChartDataCell seriesNameCell = workbook.getCell(worksheetIndex, 0, 2, "Series 2");
IChartSeries series = chart.getChartData().getSeries().add(seriesNameCell, ChartType.ClusteredColumn);
series.getParentSeriesGroup().setOverlap((byte) -25);
series.getParentSeriesGroup().setGapWidth(220);
IChartDataCell valueCell = workbook.getCell(worksheetIndex, 1, 2, 2.4);
series.getDataPoints().addDataPointForBarSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, 2, 2, 4.4);
series.getDataPoints().addDataPointForBarSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, 3, 2, 1.8);
series.getDataPoints().addDataPointForBarSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, 4, 2, 2.8);
series.getDataPoints().addDataPointForBarSeries(valueCell);
}
void addThirdSeriesToChart(IChart chart)
{
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
final int worksheetIndex = 0;
IChartDataCell seriesNameCell = workbook.getCell(worksheetIndex, 0, 3, "Series 3");
IChartSeries series = chart.getChartData().getSeries().add(seriesNameCell, ChartType.Line);
IChartDataCell valueCell = workbook.getCell(worksheetIndex, 1, 3, 2.0);
series.getDataPoints().addDataPointForLineSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, 2, 3, 2.0);
series.getDataPoints().addDataPointForLineSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, 3, 3, 3.0);
series.getDataPoints().addDataPointForLineSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, 4, 3, 5.0);
series.getDataPoints().addDataPointForLineSeries(valueCell);
series.setPlotOnSecondAxis(true);
}
void setPrimaryAxesFormat(IChart chart)
{
IAxis horizontalAxis = chart.getAxes().getHorizontalAxis();
horizontalAxis.getTextFormat().getPortionFormat().setFontHeight(12f);
horizontalAxis.getFormat().getLine().getFillFormat().setFillType(FillType.NoFill);
setAxisTitle(horizontalAxis, "X Axis");
IAxis verticalAxis = chart.getAxes().getVerticalAxis();
verticalAxis.getTextFormat().getPortionFormat().setFontHeight(12f);
verticalAxis.getFormat().getLine().getFillFormat().setFillType(FillType.NoFill);
setAxisTitle(verticalAxis, "Y Axis 1");
ILineFillFormat majorGridLinesFormat = verticalAxis.getMajorGridLinesFormat().getLine().getFillFormat();
majorGridLinesFormat.setFillType(FillType.Solid);
majorGridLinesFormat.getSolidFillColor().setColor(Color.rgb(217, 217, 217));
}
void setSecondaryAxesFormat(IChart chart)
{
IAxis secondaryHorizontalAxis = chart.getAxes().getSecondaryHorizontalAxis();
secondaryHorizontalAxis.setPosition(AxisPositionType.Bottom);
secondaryHorizontalAxis.setCrossType(CrossesType.Maximum);
secondaryHorizontalAxis.setVisible(false);
secondaryHorizontalAxis.getMajorGridLinesFormat().getLine().getFillFormat().setFillType(FillType.NoFill);
secondaryHorizontalAxis.getMinorGridLinesFormat().getLine().getFillFormat().setFillType(FillType.NoFill);
IAxis secondaryVerticalAxis = chart.getAxes().getSecondaryVerticalAxis();
secondaryVerticalAxis.setPosition(AxisPositionType.Right);
secondaryVerticalAxis.getTextFormat().getPortionFormat().setFontHeight(12f);
secondaryVerticalAxis.getFormat().getLine().getFillFormat().setFillType(FillType.NoFill);
secondaryVerticalAxis.getMajorGridLinesFormat().getLine().getFillFormat().setFillType(FillType.NoFill);
secondaryVerticalAxis.getMinorGridLinesFormat().getLine().getFillFormat().setFillType(FillType.NoFill);
setAxisTitle(secondaryVerticalAxis, "Y Axis 2");
}
void setAxisTitle(IAxis axis, String axisTitle)
{
axis.setTitle(true);
axis.getTitle().setOverlay(false);
IPortionFormat titlePortionFormat = axis.getTitle().addTextFrameForOverriding(axisTitle).getParagraphs().get_Item(0).getParagraphFormat().getDefaultPortionFormat();
titlePortionFormat.setFontBold(NullableBool.False);
titlePortionFormat.setFontHeight(12f);
}
}
ComboChartExample example = new ComboChartExample();
example.createComboChart();
بهروزرسانی نمودارها
Aspose.Slides برای اندروید از طریق Java به شما امکان میدهد نمودارهای PowerPoint را با اصلاح دادههای نمودار، قالببندی و استایل بهروزرسانی کنید. این قابلیت فرآیند نگهداری ارائهها را با محتوای پویا سادهسازی میکند و اطمینان میدهد نمودارها بهطور دقیق دادهها و استانداردهای بصری جاری را منعکس کنند.
این مثال نمودار با نام «My chart» را در اولین اسلاید یک ارائهٔ موجود بهروزرسانی میکند. این مثال به دو سری ستونی با سه نقطه داده در هر سری نیاز دارد؛ برچسبهای دسته در ستون A و نامهای سری در ردیف اول اولین کاربرگ قرار دارند. مثال از getCell برای تغییر سلولهای کاربرگ استفاده میکند، مقادیر سری را بهروزرسانی میکند، سری سوم را اضافه میکند و نوع نمودار را با setType به ستونیهای استوانهای خوشهای تغییر میدهد.
import com.aspose.slides.*;
final String chartName = "My chart";
Presentation presentation = new Presentation("ExistingChart.pptx");
try
{
ISlide slide = presentation.getSlides().get_Item(0);
for (IShape shape : slide.getShapes())
{
if (shape instanceof IChart && chartName.equals(shape.getName()))
{
IChart chart = (IChart) shape;
int worksheetIndex = 0;
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
workbook.getCell(worksheetIndex, 1, 0, "Modified Category 1");
workbook.getCell(worksheetIndex, 2, 0, "Modified Category 2");
IChartSeries series = chart.getChartData().getSeries().get_Item(0);
workbook.getCell(worksheetIndex, 0, 1, "New_Series 1");
series.getDataPoints().get_Item(0).getValue().setData(90);
series.getDataPoints().get_Item(1).getValue().setData(123);
series.getDataPoints().get_Item(2).getValue().setData(44);
series = chart.getChartData().getSeries().get_Item(1);
workbook.getCell(worksheetIndex, 0, 2, "New_Series 2");
series.getDataPoints().get_Item(0).getValue().setData(23);
series.getDataPoints().get_Item(1).getValue().setData(67);
series.getDataPoints().get_Item(2).getValue().setData(99);
IChartDataCell seriesNameCell = workbook.getCell(worksheetIndex, 0, 3, "Series 3");
series = chart.getChartData().getSeries().add(seriesNameCell, chart.getType());
IChartDataCell valueCell = workbook.getCell(worksheetIndex, 1, 3, 20);
series.getDataPoints().addDataPointForBarSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, 2, 3, 50);
series.getDataPoints().addDataPointForBarSeries(valueCell);
valueCell = workbook.getCell(worksheetIndex, 3, 3, 30);
series.getDataPoints().addDataPointForBarSeries(valueCell);
chart.setType(ChartType.ClusteredCylinder);
}
}
presentation.save("AsposeChartModified.pptx", SaveFormat.Pptx);
}
finally
{
presentation.dispose();
}
تنظیم محدودهٔ داده برای یک نمودار
برای بررسی محدودهای که قبلاً توسط یک نمودار موجود استفاده شده است، به Retrieve a Chart’s Data Range مراجعه کنید.
Aspose.Slides برای اندروید از طریق Java انعطافپذیری تعریف یک محدودهٔ دادهٔ خاص از یک کاربرگ بهعنوان منبع برای دادههای نمودار شما را فراهم میکند. این بدین معناست که میتوانید بهصورت مستقیم بخشی از کاربرگ خود را به نمودار نگاشت کنید و کنترل کنید که کدام سلولها به سریها و دستههای نمودار کمک میکنند. در نتیجه میتوانید نمودارهای خود را بهراحتی با جدیدترین تغییرات داده در کاربرگ همگامسازی کنید و اطمینان حاصل کنید ارائههای PowerPoint شما اطلاعات دقیق و بهروز را منعکس میکنند.
این مثال از setRange برای تنظیم منبع دادهٔ نمودار با نام «My chart» در اولین اسلاید یک ارائهٔ موجود به Sheet1!A1:B4 استفاده میکند. کتاب کار نمودار باید همان کاربرگ را داشته باشد و محدودهٔ پر شدهای داشته باشد که سرآیند سری در ردیف اول، برچسبهای دسته در ستون A و سه مقدار در ستون B قرار دارند.
import com.aspose.slides.*;
final String chartName = "My chart";
Presentation presentation = new Presentation("ExistingChart.pptx");
try
{
ISlide slide = presentation.getSlides().get_Item(0);
for (IShape shape : slide.getShapes())
{
if (shape instanceof IChart && chartName.equals(shape.getName()))
{
IChart chart = (IChart) shape;
chart.getChartData().setRange("Sheet1!A1:B4");
}
}
presentation.save("SetDataRange.pptx", SaveFormat.Pptx);
}
finally
{
presentation.dispose();
}
استفاده از نشانگرهای پیشفرض در نمودارها
هنگامی که از نشانگرهای پیشفرض در نمودارها استفاده میکنید، هر سری نمودار بهصورت خودکار یک نماد نشانگر پیشفرض متفاوت دریافت میکند.
این مثال از addChart برای ایجاد یک نمودار با دو سری خطی و یک افسانه استفاده میکند. تنظیمات نشانگر که از طریق getMarker دسترسی میشوند، نمادهای نشانگر اختصاص دادهشدهٔ خودکار را حفظ میکنند. سری اول شامل یک مقدار منفی و یک مقدار گمشده که با null نشان داده میشود، است؛ در حالی که سری دوم برای هر دسته یک مقدار دارد.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try
{
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.LineWithMarkers, 10, 10, 400, 400);
chart.getChartData().getSeries().clear();
chart.getChartData().getCategories().clear();
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
IChartDataCell seriesNameCell = workbook.getCell(0, 0, 1, "Series 1");
IChartSeries series = chart.getChartData().getSeries().add(seriesNameCell, chart.getType());
IChartDataCell categoryCell = workbook.getCell(0, 1, 0, "C1");
chart.getChartData().getCategories().add(categoryCell);
IChartDataCell valueCell = workbook.getCell(0, 1, 1, 24);
series.getDataPoints().addDataPointForLineSeries(valueCell);
categoryCell = workbook.getCell(0, 2, 0, "C2");
chart.getChartData().getCategories().add(categoryCell);
valueCell = workbook.getCell(0, 2, 1, 23);
series.getDataPoints().addDataPointForLineSeries(valueCell);
categoryCell = workbook.getCell(0, 3, 0, "C3");
chart.getChartData().getCategories().add(categoryCell);
valueCell = workbook.getCell(0, 3, 1, -10);
series.getDataPoints().addDataPointForLineSeries(valueCell);
categoryCell = workbook.getCell(0, 4, 0, "C4");
chart.getChartData().getCategories().add(categoryCell);
valueCell = workbook.getCell(0, 4, 1, null);
series.getDataPoints().addDataPointForLineSeries(valueCell);
seriesNameCell = workbook.getCell(0, 0, 2, "Series 2");
IChartSeries secondSeries = chart.getChartData().getSeries().add(seriesNameCell, chart.getType());
valueCell = workbook.getCell(0, 1, 2, 30);
secondSeries.getDataPoints().addDataPointForLineSeries(valueCell);
valueCell = workbook.getCell(0, 2, 2, 10);
secondSeries.getDataPoints().addDataPointForLineSeries(valueCell);
valueCell = workbook.getCell(0, 3, 2, 60);
secondSeries.getDataPoints().addDataPointForLineSeries(valueCell);
valueCell = workbook.getCell(0, 4, 2, 40);
secondSeries.getDataPoints().addDataPointForLineSeries(valueCell);
chart.setLegend(true);
chart.getLegend().setOverlay(false);
presentation.save("DefaultMarkersInChart.pptx", SaveFormat.Pptx);
}
finally
{
presentation.dispose();
}
سوالات متداول
کدام انواع نمودارها توسط Aspose.Slides برای اندروید از طریق Java پشتیبانی میشوند؟
Aspose.Slides برای اندروید از طریق Java طیف گستردهای از انواع نمودارها را پشتیبانی میکند، از جمله میلهای، خطی، دایرهای، مساحی، پراکندگی، هیستوگرام، رادار و بسیاری دیگر. این انعطافپذیری به شما امکان میدهد مناسبترین نوع نمودار را برای نیازهای تجسم دادهٔ خود انتخاب کنید.
چگونه یک نمودار جدید به اسلاید اضافه کنم؟
برای افزودن یک نمودار، ابتدا یک نمونه از کلاس Presentation ایجاد میکنید، اسلاید موردنظر را با استفاده از شاخص آن دریافت میکنید و سپس متد افزودن نمودار را صدا میزنید، نوع نمودار و دادههای اولیه را مشخص میکنید. این فرآیند نمودار را مستقیماً در ارائهٔ شما ادغام میکند.
چگونه میتوانم دادههای نمایشدادهشده در یک نمودار را بهروزرسانی کنم؟
با دسترسی به دفترچهٔ دادهٔ نمودار (IChartDataWorkbook) میتوانید سریها و دستههای پیشفرض را پاک کنید و دادههای سفارشی خود را اضافه کنید. این امکان بهصورت برنامهنویسی نمودار را برای بازتاب جدیدترین دادهها تازهسازی میکند.
آیا امکان سفارشیسازی ظاهر نمودار وجود دارد؟
بله، Aspose.Slides برای اندروید از طریق Java گزینههای سفارشیسازی گستردهای ارائه میدهد. میتوانید رنگها، قلمها، برچسبها، افسانهها و سایر عناصر قالببندی را تغییر دهید تا ظاهر نمودار را با نیازهای طراحی خاص خود تطبیق دهید.