Android'de Sunumlarda Grafik Eksenlerini Özelleştirme
Genel Bakış
Bu makale, Aspose.Slides for Android via Java ile grafik eksenlerini nasıl özelleştireceğinizi açıklar. Hesaplanmış eksen değerleri, grafik satır ve sütunlarının değiştirilmesi, eksen görünürlüğü, kategori etiketi ve işaret aralıkları, tarih kategorileri ve biçimlendirme, başlık dönüşü, eksen konumlandırma ve gösterim birimleri konularını kapsar.
Grafiklerde Dikey Eksenin Azami Değerlerini Alma
Bir Presentation oluşturun ve varsayılan verilerle bir alan grafiği ekleyin. Hesaplanmış eksen değerlerini okumadan önce grafik düzeninin güncel olması için validateChartLayout çağırın.
Eksen sınırları için getActualMaxValue ve getActualMinValue metodlarını, işaret aralıkları için ise getActualMajorUnit ve getActualMinorUnit metodlarını okuyun. Tarih eksenleriyle ilgili zaman birimi ölçeklerini sağlamak için getActualMajorUnitScale ve getActualMinorUnitScale kullanılır. Örnek bu değerleri yerel değişkenlerde saklar ve grafiği kaydeder.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Area, 100, 100, 500, 350);
chart.validateChartLayout();
double maxValue = chart.getAxes().getVerticalAxis().getActualMaxValue();
double minValue = chart.getAxes().getVerticalAxis().getActualMinValue();
double majorUnit = chart.getAxes().getVerticalAxis().getActualMajorUnit();
double minorUnit = chart.getAxes().getVerticalAxis().getActualMinorUnit();
int majorUnitScale = chart.getAxes().getVerticalAxis().getActualMajorUnitScale();
int minorUnitScale = chart.getAxes().getVerticalAxis().getActualMinorUnitScale();
presentation.save("AxisValues_out.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Eksenler Arasındaki Verileri Değiştir
Grafik verilerinde seriler ve kategorilerin rollerini takas etmek için switchRowColumn metodunu kullanın. Her eski kategori bir seri, her eski seri ise bir kategori olur. Bu, verilerin gruplandırılma şeklini değiştirir; yatay ve dikey eksenleri değiştirmez. Örnek, varsayılan verileri Sheet1!A1:D5 aralığına bağlamak için setRange metodunu (başlık satırı ve kategori sütunu dahil) kullanır, ardından satır ve sütunları değiştirir. Dört seri ve üç kategori içeren bir grafik kaydeder.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 100, 100, 400, 300);
chart.getChartData().setRange("Sheet1!A1:D5");
chart.getChartData().switchRowColumn();
presentation.save("SwitchChartRowColumns_out.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Çizgi Grafiklerde Dikey Eksen’i Devre Dışı Bırak
Dikey ekseni gizlemek için false değeriyle setVisible metodunu çağırın. Örnek, varsayılan verilerle bir çizgi grafiği oluşturur ve dikey ekseni gizlenmiş olarak kaydeder.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Line, 100, 100, 400, 300);
chart.getAxes().getVerticalAxis().setVisible(false);
presentation.save("HiddenVerticalAxis.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Çizgi Grafiklerde Yatay Eksen’i Devre Dışı Bırak
Yatay ekseni gizlemek için false değeriyle setVisible metodunu çağırın. Örnek, varsayılan verilerle bir çizgi grafiği oluşturur ve yatay ekseni gizlenmiş olarak kaydeder.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Line, 100, 100, 400, 300);
chart.getAxes().getHorizontalAxis().setVisible(false);
presentation.save("HiddenHorizontalAxis.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Kategori Eksenini Değiştir
Tarih veya metin kategori ekseni seçmek için setCategoryAxisType metodunu kullanın. Bu örnek, ilk slaytın ilk şekli olarak bir grafik içeren ExistingChart.pptx dosyasını gerektirir ve kategori hücrelerinin sayısal Excel tarih değerleri içerdiğini varsayar. Yatay ekseni bir tarih ekseni olarak değiştirir. setAutomaticMajorUnit metodunu false, setMajorUnit metodunu 1 ve setMajorUnitScale metodunu TimeUnitType.Months ile çağırmak, ana işaretçileri bir‑aylık aralıklarla yerleştirir.
import com.aspose.slides.*;
Presentation presentation = new Presentation("ExistingChart.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = (IChart) slide.getShapes().get_Item(0);
chart.getAxes().getHorizontalAxis().setCategoryAxisType(CategoryAxisType.Date);
chart.getAxes().getHorizontalAxis().setAutomaticMajorUnit(false);
chart.getAxes().getHorizontalAxis().setMajorUnit(1);
chart.getAxes().getHorizontalAxis().setMajorUnitScale(TimeUnitType.Months);
presentation.save("ChangeChartCategoryAxis_out.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Kategori Eksen Etiket Aralıklarını Kontrol Et
Bir grafikte çok sayıda kategori olduğunda, kategorileri veya veri noktalarını kaldırmadan görünür eksen etiket sayısını azaltın. Öncelikle setAutomaticTickLabelSpacing metodunu false olarak ayarlayın, ardından istenen kategori aralığını setTickLabelSpacing metoduna geçirin. Normal sıradaki metin kategorileri için sayım ilk kategori üzerinden başlar:
| Aralık | Örnekte Görüntülenen Etiketler |
|---|---|
1 |
Category 1, Category 2, Category 3, … Category 24 |
2 |
Category 1, Category 3, Category 5, … Category 23 |
3 |
Category 1, Category 4, Category 7, … Category 22 |
3 aralığı, her üçüncü etiketi gösterir; gösterilen etiketler arasında iki etiket gizli kalır. Bu, ilgili sütunları kaldırmaz. Otomatik aralık, kullanılabilir alana göre bir aralık seçer; mutlaka her etiketi göstermez.
İşaretçilerin (tick marks) ayrı kontrolleri vardır. setAutomaticTickMarksSpacing metodunu false yapın ve aralığını ayarlamak için setTickMarksSpacing metodunu kullanın. Örneğin, 1 değeri, her kategori aralığında bir işaretçi bırakırken etiketler yalnızca her üçüncü kategori için görünür. Görünür bir stil vermek için setMajorTickMark metodunu kullanın. Otomatik‑aralık ayarlarından birini tekrar true yaparsanız, grafik tekrar otomatik olarak aralığı seçer.
Aşağıdaki bağımsız örnek, 24 kategori ve bir seri oluşturur, ardından CategoryAxisIntervals.pptx dosyasında üç slayt kaydeder: otomatik aralık, bağımsız işaretçilerle manuel etiket aralığı ve geri yüklenmiş otomatik aralık. İki kopya da orijinal grafik verilerini korur. Giriş sunumu gerekmez. Yatay etiket metni, yoğunluk farkını görmeyi kolaylaştırır.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 30, 40, 660, 320);
chart.setLegend(false);
chart.getChartData().getCategories().clear();
chart.getChartData().getSeries().clear();
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
workbook.clear(0);
IChartSeries series = chart.getChartData().getSeries().add(ChartType.ClusteredColumn);
for (int i = 0; i < 24; i++) {
IChartDataCell categoryCell = workbook.getCell(0, i + 1, 0, "Category " + (i + 1));
chart.getChartData().getCategories().add(categoryCell);
IChartDataCell valueCell = workbook.getCell(0, i + 1, 1, 10 + i % 6 * 5);
series.getDataPoints().addDataPointForBarSeries(valueCell);
}
IAxis axis = chart.getAxes().getHorizontalAxis();
axis.setCategoryAxisType(CategoryAxisType.Text);
axis.getTextFormat().getTextBlockFormat().setRotationAngle(0);
axis.getTextFormat().getPortionFormat().setFontHeight(12);
axis.setMajorTickMark(TickMarkType.Outside);
axis.setAutomaticTickLabelSpacing(true);
axis.setAutomaticTickMarksSpacing(true);
// Slayt 2: her üçüncü etiketi göster, ancak her kategori için bir işaretçi tut.
ISlide manualSlide = presentation.getSlides().addClone(slide);
IChart manualChart = (IChart)manualSlide.getShapes().get_Item(0);
IAxis manualAxis = manualChart.getAxes().getHorizontalAxis();
manualAxis.setAutomaticTickLabelSpacing(false);
manualAxis.setTickLabelSpacing(3);
manualAxis.setAutomaticTickMarksSpacing(false);
manualAxis.setTickMarksSpacing(1);
// Slayt 3: grafiğin her iki aralığı da yeniden seçmesine izin ver.
ISlide restoredSlide = presentation.getSlides().addClone(manualSlide);
IChart restoredChart = (IChart)restoredSlide.getShapes().get_Item(0);
restoredChart.getAxes().getHorizontalAxis().setAutomaticTickLabelSpacing(true);
restoredChart.getAxes().getHorizontalAxis().setAutomaticTickMarksSpacing(true);
presentation.save("CategoryAxisIntervals.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Automatic spacing (slide 1): Bu görüntüde, her ikinci kategori etiketi gösterilir ve iki satıra sarılır. Otomatik sonuç, grafik boyutu, yazı tipleri ve renderlayıcıya bağlı olarak değişebilir.

Manual spacing (slide 2): Her üçüncü etiket tek satırda gösterilir, işaretçiler ise her kategori aralığında kalır. Etiketi olmayan tüm 24 sütun aynı değerlerle görünür. 3. slayt, yukarıdaki otomatik görünümü geri yükler.

Doğru Eksen ve Aralığı Seç
Metin kategori ekseni (ör. sütun, çizgi, alan veya çubuk grafiğin kategori ekseni) için bu kategori‑sayısı aralığını kullanın. Sütun grafiğinde bu, yatay eksendir. Yatay çubuk grafiğinde kategori ekseni düşey olduğundan, bu ayarları getVerticalAxis tarafından döndürülen eksene uygulayın. İşaret aralığı, bir serinin ekseni olan grafiklerde de geçerlidir.
Değer ekseninin sayısal ölçeğini ayarlamak için kategori etiketi aralığını kullanmayın. Değer ekseninde, setMajorUnit değeri, örneğin 10 olduğunda eksen sıfırdan başladığında 0, 10, 20 … şeklinde işaretçiler oluşturur. 3 kategori etiketi aralığı ise veri değerlerinden bağımsız olarak kategori konumlarını sayar. Dağılım ve balon grafikler, metin kategori ekseni yerine değer eksenleri kullanır. Tarih ekseni için, Change a Category Axis bölümünde açıklandığı gibi zaman temelli ana birimler ve ölçekler kullanın.
Kategori Eksen Değerleri için Tarih Biçimini Ayarla
Örnek, varsayılan grafik verilerini dört yıllık değerle değiştirir. Tarihler, ilk çalışma sayfasında (indeks 0) OLE Automation seri numaraları olarak saklanır; bu değerler 30 Aralık 1899’dan itibaren gün sayısıdır. Her iki takvim de UTC kullanır ve tarih ayarlanmadan önce temizlenir, böylece yaz saati uygulamaları ve günün saati hesaplamayı etkilemez. setCategoryAxisType metodunu CategoryAxisType.Date ile, setNumberFormatLinkedToSource metodunu false ile ve yyyy değerini setNumberFormat metoduna geçirerek, kategori etiketlerinin hücre biçiminden bağımsız olarak dört haneli yıl göstermesini sağlarsınız.
import com.aspose.slides.*;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Line, 50, 50, 450, 300);
chart.getChartData().getCategories().clear();
chart.getChartData().getSeries().clear();
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
workbook.clear(0);
TimeZone timeZone = TimeZone.getTimeZone("UTC");
Calendar baseDate = new GregorianCalendar(timeZone);
baseDate.clear();
baseDate.set(1899, Calendar.DECEMBER, 30);
IChartSeries series = chart.getChartData().getSeries().add(ChartType.Line);
for (int i = 0; i < 4; i++) {
Calendar date = new GregorianCalendar(timeZone);
date.clear();
date.set(2015 + i, Calendar.JANUARY, 1);
double serialDate = (date.getTimeInMillis() - baseDate.getTimeInMillis()) / 86400000.0;
IChartDataCell categoryCell = workbook.getCell(0, i + 1, 0, serialDate);
chart.getChartData().getCategories().add(categoryCell);
IChartDataCell valueCell = workbook.getCell(0, i + 1, 1, i + 1);
series.getDataPoints().addDataPointForLineSeries(valueCell);
}
chart.getAxes().getHorizontalAxis().setCategoryAxisType(CategoryAxisType.Date);
chart.getAxes().getHorizontalAxis().setNumberFormatLinkedToSource(false);
chart.getAxes().getHorizontalAxis().setNumberFormat("yyyy");
presentation.save("DateAxisFormat.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Grafik Eksen Başlığı için Döndürme Açısını Ayarla
Dikey eksende başlığı etkinleştirmek için true ile setTitle metodunu çağırın, başlık metnini sağlayın ve başlığı döndürmek için setRotationAngle metodunu kullanın. Açı derece cinsindendir; bu örnek, değer ekseni başlığı 90 derece döndürülmüş bir sütun grafiği kaydeder.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 450, 300);
chart.getAxes().getVerticalAxis().setTitle(true);
chart.getAxes().getVerticalAxis().getTitle().addTextFrameForOverriding("Value");
chart.getAxes().getVerticalAxis().getTitle().getTextFormat().getTextBlockFormat().setRotationAngle(90);
presentation.save("RotatedAxisTitle.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Kategori veya Değer Ekseninde Eksen Konumunu Ayarla
Değer ekseninin kategori eksenini kategoriler arasına mı yoksa kategori işaretçilerine mi kesmesi gerektiğini kontrol etmek için setAxisBetweenCategories metodunu kullanın. Bu ayar sadece kategori eksenlerine uygulanır. Örnek, bir sütun grafiğinin yatay kategori ekseninde bunu true olarak ayarlar ve sonucu kaydeder.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 450, 300);
chart.getAxes().getHorizontalAxis().setAxisBetweenCategories(true);
presentation.save("AxisBetweenCategories.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Grafik Değer Ekseninde Görüntü Birimini Ayarla
Değer eksenindeki etiketleri temel verileri değiştirmeden ölçeklendirmek için setDisplayUnit metodunu kullanın. DisplayUnitType Millions olarak ayarlandığında, 60 000 000 değeri 60 olarak gösterilir. Örnek bir sütun grafiği oluşturur ve düşey eksenine milyonlar görüntü birimini uygular.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 450, 300);
chart.getAxes().getVerticalAxis().setDisplayUnit(DisplayUnitType.Millions);
presentation.save("Result.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
SSS
Bir eksenin diğerini kestiği değeri (eks kesişimi) nasıl ayarlarım?
Kesişme davranışını seçmek için setCrossType metodunu kullanın. Sayısal bir kesişme değeri belirtmek için setCrossAt metodunu kullanın. Bu ayarlar, eksen kesişimini uygun bir temel çizgiye taşımanıza olanak tanır.
İşaret (tick) etiketlerini eksene göre nasıl konumlandırırım?
TickLabelPositionType değerlerinden birini (Low, High, NextTo, None) kullanarak setTickLabelPosition metodunu çağırın. İşaretçileri kontrol etmek için, etiket konumlandırmasından bağımsız olarak setMajorTickMark veya setMinorTickMark metodlarını kullanın.