Dostosowywanie osi wykresu w prezentacjach w .NET
Przegląd
Ten artykuł wyjaśnia, jak dostosowywać osie wykresów w Aspose.Slides for .NET. Obejmuje obliczone wartości osi, zamianę wierszy i kolumn wykresu, widoczność osi, interwały etykiet kategorii i podziałek, kategorie dat i formatowanie, obrót tytułu, pozycjonowanie osi oraz jednostki wyświetlania.
Uzyskaj maksymalne wartości na osi pionowej wykresów
Utwórz Prezentację i dodaj wykres powierzchniowy z domyślnymi danymi. Wywołaj ValidateChartLayout przed odczytaniem obliczonych wartości osi, aby układ wykresu był aktualny.
Odczytaj ActualMaxValue i ActualMinValue dla granic osi oraz ActualMajorUnit i ActualMinorUnit dla interwałów podziałek. ActualMajorUnitScale i ActualMinorUnitScale zapewniają skale jednostek czasu, co ma znaczenie dla osi dat. Przykład przechowuje te wartości w zmiennych lokalnych i zapisuje wykres.
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.Area, 100, 100, 500, 350);
chart.ValidateChartLayout();
var maxValue = chart.Axes.VerticalAxis.ActualMaxValue;
var minValue = chart.Axes.VerticalAxis.ActualMinValue;
var majorUnit = chart.Axes.VerticalAxis.ActualMajorUnit;
var minorUnit = chart.Axes.VerticalAxis.ActualMinorUnit;
var majorUnitScale = chart.Axes.VerticalAxis.ActualMajorUnitScale;
var minorUnitScale = chart.Axes.VerticalAxis.ActualMinorUnitScale;
presentation.Save("AxisValues_out.pptx", SaveFormat.Pptx);
Zamień dane między osiami
Użyj SwitchRowColumn, aby wymienić role serii i kategorii w danych wykresu. Każda poprzednia kategoria staje się serią, a każda poprzednia seria staje się kategorią. Zmienia to sposób grupowania danych; nie wymienia osi poziomej i pionowej. Przykład używa SetRange, aby powiązać domyślne dane z Sheet1!A1:D5, w tym wiersz nagłówka i kolumnę kategorii, przed zamianą wierszy i kolumn. Zapisuje wykres z czterema seriami i trzema kategoriami.
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.ClusteredColumn, 100, 100, 400, 300);
chart.ChartData.SetRange("Sheet1!A1:D5");
chart.ChartData.SwitchRowColumn();
presentation.Save("SwitchChartRowColumns_out.pptx", SaveFormat.Pptx);
Ukryj oś pionową w wykresach liniowych
Ustaw IsVisible na false dla osi pionowej, aby ją ukryć. Przykład tworzy wykres liniowy z domyślnymi danymi i zapisuje go z ukrytą osią pionową.
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.Line, 100, 100, 400, 300);
chart.Axes.VerticalAxis.IsVisible = false;
presentation.Save("HiddenVerticalAxis.pptx", SaveFormat.Pptx);
Ukryj oś poziomą w wykresach liniowych
Ustaw IsVisible na false dla osi poziomej, aby ją ukryć. Przykład tworzy wykres liniowy z domyślnymi danymi i zapisuje go z ukrytą osią poziomą.
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.Line, 100, 100, 400, 300);
chart.Axes.HorizontalAxis.IsVisible = false;
presentation.Save("HiddenHorizontalAxis.pptx", SaveFormat.Pptx);
Zmień oś kategorii
Ustaw CategoryAxisType, aby wybrać oś kategorii daty lub tekstu. Ten przykład wymaga pliku ExistingChart.pptx, w którym wykres jest pierwszym kształtem na pierwszym slajdzie, a komórki kategorii zawierają numeryczne wartości dat Excel. Zmienia oś poziomą na oś daty. Ustawienie IsAutomaticMajorUnit na false, MajorUnit na 1 i MajorUnitScale na miesiące umieszcza główne podziały w odstępach jednego miesiąca.
using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation("ExistingChart.pptx");
var slide = presentation.Slides[0];
var chart = (IChart) slide.Shapes[0];
chart.Axes.HorizontalAxis.CategoryAxisType = CategoryAxisType.Date;
chart.Axes.HorizontalAxis.IsAutomaticMajorUnit = false;
chart.Axes.HorizontalAxis.MajorUnit = 1;
chart.Axes.HorizontalAxis.MajorUnitScale = TimeUnitType.Months;
presentation.Save("ChangeChartCategoryAxis_out.pptx", SaveFormat.Pptx);
Kontroluj interwały etykiet osi kategorii
Gdy wykres ma wiele kategorii, zmniejsz liczbę widocznych etykiet osi bez usuwania kategorii ani punktów danych. Ustaw IsAutomaticTickLabelSpacing na false, a następnie ustaw TickLabelSpacing na pożądany interwał kategorii. Dla kategorii tekstowych w ich normalnym porządku numerowanie zaczyna się od pierwszej kategorii:
| Interwał | Etykiety wyświetlane w przykładzie |
|---|---|
1 |
Kategoria 1, Kategoria 2, Kategoria 3, … Kategoria 24 |
2 |
Kategoria 1, Kategoria 3, Kategoria 5, … Kategoria 23 |
3 |
Kategoria 1, Kategoria 4, Kategoria 7, … Kategoria 22 |
Interwał 3 wyświetla co trzecią etykietę, pozostawiając dwie ukryte pomiędzy wyświetlonymi. Nie usuwa to odpowiadających kolumn. Automatyczne rozmieszczanie wybiera interwał na podstawie dostępnej przestrzeni; nie musi wyświetlać każdej etykiety.
Podziały mają oddzielne ustawienia. Ustaw IsAutomaticTickMarksSpacing na false i użyj TickMarksSpacing do określenia ich interwału. Na przykład 1 utrzymuje podziałkę przy każdym interwale kategorii, podczas gdy etykiety pojawiają się tylko co trzecią kategorię. Ustaw MajorTickMark na widoczny styl, aby zobaczyć rezultat. Przywrócenie dowolnej właściwości automatycznego rozmieszczania do true pozwala wykresowi ponownie wybrać interwał.
Poniższy samodzielny przykład tworzy 24 kategorie i jedną serię, a następnie zapisuje trzy slajdy w pliku CategoryAxisIntervals.pptx: automatyczne rozmieszczanie, ręczne rozmieszczanie etykiet przy niezależnych podziałkach oraz przywrócone automatyczne rozmieszczanie. Obie kopie zachowują oryginalne dane wykresu. Nie wymaga żadnej prezentacji wejściowej. Tekst etykiet poziomych ułatwia dostrzeżenie różnicy w gęstości.
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.ClusteredColumn, 30, 40, 660, 320);
chart.HasLegend = false;
chart.ChartData.Categories.Clear();
chart.ChartData.Series.Clear();
var workbook = chart.ChartData.ChartDataWorkbook;
workbook.Clear(0);
var series = chart.ChartData.Series.Add(ChartType.ClusteredColumn);
for (var i = 0; i < 24; i++)
{
var categoryCell = workbook.GetCell(0, i + 1, 0, $"Category {i + 1}");
chart.ChartData.Categories.Add(categoryCell);
var valueCell = workbook.GetCell(0, i + 1, 1, 10 + i % 6 * 5);
series.DataPoints.AddDataPointForBarSeries(valueCell);
}
var axis = chart.Axes.HorizontalAxis;
axis.CategoryAxisType = CategoryAxisType.Text;
axis.TextFormat.TextBlockFormat.RotationAngle = 0;
axis.TextFormat.PortionFormat.FontHeight = 12;
axis.MajorTickMark = TickMarkType.Outside;
axis.IsAutomaticTickLabelSpacing = true;
axis.IsAutomaticTickMarksSpacing = true;
// Slajd 2: pokaż co trzecią etykietę, ale zachowaj podziałkę przy każdej kategorii.
var manualSlide = presentation.Slides.AddClone(slide);
var manualChart = (IChart)manualSlide.Shapes[0];
var manualAxis = manualChart.Axes.HorizontalAxis;
manualAxis.IsAutomaticTickLabelSpacing = false;
manualAxis.TickLabelSpacing = 3;
manualAxis.IsAutomaticTickMarksSpacing = false;
manualAxis.TickMarksSpacing = 1;
// Slajd 3: niech wykres ponownie wybierze oba interwały.
var restoredSlide = presentation.Slides.AddClone(manualSlide);
var restoredChart = (IChart)restoredSlide.Shapes[0];
restoredChart.Axes.HorizontalAxis.IsAutomaticTickLabelSpacing = true;
restoredChart.Axes.HorizontalAxis.IsAutomaticTickMarksSpacing = true;
presentation.Save("CategoryAxisIntervals.pptx", SaveFormat.Pptx);
Automatyczne rozmieszczanie (slajd 1): W tym renderowaniu co druga etykieta kategorii jest wyświetlana i dzieli się na dwie linie. Automatyczny wynik może się różnić w zależności od rozmiaru wykresu, czcionek i renderera.

