Anpassa diagramaxlar i presentationer på Android
Översikt
Denna artikel förklarar hur du anpassar diagramaxlar med Aspose.Slides för Android via Java. Den täcker beräknade axelvärden, byte av diagramrader och -kolumner, axelns synlighet, intervaller för kategorimärkningar och streckmarkeringar, datumkategorier och formatering, titelrotation, axelpositionering och visningsenheter.
Hämta maxvärdena på den vertikala axeln i diagram
Skapa en Presentation och lägg till ett ytdiagram med standarddata. Anropa validateChartLayout innan du läser de beräknade axelvärdena så att diagramlayouten är uppdaterad.
Läs getActualMaxValue och getActualMinValue för axelgränserna, samt getActualMajorUnit och getActualMinorUnit för streckintervallen. getActualMajorUnitScale och getActualMinorUnitScale tillhandahåller tidsenhetsskala, vilket är relevant för datumaxlar. Exemplet lagrar dessa värden i lokala variabler och sparar diagrammet.
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();
}
Byt data mellan axlar
Använd switchRowColumn för att byta rollerna mellan serier och kategorier i diagramdata. Varje tidigare kategori blir en serie, och varje tidigare serie blir en kategori. Detta ändrar hur data grupperas; det byter inte de horisontella och vertikala axlarna. Exemplet använder setRange för att binda standarddata till Sheet1!A1:D5, inklusive rubrikraden och kategorikolumnen, innan rader och kolumner byts. Det sparar ett diagram med fyra serier och tre kategorier.
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();
}
Inaktivera den vertikala axeln för linjediagram
Anropa setVisible med false på den vertikala axeln för att dölja den. Exemplet skapar ett linjediagram med standarddata och sparar det med den vertikala axeln dold.
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();
}
Inaktivera den horisontella axeln för linjediagram
Anropa setVisible med false på den horisontella axeln för att dölja den. Exemplet skapar ett linjediagram med standarddata och sparar det med den horisontella axeln dold.
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();
}
Ändra en kategori‑axel
Använd setCategoryAxisType för att välja en datum‑ eller textkategoriekaxel. Detta exempel kräver ExistingChart.pptx, med ett diagram som den första formen på den första bilden och kategoriceller som innehåller numeriska Excel‑datumvärden. Det ändrar den horisontella axeln till en datumaxel. Genom att anropa setAutomaticMajorUnit med false, setMajorUnit med 1 och setMajorUnitScale med TimeUnitType.Months placeras huvudstreck vid intervaller på en månad.
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();
}
Styr intervaller för kategoriekaxelns etiketter
När ett diagram har många kategorier, minska antalet synliga axel‑etiketter utan att ta bort kategorier eller datapunkter. Anropa setAutomaticTickLabelSpacing med false, och skicka sedan det önskade kategoriintervallet till setTickLabelSpacing. För textkategorier i deras normala ordning börjar räknandet vid den första kategorin:
| Intervall | Etiketter som visas i exemplet |
|---|---|
1 |
Kategori 1, Kategori 2, Kategori 3, … Kategori 24 |
2 |
Kategori 1, Kategori 3, Kategori 5, … Kategori 23 |
3 |
Kategori 1, Kategori 4, Kategori 7, … Kategori 22 |
Ett intervall på 3 visar varje tredje etikett, och lämnar två etiketter dolda mellan de visade etiketterna. Det tar inte bort de motsvarande kolumnerna. Automatisk spacing väljer ett intervall baserat på tillgängligt utrymme; det visar inte nödvändigtvis varje etikett.
Streckmarkeringar har separata kontroller. Anropa setAutomaticTickMarksSpacing med false och använd setTickMarksSpacing för att ställa in deras intervall. Till exempel håller 1 ett streck vid varje kategoriintervall medan etiketter visas endast var tredje kategori. Använd setMajorTickMark med en synlig stil så att du kan se resultatet. Att anropa någon av de automatiska avståndsinställarna med true igen låter diagrammet välja det intervallet igen.
Det följande självständiga exemplet skapar 24 kategorier och en serie, och sparar sedan tre bilder i CategoryAxisIntervals.pptx: automatisk spacing, manuell etikettspacing med oberoende streckmarkeringar, och återställd automatisk spacing. De två kopiorna behåller den ursprungliga diagramdata. Ingen input‑presentation krävs. Horisontell etiketttext gör skillnaden i densitet lätt att se.
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);
// Bild 2: visa var tredje etikett, men behåll ett streck för varje kategori.
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);
// Bild 3: låt diagrammet välja båda intervallen igen.
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();
}
Automatisk spacing (bild 1): I den här rendering‑en visas varje andra kategorietikett och radbryts till två rader. Det automatiska resultatet kan variera med diagramstorlek, teckensnitt och renderaren.

