Dostosowywanie osi wykresów w prezentacjach w .NET
Przegląd
Ten artykuł wyjaśnia, jak dostosować osie wykresu przy użyciu Aspose.Slides for .NET. Omówiono obliczone wartości osi, zamianę wierszy i kolumn wykresu, widoczność osi, interwały etykiet i znaczników kategorii, kategorie dat i formatowanie, obrót tytułu, pozycjonowanie osi, jednostki wyświetlania i skalowanie logarytmiczne.
Uzyskaj maksymalne wartości na pionowej osi wykresów
Utwórz Prezentację i dodaj wykres obszarowy 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 znaczników. ActualMajorUnitScale i ActualMinorUnitScale dostarczają skale jednostek czasu, istotne dla osi dat. Przykład zapisuje 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 to osi poziomej i pionowej. Przykład używa SetRange do powiązania domyślnych danych z Sheet1!A1:D5, włączając 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);
Odwróć kolejność rysowania osi
Użyj IsPlotOrderReversed aby odwrócić oś kategorii lub wartości. Na przykład wykres słupkowy poziomy może wyświetlać etapy projektu od góry do dołu w tej samej kolejności, co arkusz: Planowanie, Rozwój, Testowanie. Odwrócenie osi zmienia kierunek rysowania; nie sortuje ani nie przestawia danych w skoroszycie. Dla porównania, SwitchRowColumn wymienia role serii i kategorii.
Poniższy przykład tworzy wykres słupkowy poziomy z trzema etapami i jedną serią. Zapisuje prezentację z trzema slajdami: normalna kolejność, odwrócone kategorie i odwrócone wartości. Każda kopia używa tego samego zestawu danych, a na każdej kopii odwrócona jest inna oś.
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.ClusteredBar, 50, 40, 620, 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.ClusteredBar);
var stages = new[] { "Planning", "Development", "Testing" };
var values = new[] { 10, 30, 20 };
for (var i = 0; i < stages.Length; i++)
{
var categoryCell = workbook.GetCell(0, i + 1, 0, stages[i]);
chart.ChartData.Categories.Add(categoryCell);
var valueCell = workbook.GetCell(0, i + 1, 1, values[i]);
series.DataPoints.AddDataPointForBarSeries(valueCell);
}
// Slajd 2: wyświetl pierwszą kategorię na górze.
var categorySlide = presentation.Slides.AddClone(slide);
var categoryChart = (IChart)categorySlide.Shapes[0];
categoryChart.Axes.VerticalAxis.IsPlotOrderReversed = true;
// Utrzymaj poziomą oś wartości na dole.
categoryChart.Axes.VerticalAxis.CrossType = CrossesType.Maximum;
// Slajd 3: odwróć tylko poziomą skalę numeryczną.
var valueSlide = presentation.Slides.AddClone(slide);
var valueChart = (IChart)valueSlide.Shapes[0];
valueChart.Axes.HorizontalAxis.IsPlotOrderReversed = true;
presentation.Save("ReversedAxes.pptx", SaveFormat.Pptx);
Odwrócenie osi może także przenieść prostopadłą oś na przeciwległą stronę wykresu. CrossType kontroluje, gdzie druga oś przecina konfigurowaną oś. Na slajdzie 2 ustawienie jej na Maximum przy odwróconej osi kategorii utrzymuje poziomą oś wartości na dole. Aby określić konkretny punkt przecięcia, użyj CrossAt. Sprawdź ustawienia przecięcia przy zmianie kierunku, szczególnie jeśli wykres ma już własny punkt przecięcia. Przywróć IsPlotOrderReversed do false, aby przywrócić normalny kierunek rysowania; ustawienia przecięcia są odrębne.
| Normalna kolejność (slajd 1) | Odwrócone kategorie (slajd 2) | Odwrócone wartości (slajd 3) |
|---|---|---|
![]() |
![]() |
![]() |
| Kategorie rosną od dołu do góry; wartości rosną od lewej do prawej. | Planowanie, Rozwój i Testowanie rosną od góry do dołu. Wartości i kolejność wierszy w arkuszu pozostają niezmienione. | Kategorie zachowują normalną kolejność; wartości rosną od prawej do lewej. Oś kategorii przecina się w zerze po prawej stronie. |
Ukryj pionową oś w wykresach liniowych
Ustaw IsVisible na false dla pionowej osi, aby ją ukryć. Przykład tworzy wykres liniowy z domyślnymi danymi i zapisuje go z ukrytą pionową osią.
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 poziomą oś w wykresach liniowych
Ustaw IsVisible na false dla poziomej osi, aby ją ukryć. Przykład tworzy wykres liniowy z domyślnymi danymi i zapisuje go z ukrytą poziomą osią.
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ś dat lub tekstową. 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 poziomą oś na oś dat. Ustawienie IsAutomaticMajorUnit na false, MajorUnit na 1 i MajorUnitScale na miesiące umieszcza główne znaczniki 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 TickLabelSpacing na pożądany interwał kategorii. Dla tekstowych kategorii w ich normalnym porządku liczenie 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świetlanymi. Nie usuwa to odpowiadających kolumn. Automatyczne rozmieszczenie wybiera interwał na podstawie dostępnej przestrzeni; niekoniecznie wyświetla każdą etykietę.
Znaczniki mają oddzielne sterowanie. Ustaw IsAutomaticTickMarksSpacing na false i użyj TickMarksSpacing aby określić ich interwał. Na przykład 1 zachowuje znacznik przy każdym interwale kategorii, podczas gdy etykiety pojawiają się co trzecią kategorię. Ustaw MajorTickMark na widoczny styl, aby zobaczyć efekt. Przywrócenie dowolnej właściwości automatycznego rozmieszczenia 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 rozmieszczenie, ręczne rozmieszczenie etykiet przy niezależnych znacznikach oraz przywrócone automatyczne rozmieszczenie. Dwie kopie zachowują pierwotne dane wykresu. Nie wymaga wejściowej prezentacji. Poziomy tekst etykiet 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 znacznik dla 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: pozwól wykresowi ponownie wybrać 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 rozmieszczenie (slajd 1): W tym renderingu wyświetlana jest co druga etykieta kategorii i jest ona łamana na dwie linie. Automatyczny rezultat może się różnić w zależności od rozmiaru wykresu, czcionek i renderera.