Ręczne rozmieszczanie (slajd 2): Co trzecia etykieta jest wyświetlana w jednej linii, a podziały pozostają przy każdym interwale kategorii. Wszystkie 24 kolumny, w tym te bez etykiet, pozostają widoczne z takimi samymi wartościami. Slajd 3 przywraca automatyczny wygląd pokazany powyżej.

Wybierz prawidłową oś i interwał
Użyj tego interwału liczby kategorii dla osi kategorii tekstowych, takiej jak oś kategorii wykresu kolumnowego, liniowego, powierzchniowego lub słupkowego. W wykresie kolumnowym jest to oś pozioma. W wykresie słupkowym poziomym oś kategorii jest pionowa, więc zastosuj te ustawienia do VerticalAxis. Rozstawienie podziałek dotyczy także osi serii w wykresach, które ją posiadają.
Nie używaj rozmieszczania etykiet kategorii do ustawiania skali numerycznej osi wartości. Na osi wartości MajorUnit określa różnicę w wartościach: na przykład jednostka główna 10 tworzy podziały przy 0, 10, 20 itd., gdy oś zaczyna się od zera. Interwał etykiet kategorii 3 liczy pozycje kategorii, niezależnie od ich wartości danych. Wykresy punktowe i bąbelkowe używają osi wartości, a nie osi kategorii tekstowej. Dla osi dat użyj jednostek czasowych i skal opisanych w sekcji Zmień oś kategorii.
Ustaw format daty dla wartości osi kategorii
Przykład zastępuje domyślne dane wykresu czterema rocznymi wartościami. Daty są przechowywane jako liczby seryjne OLE Automation w pierwszym arkuszu (indeks 0). Ustaw CategoryAxisType na oś dat, wyłącz IsNumberFormatLinkedToSource i przypisz yyyy do NumberFormat, aby etykiety kategorii wyświetlały czterocyfrowe lata niezależnie od formatowania komórek.
using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.Line, 50, 50, 450, 300);
chart.ChartData.Categories.Clear();
chart.ChartData.Series.Clear();
var workbook = chart.ChartData.ChartDataWorkbook;
workbook.Clear(0);
var series = chart.ChartData.Series.Add(ChartType.Line);
for (var i = 0; i < 4; i++)
{
var date = new DateTime(2015 + i, 1, 1);
var categoryCell = workbook.GetCell(0, i + 1, 0, date.ToOADate());
chart.ChartData.Categories.Add(categoryCell);
var valueCell = workbook.GetCell(0, i + 1, 1, i + 1);
series.DataPoints.AddDataPointForLineSeries(valueCell);
}
chart.Axes.HorizontalAxis.CategoryAxisType = CategoryAxisType.Date;
chart.Axes.HorizontalAxis.IsNumberFormatLinkedToSource = false;
chart.Axes.HorizontalAxis.NumberFormat = "yyyy";
presentation.Save("DateAxisFormat.pptx", SaveFormat.Pptx);
Ustaw kąt obrotu tytułu osi wykresu
Włącz HasTitle na osi pionowej, podaj tekst tytułu i ustaw RotationAngle aby obrócić tytuł. Kąt mierzy się w stopniach; ten przykład zapisuje wykres kolumnowy z tytułem osi wartości obróconym o 90 stopni.
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.ClusteredColumn, 50, 50, 450, 300);
chart.Axes.VerticalAxis.HasTitle = true;
chart.Axes.VerticalAxis.Title.AddTextFrameForOverriding("Value");
chart.Axes.VerticalAxis.Title.TextFormat.TextBlockFormat.RotationAngle = 90;
presentation.Save("RotatedAxisTitle.pptx", SaveFormat.Pptx);
Ustaw pozycję osi na osi kategorii lub wartości
Użyj AxisBetweenCategories, aby kontrolować, czy oś wartości przecina oś kategorii pomiędzy kategoriami czy przy znacznikach podziałek. Właściwość ta dotyczy osi kategorii. Przykład ustawia ją na true na poziomej osi kategorii wykresu kolumnowego i zapisuje wynik.
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.ClusteredColumn, 50, 50, 450, 300);
chart.Axes.HorizontalAxis.AxisBetweenCategories = true;
presentation.Save("AxisBetweenCategories.pptx", SaveFormat.Pptx);
Ustaw jednostkę wyświetlania na osi wartości wykresu
Ustaw DisplayUnit aby skalować etykiety na osi wartości bez zmiany danych źródłowych. Z DisplayUnitType ustawionym na Millions, wartość 60 000 000 jest wyświetlana jako 60. Przykład tworzy wykres kolumnowy i stosuje jednostkę wyświetlania milionów do jego osi pionowej.
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.ClusteredColumn, 50, 50, 450, 300);
chart.Axes.VerticalAxis.DisplayUnit = DisplayUnitType.Millions;
presentation.Save("Result.pptx", SaveFormat.Pptx);
FAQ
Jak ustawić wartość, w której jedna oś przecina drugą (przecięcie osi)?
Użyj CrossType, aby wybrać zachowanie przecięcia. Aby określić numeryczną wartość przecięcia, ustaw CrossAt. Te ustawienia pozwalają przenieść przecięcie osi na odpowiednią linię bazową.
Jak mogę pozycjonować etykiety podziałek względem osi?
Ustaw TickLabelPosition przy użyciu TickLabelPositionType: Low, High, NextTo lub None. Aby kontrolować same podziały, użyj MajorTickMark lub MinorTickMark; są one oddzielne od pozycjonowania etykiet.