Manuell spacing (bild 2): Varje tredje etikett visas på en rad, medan streckmarkeringar förblir vid varje kategoriintervall. Alla 24 kolumner, inklusive de utan etiketter, förblir synliga med samma värden. Bild 3 återställer den automatiska utformningen som visas ovan.

Välj rätt axel och intervall
Använd detta kategori‑räkningsintervall för en text‑kategoriekaxel, såsom kategoriekaxeln i ett stapel-, linje-, område- eller stapeldiagram. I ett stapeldiagram är den horisontell. I ett horisontellt stapeldiagram är kategoriekaxeln vertikal, så tillämpa dessa inställningar på den axel som returneras av getVerticalAxis. Streckmarkering‑spacing gäller även för en serie‑axel i diagram som har en.
Använd inte kategori‑etikettspacing för att ställa in den numeriska skalan på en värdeaxel. På en värdeaxel specificerar setMajorUnit en skillnad i värden: till exempel ger en huvudenhet på 10 streck vid 0, 10, 20 osv när axeln startar vid noll. Ett kategori‑etikettintervall på 3 räknar istället kategori‑positioner, oavsett deras datavärden. Spridnings‑ och bubbeldiagram använder värdeaxlar snarare än en text‑kategoriekaxel. För en datumaxel, använd tidsbaserade huvudenheter och skalor enligt Change a Category Axis.
Ställ in datumformatet för kategori‑axelvärden
Exemplet ersätter standarddiagramdata med fyra årliga värden. Datum lagras som OLE‑Automation‑serialnummer i det första arbetsbladet (index 0), beräknade som antalet dagar sedan 30 december 1899 för dessa datum. Båda kalendrarna använder UTC och rensas innan datumen sätts så att sommartid och aktuell tid på dagen inte påverkar beräkningen. Använd setCategoryAxisType med CategoryAxisType.Date, anropa setNumberFormatLinkedToSource med false, och skicka yyyy till setNumberFormat så att kategorietiketterna visar fyrsiffriga år oberoende av cellformateringen.
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();
}
Ställ in en rotationsvinkel för en diagramaxeltitel
Anropa setTitle med true på den vertikala axeln, ange titeltext och använd setRotationAngle för att rotera titeln. Vinkeln mäts i grader; detta exempel sparar ett stapeldiagram med sin värdeaxeltitel roterad 90 grader.
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();
}
Ställ in axelpositionen på en kategori‑ eller värdeaxel
Använd setAxisBetweenCategories för att styra om värdeaxeln korsar kategoriekaxeln mellan kategorier eller vid kategori‑streckmarkeringar. Denna inställning gäller för kategoriekaxlar. Exemplet sätter den till true på den horisontella kategoriekaxeln i ett stapeldiagram och sparar resultatet.
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();
}
Ställ in visningsenheten på en diagramvärdeaxel
Använd setDisplayUnit för att skala etiketterna på en värdeaxel utan att ändra den underliggande datan. Med DisplayUnitType satt till Millions visas ett värde på 60 000 000 som 60. Exemplet skapar ett stapeldiagram och tillämpar miljon‑visningsenheten på dess vertikala axel.
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();
}
FAQ
Hur ställer jag in värdet där en axel korsar den andra (axelkorsning)?
Använd setCrossType för att välja korsningsbeteendet. För att ange ett numeriskt korsningsvärde, använd setCrossAt. Dessa inställningar låter dig flytta axelkorsningen till en lämplig referenslinje.
Hur kan jag placera strecketiketterna relativt axeln?
Anropa setTickLabelPosition med TickLabelPositionType: Low, High, NextTo eller None. För att styra själva streckmarkeringarna, använd setMajorTickMark eller setMinorTickMark; dessa är separata från etikettpositioneringen.