Ręczne rozmieszczenie (slajd 2): Co trzecia etykieta jest wyświetlana w jednej linii, podczas gdy znaczniki pozostają przy każdym interwale kategorii. Wszystkie 24 kolumny, włącznie z tymi bez etykiet, pozostają widoczne z tymi samymi wartościami. Slajd 3 przywraca automatyczny wygląd przedstawiony powyżej.

Wybierz prawidłową oś i interwał
Użyj tego interwału liczenia kategorii dla osi kategorii tekstowych, takiej jak oś kategorii wykresu kolumnowego, liniowego, obszarowego 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 znaczników dotyczy także osi serii w wykresach, które taką posiadają.
Nie używaj rozmieszczenia 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 generuje znaczniki 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 tekstowej osi kategorii. 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 pionowej osi, podaj tekst tytułu i ustaw RotationAngle aby obrócić tytuł. Kąt mierzony jest 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 na znacznikach kategorii. Właściwość ta odnosi się do osi kategorii. Przykład ustawia ją na true dla 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. Przy DisplayUnitType ustawionym na Millions, wartość 60 000 000 jest wyświetlana jako 60. Przykład tworzy wykres kolumnowy i zastosowuje 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);
Skonfiguruj logarytmiczną oś wartości
Logarytmiczna oś wartości jest przydatna, gdy dodatnie wartości obejmują kilka rzędów wielkości. Na przykład usługa może otrzymywać 10, 100, 1 000, 10 000 i 100 000 żądań w ciągu pięciu okresów. Na skali liniowej mniejsze wartości znajdują się blisko siebie w pobliżu zera. Skala logarytmiczna ułatwia porównywanie ich względnego wzrostu: równe odległości reprezentują równe stosunki, a nie równe różnice.
Ustaw IsLogarithmic na true dla osi wartości i użyj LogBase aby wybrać podstawę. Zmienia to sposób wyświetlania istniejących wartości; nie zmienia danych ani nie dodaje logarytmicznej linii trendu. Linia trendu reprezentuje dopasowaną zależność w danych i jest odrębną funkcją.
Wybierz oś wartości i podstawę
Dla wykresu liniowego lub kolumnowego oś wartości to VerticalAxis. Dla wykresu słupkowego poziomego jest to HorizontalAxis. Wykresy punktowe i bąbelkowe mają dwie osie wartości, więc wybierz oś poziomą dla wartości X, oś pionową dla wartości Y lub obie. Nie stosuj skalowania logarytmicznego do osi kategorii.
Domyślna podstawa logarytmu to 10. Dla wykresów PPTX użyj podstawy od 2 do 1000 włącznie; obsługiwane są także ułamkowe podstawy, takie jak 2.5. Przy podstawie 10 kolejne potęgi 10, 100, 1 000 i 10 000 są równomiernie rozmieszczone.
Porównaj skalowanie liniowe i logarytmiczne
Poniższy, samodzielny przykład tworzy wykres liniowy z pięcioma liczbami żądań na pierwszym slajdzie, a następnie klonuje ten slajd i włącza logarytmiczną oś wartości o podstawie 10 na drugim. Oba slajdy zachowują te same dane.
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, 30, 40, 660, 200);
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.Line);
var values = new double[] { 10, 100, 1000, 10000, 100000 };
for (var i = 0; i < values.Length; i++)
{
var categoryCell = workbook.GetCell(0, i + 1, 0, $"Period {i + 1}");
chart.ChartData.Categories.Add(categoryCell);
var valueCell = workbook.GetCell(0, i + 1, 1, values[i]);
series.DataPoints.AddDataPointForLineSeries(valueCell);
}
// Zachowaj pierwszy slajd jako liniowy i zmień tylko skalę osi wartości w kopii.
var logarithmicSlide = presentation.Slides.AddClone(slide);
var logarithmicChart = (IChart)logarithmicSlide.Shapes[0];
var valueAxis = logarithmicChart.Axes.VerticalAxis;
valueAxis.IsLogarithmic = true;
valueAxis.LogBase = 10;
presentation.Save("LogarithmicAxis.pptx", SaveFormat.Pptx);
Skala liniowa (slajd 1): Równe pionowe odległości reprezentują równe różnice w liczbie żądań. Największa wartość dominuje wykres, utrudniając rozróżnienie mniejszych wartości.

Skala logarytmiczna (slajd 2): Równe pionowe odległości reprezentują równe stosunki. Każdy okres ma dziesięciokrotnie więcej żądań niż poprzedni, więc punkty tworzą prostą rosnącą linię na skali logarytmicznej o podstawie 10. Etykiety osi nadal pokazują oryginalne liczby żądań.

Obsługa wartości zerowych i ujemnych
Skala logarytmiczna może wyświetlać wyłącznie wartości ściśle dodatnie. Sprawdź dane przed jej włączeniem. Jeśli wartości zerowe lub ujemne mają znaczenie, zachowaj skalę liniową lub pokaż je osobno. Jeśli wykluczenie tych wartości jest uzasadnione, wyjaśnij tę decyzję. Nie zastępuj ich cicho małymi liczbami dodatnimi, ponieważ zmienia to znaczenie danych. Każde ręcznie skonfigurowane minimum lub maksimum dla logarytmicznej osi musi być także dodatnie.
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 znaczników względem osi?
Ustaw TickLabelPosition używając TickLabelPositionType: Low, High, NextTo lub None. Aby kontrolować same znaczniki, użyj MajorTickMark lub MinorTickMark; są one oddzielne od pozycjonowania etykiet.


