Diagrammachsen in Präsentationen mit Java anpassen
Übersicht
Dieser Artikel erklärt, wie Diagrammachsen mit Aspose.Slides für Java angepasst werden können. Er umfasst berechnete Achsenwerte, das Vertauschen von Diagrammreihen und -spalten, die Sichtbarkeit von Achsen, Kategorie‑Beschriftungs‑ und Teilstrich‑Intervalle, Datums‑Kategorien und -Formatierung, Titelrotation, Achsenpositionierung und Anzeige‑Einheiten.
Maximale Werte auf der vertikalen Achse von Diagrammen erhalten
Erstellen Sie eine Presentation und fügen Sie ein Flächendiagramm mit Standarddaten hinzu. Rufen Sie validateChartLayout auf, bevor Sie berechnete Achsenwerte auslesen, damit das Diagrammlayout aktuell ist.
Lesen Sie getActualMaxValue und getActualMinValue für die Achsenlimits sowie getActualMajorUnit und getActualMinorUnit für die Teilstrich‑Intervalle. getActualMajorUnitScale und getActualMinorUnitScale liefern Zeiteinheiten‑Skalen, die für Datumsachsen relevant sind. Das Beispiel speichert diese Werte in lokalen Variablen und speichert das Diagramm.
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();
}
Daten zwischen Achsen austauschen
Verwenden Sie switchRowColumn , um die Rollen von Datenreihen und Kategorien in den Diagrammdaten zu vertauschen. Jede frühere Kategorie wird zu einer Reihe und jede frühere Reihe zu einer Kategorie. Dies ändert die Gruppierung der Daten; die horizontale und vertikale Achse werden nicht ausgetauscht. Das Beispiel nutzt setRange , um die Standarddaten an Sheet1!A1:D5 zu binden, einschließlich der Kopfzeile und der Kategorienspalte, bevor Zeilen und Spalten vertauscht werden. Es speichert ein Diagramm mit vier Reihen und drei Kategorien.
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();
}
Vertikale Achse für Liniendiagramme deaktivieren
Rufen Sie setVisible mit false für die vertikale Achse auf, um sie auszublenden. Das Beispiel erstellt ein Liniendiagramm mit Standarddaten und speichert es mit ausgeblendeter vertikaler Achse.
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();
}
Horizontale Achse für Liniendiagramme deaktivieren
Rufen Sie setVisible mit false für die horizontale Achse auf, um sie auszublenden. Das Beispiel erstellt ein Liniendiagramm mit Standarddaten und speichert es mit ausgeblendeter horizontaler Achse.
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();
}
Eine Kategorienachse ändern
Verwenden Sie setCategoryAxisType , um eine Datums‑ oder Text‑Kategorienachse auszuwählen. Dieses Beispiel benötigt ExistingChart.pptx, wobei das Diagramm das erste Shape auf der ersten Folie ist und die Kategoriezellen numerische Excel‑Datumswerte enthalten. Es ändert die horizontale Achse zu einer Datumsachse. Durch Aufruf von setAutomaticMajorUnit mit false, setMajorUnit mit 1 und setMajorUnitScale mit TimeUnitType.Months werden Hauptteilstriche in ein‑Monat‑Abständen platziert.
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();
}
Intervall der Kategorienachsen‑Beschriftungen steuern
Wenn ein Diagramm viele Kategorien hat, reduzieren Sie die Anzahl der sichtbaren Achsenbeschriftungen, ohne Kategorien oder Datenpunkte zu entfernen. Rufen Sie setAutomaticTickLabelSpacing mit false auf und übergeben Sie anschließend das gewünschte Kategorielintervall an setTickLabelSpacing. Für Textkategorien in ihrer normalen Reihenfolge beginnt die Zählung bei der ersten Kategorie:
| Intervall | Im Beispiel angezeigte Beschriftungen |
|---|---|
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 |
Ein Intervall von 3 zeigt jede dritte Beschriftung an und lässt zwei Beschriftungen zwischen den angezeigten verborgen. Es entfernt die entsprechenden Spalten nicht. Die automatische Abstände wählen ein Intervall basierend auf dem verfügbaren Platz; sie zeigen nicht zwingend jede Beschriftung an.
Teilstriche haben separate Einstellungen. Rufen Sie setAutomaticTickMarksSpacing mit false auf und verwenden Sie setTickMarksSpacing , um ihr Intervall festzulegen. Beispiel: 1 bewirkt, dass bei jedem Kategorielintervall ein Teilstrich angezeigt wird, während die Beschriftungen nur alle drei Kategorien erscheinen. Verwenden Sie setMajorTickMark mit einem sichtbaren Stil, damit Sie das Ergebnis sehen können. Durch erneutes Aufrufen eines automatischen Abstand‑Setzers mit true lässt das Diagramm das Intervall wieder automatisch wählen.
Das folgende eigenständige Beispiel erstellt 24 Kategorien und eine Reihe, speichert dann drei Folien in CategoryAxisIntervals.pptx: automatische Abstände, manuelle Beschriftungsabstände mit unabhängigen Teilstrichen und wiederhergestellte automatische Abstände. Die beiden Kopien behalten die ursprünglichen Diagrammdaten bei. Es wird keine Eingangs‑Präsentation benötigt. Der horizontale Beschriftungstext macht den Unterschied in der Dichte leicht erkennbar.
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);
// Slide 2: jede dritte Beschriftung anzeigen, aber für jede Kategorie einen Teilstrich beibehalten.
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);
// Slide 3: das Diagramm beide Intervalle erneut wählen lassen.
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();
}
Automatischer Abstand (Folie 1): In dieser Darstellung wird jede zweite Kategorienbeschriftung angezeigt und auf zwei Zeilen umgebrochen. Das automatische Ergebnis kann je nach Diagrammgröße, Schriftarten und Renderer variieren.

Manueller Abstand (Folie 2): Jede dritte Beschriftung wird in einer Zeile angezeigt, während die Teilstriche bei jedem Kategorielintervall verbleiben. Alle 24 Spalten, einschließlich derjenigen ohne Beschriftungen, bleiben mit den gleichen Werten sichtbar. Folie 3 stellt das oben gezeigte automatische Aussehen wieder her.

Den richtigen Achsen- und Intervalltyp wählen
Verwenden Sie dieses Kategorienzähl‑Intervall für eine Text‑Kategorienachse, z. B. die Kategorienachse eines Säulen‑, Linien‑, Flächen‑ oder Balkendiagramms. In einem Säulendiagramm ist es die horizontale Achse. In einem horizontalen Balkendiagramm ist die Kategorienachse vertikal, sodass Sie diese Einstellungen auf die von getVerticalAxis zurückgegebene Achse anwenden. Der Teilstrich‑Abstand gilt ebenfalls für die Reihen‑Achse in Diagrammen, die eine solche besitzen.
Verwenden Sie den Kategorienbeschriftungsabstand nicht, um die numerische Skala einer Werteachse festzulegen. Auf einer Werteachse bestimmt setMajorUnit eine Wertedifferenz: Ein Hauptintervall von 10 erzeugt Teilstriche bei 0, 10, 20 usw., wenn die Achse bei Null beginnt. Ein Kategorienbeschriftungsintervall von 3 zählt stattdessen die Positionen der Kategorien, unabhängig von deren Datenwerten. Streu‑ und Blasendiagramme verwenden Werteachsen anstelle einer Text‑Kategorienachse. Für eine Datumsachse verwenden Sie zeitbasierte Haupteinheiten und Skalen, wie in Change a Category Axis beschrieben.
Datumsformat für Kategorienachsenwerte festlegen
Das Beispiel ersetzt die Standarddiagrammdaten durch vier Jahreswerte. Daten werden als OLE‑Automation‑Seriennummern im ersten Arbeitsblatt (Index 0) gespeichert und als Anzahl der Tage seit dem 30. Dezember 1899 berechnet. Verwenden Sie setCategoryAxisType mit CategoryAxisType.Date, rufen Sie setNumberFormatLinkedToSource mit false auf und übergeben Sie yyyy an setNumberFormat, damit die Kategorienbeschriftungen vierstellige Jahreszahlen unabhängig von der Zellenformatierung anzeigen.
import com.aspose.slides.*;
import java.time.LocalDate;
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);
LocalDate baseDate = LocalDate.of(1899, 12, 30);
IChartSeries series = chart.getChartData().getSeries().add(ChartType.Line);
for (int i = 0; i < 4; i++) {
LocalDate date = LocalDate.of(2015 + i, 1, 1);
IChartDataCell categoryCell = workbook.getCell(0, i + 1, 0, date.toEpochDay() - baseDate.toEpochDay());
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();
}
Drehwinkel für einen Diagrammachsentitel festlegen
Rufen Sie setTitle mit true für die vertikale Achse auf, geben Sie den Titeltext an und verwenden Sie setRotationAngle , um den Titel zu drehen. Der Winkel wird in Grad gemessen; dieses Beispiel speichert ein Säulendiagramm, dessen Werteachsentitel um 90 Grad gedreht ist.
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();
}
Achsenposition auf einer Kategorien‑ oder Werteachse festlegen
Verwenden Sie setAxisBetweenCategories , um zu steuern, ob die Werteachse die Kategorienachse zwischen den Kategorien oder an den Kategorietick‑Marken schneidet. Diese Einstellung gilt für Kategorienachsen. Das Beispiel setzt sie auf true für die horizontale Kategorienachse eines Säulendiagramms und speichert das Ergebnis.
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();
}
Anzeige‑Einheit auf einer Werteachse festlegen
Verwenden Sie setDisplayUnit , um die Beschriftungen einer Werteachse zu skalieren, ohne die zugrunde liegenden Daten zu ändern. Mit DisplayUnitType auf Millions wird ein Wert von 60 000 000 als 60 angezeigt. Das Beispiel erstellt ein Säulendiagramm und wendet die Millionen‑Anzeige‑Einheit auf seine vertikale Achse an.
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
Wie lege ich den Wert fest, an dem eine Achse die andere schneidet (Achsenkreuzung)?
Verwenden Sie setCrossType, um das Kreuzungsverhalten auszuwählen. Um einen numerischen Kreuzungswert anzugeben, nutzen Sie setCrossAt. Diese Einstellungen ermöglichen es, die Achsenkreuzung zu einer geeigneten Basislinie zu verschieben.
Wie kann ich Teilstrich‑Beschriftungen relativ zur Achse positionieren?
Rufen Sie setTickLabelPosition mit einem der Werte von TickLabelPositionType auf: Low, High, NextTo oder None. Um die Teilstriche selbst zu steuern, verwenden Sie setMajorTickMark bzw. setMinorTickMark; diese sind getrennt von der Beschriftungsposition.