Přizpůsobení os grafu v prezentacích pomocí C++
Přehled
Tento článek vysvětluje, jak přizpůsobit osy grafu pomocí Aspose.Slides pro C++. Popisuje vypočítané hodnoty os, přepínání řádků a sloupců grafu, viditelnost os, intervaly popisků kategorií a značek os, datumové kategorie a formátování, rotaci názvu, umístění os, jednotky zobrazení a logaritmické škálování.
Získání maximálních hodnot na svislé ose grafů
Vytvořte Prezentaci a přidejte plošný graf s výchozími daty. Před načtením vypočítaných hodnot os zavolejte ValidateChartLayout, aby byl rozvrh grafu aktuální.
Přečtěte get_ActualMaxValue a get_ActualMinValue pro limity os a get_ActualMajorUnit a get_ActualMinorUnit pro intervaly značek. get_ActualMajorUnitScale a get_ActualMinorUnitScale poskytují časové jednotky, které jsou relevantní pro datumové osy. Příklad uloží tyto hodnoty do lokálních proměnných a uloží graf.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::Area, 100, 100, 500, 350);
chart->ValidateChartLayout();
auto maxValue = chart->get_Axes()->get_VerticalAxis()->get_ActualMaxValue();
auto minValue = chart->get_Axes()->get_VerticalAxis()->get_ActualMinValue();
auto majorUnit = chart->get_Axes()->get_VerticalAxis()->get_ActualMajorUnit();
auto minorUnit = chart->get_Axes()->get_VerticalAxis()->get_ActualMinorUnit();
auto majorUnitScale = chart->get_Axes()->get_VerticalAxis()->get_ActualMajorUnitScale();
auto minorUnitScale = chart->get_Axes()->get_VerticalAxis()->get_ActualMinorUnitScale();
presentation->Save(u"AxisValues_out.pptx", SaveFormat::Pptx);
Prohození dat mezi osami
Použijte SwitchRowColumn k výměně rolí řad a kategorií v datech grafu. Každá dřívější kategorie se stane řadou a každá dřívější řada se stane kategorií. Tím se změní způsob seskupení dat; neprohodí se vodorovná a svislá osa. Příklad používá SetRange k navázání výchozích dat na Sheet1!A1:D5, včetně řádku záhlaví a sloupce kategorií, před výměnou řádků a sloupců. Uloží graf se čtyřmi řadami a třemi kategoriemi.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
#include <DOM/Chart/IChartData.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::ClusteredColumn, 100, 100, 400, 300);
chart->get_ChartData()->SetRange(u"Sheet1!A1:D5");
chart->get_ChartData()->SwitchRowColumn();
presentation->Save(u"SwitchChartRowColumns_out.pptx", SaveFormat::Pptx);
Deaktivace svislé osy pro čárové grafy
Použijte set_IsVisible s hodnotou false na svislé ose, aby se skryla. Příklad vytvoří čárový graf s výchozími daty a uloží jej se skrytou svislou osou.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::Line, 100, 100, 400, 300);
chart->get_Axes()->get_VerticalAxis()->set_IsVisible(false);
presentation->Save(u"HiddenVerticalAxis.pptx", SaveFormat::Pptx);
Deaktivace vodorovné osy pro čárové grafy
Použijte set_IsVisible s hodnotou false na vodorovné ose, aby se skryla. Příklad vytvoří čárový graf s výchozími daty a uloží jej se skrytou vodorovnou osou.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::Line, 100, 100, 400, 300);
chart->get_Axes()->get_HorizontalAxis()->set_IsVisible(false);
presentation->Save(u"HiddenHorizontalAxis.pptx", SaveFormat::Pptx);
Změna osy kategorií
Použijte set_CategoryAxisType k výběru datumové nebo textové osy kategorií. Tento příklad vyžaduje ExistingChart.pptx, kde je graf první tvarem na první snímku a buňky kategorií obsahují číselné datumy Excelu. Změní vodorovnou osu na datumovou osu. Volání set_IsAutomaticMajorUnit s false, set_MajorUnit s 1 a set_MajorUnitScale s měsíci umístí hlavní značky v intervalech jednoho měsíce.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
#include <DOM/Chart/CategoryAxisType.h>
#include <DOM/Chart/TimeUnitType.h>
#include <system/object_ext.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>(u"ExistingChart.pptx");
auto slide = presentation->get_Slide(0);
auto chart = System::ExplicitCast<IChart>(slide->get_Shape(0));
chart->get_Axes()->get_HorizontalAxis()->set_CategoryAxisType(CategoryAxisType::Date);
chart->get_Axes()->get_HorizontalAxis()->set_IsAutomaticMajorUnit(false);
chart->get_Axes()->get_HorizontalAxis()->set_MajorUnit(1);
chart->get_Axes()->get_HorizontalAxis()->set_MajorUnitScale(TimeUnitType::Months);
presentation->Save(u"ChangeChartCategoryAxis_out.pptx", SaveFormat::Pptx);
Řízení intervalů popisků osy kategorií
Když má graf mnoho kategorií, můžete snížit počet viditelných popisků osy bez odstraňování kategorií nebo datových bodů. Použijte set_IsAutomaticTickLabelSpacing s false a poté set_TickLabelSpacing s požadovaným intervalem kategorií. Pro textové kategorie v jejich normálním pořadí se číslování začíná od první kategorie:
| Interval | Popisky zobrazené v příkladu |
|---|---|
1 |
Kategorie 1, Kategorie 2, Kategorie 3, … Kategorie 24 |
2 |
Kategorie 1, Kategorie 3, Kategorie 5, … Kategorie 23 |
3 |
Kategorie 1, Kategorie 4, Kategorie 7, … Kategorie 22 |
Interval 3 zobrazuje každý třetí popisek, přičemž dva popisky mezi nimi jsou skryté. Neodstraňuje odpovídající sloupce. Automatické rozestupy volí interval na základě dostupného místa; nemusí zobrazit každý popisek.
Značky mají samostatná nastavení. Použijte set_IsAutomaticTickMarksSpacing s false a set_TickMarksSpacing k nastavení jejich intervalu. Například 1 zachová značku na každém intervalu kategorie, zatímco popisky se zobrazí jen každou třetí kategorii. Použijte set_MajorTickMark s viditelným stylem, abyste viděli výsledek. Návrat automatického nastavení libovolné z těchto vlastností na true umožní grafu zvolit interval znovu.
Následující samostatný příklad vytvoří 24 kategorií a jednu řadu, poté uloží tři snímky v CategoryAxisIntervals.pptx: automatické rozestupy, manuální rozestupy popisků s nezávislými značkami a obnovené automatické rozestupy. Obě kopie zachovávají původní data grafu. Žádná vstupní prezentace není vyžadována. Vodorovný text popisků usnadňuje rozpoznat rozdíl v hustotě.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
#include <DOM/Chart/IChartData.h>
#include <DOM/Chart/CategoryAxisType.h>
#include <DOM/Chart/TickMarkType.h>
#include <DOM/Chart/IChartTextFormat.h>
#include <DOM/Chart/IChartTextBlockFormat.h>
#include <DOM/Chart/IChartPortionFormat.h>
#include <DOM/Chart/IChartDataWorkbook.h>
#include <DOM/Chart/IChartDataCell.h>
#include <DOM/Chart/IChartCategoryCollection.h>
#include <DOM/Chart/IChartSeriesCollection.h>
#include <DOM/Chart/IChartSeries.h>
#include <DOM/Chart/IChartDataPointCollection.h>
#include <system/object_ext.h>
#include <DOM/ISlideCollection.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::ClusteredColumn, 30, 40, 660, 320);
chart->set_HasLegend(false);
chart->get_ChartData()->get_Categories()->Clear();
chart->get_ChartData()->get_Series()->Clear();
auto workbook = chart->get_ChartData()->get_ChartDataWorkbook();
workbook->Clear(0);
auto series = chart->get_ChartData()->get_Series()->Add(ChartType::ClusteredColumn);
for (auto i = 0; i < 24; i++)
{
auto categoryName = System::String::Format(u"Category {0}", i + 1);
auto categoryCell = workbook->GetCell(0, i + 1, 0, System::ObjectExt::Box(categoryName));
chart->get_ChartData()->get_Categories()->Add(categoryCell);
auto valueCell = workbook->GetCell(0, i + 1, 1, System::ObjectExt::Box(10 + i % 6 * 5));
series->get_DataPoints()->AddDataPointForBarSeries(valueCell);
}
auto axis = chart->get_Axes()->get_HorizontalAxis();
axis->set_CategoryAxisType(CategoryAxisType::Text);
axis->get_TextFormat()->get_TextBlockFormat()->set_RotationAngle(0);
axis->get_TextFormat()->get_PortionFormat()->set_FontHeight(12);
axis->set_MajorTickMark(TickMarkType::Outside);
axis->set_IsAutomaticTickLabelSpacing(true);
axis->set_IsAutomaticTickMarksSpacing(true);
// Snímek 2: zobrazit každý třetí popisek, ale zachovat značku pro každou kategorii.
auto manualSlide = presentation->get_Slides()->AddClone(slide);
auto manualChart = System::ExplicitCast<IChart>(manualSlide->get_Shape(0));
auto manualAxis = manualChart->get_Axes()->get_HorizontalAxis();
manualAxis->set_IsAutomaticTickLabelSpacing(false);
manualAxis->set_TickLabelSpacing(3);
manualAxis->set_IsAutomaticTickMarksSpacing(false);
manualAxis->set_TickMarksSpacing(1);
// Snímek 3: nechat graf znovu zvolit oba intervaly.
auto restoredSlide = presentation->get_Slides()->AddClone(manualSlide);
auto restoredChart = System::ExplicitCast<IChart>(restoredSlide->get_Shape(0));
restoredChart->get_Axes()->get_HorizontalAxis()->set_IsAutomaticTickLabelSpacing(true);
restoredChart->get_Axes()->get_HorizontalAxis()->set_IsAutomaticTickMarksSpacing(true);
presentation->Save(u"CategoryAxisIntervals.pptx", SaveFormat::Pptx);
Automatické rozestupy (snímek 1): V tomto vykreslení je každá druhá kategorie zobrazena a zalamuje se do dvou řádků. Automatický výsledek se může lišit podle velikosti grafu, fontů a vykreslovače.

Manuální rozestupy (snímek 2): Každý třetí popisek je zobrazen na jednom řádku, zatímco značky zůstávají na každém intervalu kategorie. Všechny 24 sloupců, včetně těch bez popisků, zůstávají viditelné se stejnými hodnotami. Snímek 3 obnoví automatický vzhled zobrazený výše.

Zvolte správnou osu a interval
Použijte tento interval počtu kategorií pro textovou osu kategorií, například osu kategorií sloupcového, čárového, plošného nebo pruhového grafu. Ve sloupcovém grafu je to vodorovná osa. Ve vodorovném pruhovém grafu je osa kategorií svislá, takže použijte nastavení na get_VerticalAxis. Rozestupy značek se také vztahují na osu řad v grafech, které ji mají.
Nepoužívejte rozestupy popisků kategorií k nastavení číselné škály hodnotové osy. Na hodnotové ose set_MajorUnit určuje rozdíl v hodnotách: například hlavní jednotka 10 vytvoří značky při 0, 10, 20 atd., pokud osa začíná nulou. Interval popisků kategorií 3 počítá pozice kategorií, nezávisle na jejich hodnotách. Bodové a bublinové grafy používají hodnotové osy místo textové osy kategorií. Pro datumovou osu použijte časové hlavní jednotky a škály popsané v Změna osy kategorií.
Nastavení formátu data pro hodnoty osy kategorií
Příklad nahradí výchozí data grafu čtyřmi ročními hodnotami. Data jsou uložena jako sériová čísla OLE Automation v první listu (index 0). Použijte set_CategoryAxisType k výběru datumové osy, vypněte formátování propojené se zdrojem pomocí set_IsNumberFormatLinkedToSource a přiřaďte yyyy pomocí set_NumberFormat, aby se popisky kategorií zobrazovaly jako čtyřciferné roky nezávisle na formátování buňky.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
#include <DOM/Chart/IChartData.h>
#include <DOM/Chart/CategoryAxisType.h>
#include <DOM/Chart/IChartDataWorkbook.h>
#include <DOM/Chart/IChartDataCell.h>
#include <DOM/Chart/IChartCategoryCollection.h>
#include <DOM/Chart/IChartSeriesCollection.h>
#include <DOM/Chart/IChartSeries.h>
#include <DOM/Chart/IChartDataPointCollection.h>
#include <system/object_ext.h>
#include <system/date_time.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::Line, 50, 50, 450, 300);
chart->get_ChartData()->get_Categories()->Clear();
chart->get_ChartData()->get_Series()->Clear();
auto workbook = chart->get_ChartData()->get_ChartDataWorkbook();
workbook->Clear(0);
auto series = chart->get_ChartData()->get_Series()->Add(ChartType::Line);
for (auto i = 0; i < 4; i++)
{
auto date = System::DateTime(2015 + i, 1, 1);
auto categoryCell = workbook->GetCell(0, i + 1, 0, System::ObjectExt::Box(date.ToOADate()));
chart->get_ChartData()->get_Categories()->Add(categoryCell);
auto valueCell = workbook->GetCell(0, i + 1, 1, System::ObjectExt::Box(i + 1));
series->get_DataPoints()->AddDataPointForLineSeries(valueCell);
}
chart->get_Axes()->get_HorizontalAxis()->set_CategoryAxisType(CategoryAxisType::Date);
chart->get_Axes()->get_HorizontalAxis()->set_IsNumberFormatLinkedToSource(false);
chart->get_Axes()->get_HorizontalAxis()->set_NumberFormat(u"yyyy");
presentation->Save(u"DateAxisFormat.pptx", SaveFormat::Pptx);
Nastavení úhlu otočení názvu osy grafu
Povolte název svislé osy pomocí set_HasTitle, zadejte text názvu a použijte set_RotationAngle k otočení názvu. Úhel se měří ve stupních; tento příklad uloží sloupcový graf s názvem hodnotové osy otočeným o 90 stupňů.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
#include <DOM/Chart/IChartTextFormat.h>
#include <DOM/Chart/IChartTextBlockFormat.h>
#include <DOM/Chart/IChartTitle.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::ClusteredColumn, 50, 50, 450, 300);
chart->get_Axes()->get_VerticalAxis()->set_HasTitle(true);
chart->get_Axes()->get_VerticalAxis()->get_Title()->AddTextFrameForOverriding(u"Value");
chart->get_Axes()->get_VerticalAxis()->get_Title()->get_TextFormat()->get_TextBlockFormat()->set_RotationAngle(90);
presentation->Save(u"RotatedAxisTitle.pptx", SaveFormat::Pptx);
Nastavení polohy osy na ose kategorie nebo hodnoty
Použijte set_AxisBetweenCategories k ovládání, zda hodnotová osa protíná osu kategorií mezi kategoriemi nebo na značkách kategorií. Toto nastavení platí pro osy kategorií. Příklad nastaví tuto volbu na true pro vodorovnou osu kategorií sloupcového grafu a uloží výsledek.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::ClusteredColumn, 50, 50, 450, 300);
chart->get_Axes()->get_HorizontalAxis()->set_AxisBetweenCategories(true);
presentation->Save(u"AxisBetweenCategories.pptx", SaveFormat::Pptx);
Nastavení jednotky zobrazení na hodnotové ose grafu
Použijte set_DisplayUnit k měřítku popisků na hodnotové ose bez změny podkladových dat. S DisplayUnitType nastaveným na Millions se hodnota 60 000 000 zobrazí jako 60. Příklad vytvoří sloupcový graf a použije jednotku miliónů na jeho svislé ose.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
#include <DOM/Chart/DisplayUnitType.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::ClusteredColumn, 50, 50, 450, 300);
chart->get_Axes()->get_VerticalAxis()->set_DisplayUnit(DisplayUnitType::Millions);
presentation->Save(u"Result.pptx", SaveFormat::Pptx);
Konfigurace logaritmické hodnotové osy
Logaritmická hodnotová osa je užitečná, když se kladné hodnoty rozprostírají přes několik řádů velikosti. Například služba může během pěti období přijímat 10, 100, 1 000, 10 000 a 100 000 požadavků. Při lineárním měřítku se menší hodnoty zobrazí těsně u nuly. Logaritmické měřítko usnadňuje porovnání relativního růstu: stejné vzdálenosti představují stejné poměry, nikoli stejné rozdíly.
Zavolejte set_IsLogarithmic s true na hodnotové ose a použijte set_LogBase k volbě základu. Toto změní způsob zobrazení existujících hodnot; nemění data ani nepřidá logaritmickou regresní čáru. Regresní čára představuje vyhovující vztah v datech a je samostatnou funkcí.
Vyberte hodnotovou osu a základ
U čárových nebo sloupcových grafů je hodnotová osa get_VerticalAxis. U vodorovného pruhového grafu je to get_HorizontalAxis. Bodové a bublinové grafy mají dvě hodnotové osy, takže vyberte vodorovnou osu pro hodnoty X, svislou pro hodnoty Y nebo obě. Logaritmické škálování nepoužívejte pro osu kategorií.
Výchozí logaritmický základ je 10. Pro PPTX grafy můžete použít základ od 2 do 1000 včetně; podporovány jsou i zlomkové základy jako 2.5. Se základem 10 jsou po sobě jdoucí mocniny 10, 100, 1 000 a 10 000 rovnoměrně rozmístěny.
Porovnání lineárního a logaritmického škálování
Následující samostatný příklad vytvoří čárový graf s pěti počty požadavků na prvním snímku, poté klonuje tento snímek a povolí logaritmickou hodnotovou osu se základem 10 na druhém. Oba snímky zachovávají stejná data.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <DOM/Chart/IChartData.h>
#include <DOM/Chart/IChartDataWorkbook.h>
#include <DOM/Chart/IChartDataCell.h>
#include <DOM/Chart/IChartCategoryCollection.h>
#include <DOM/Chart/IChartSeriesCollection.h>
#include <DOM/Chart/IChartSeries.h>
#include <DOM/Chart/IChartDataPointCollection.h>
#include <Export/SaveFormat.h>
#include <system/object_ext.h>
#include <array>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::Line, 30, 40, 660, 200);
chart->set_HasLegend(false);
chart->get_ChartData()->get_Categories()->Clear();
chart->get_ChartData()->get_Series()->Clear();
auto workbook = chart->get_ChartData()->get_ChartDataWorkbook();
workbook->Clear(0);
auto series = chart->get_ChartData()->get_Series()->Add(ChartType::Line);
auto values = std::array<double, 5>{10, 100, 1000, 10000, 100000};
for (auto i = 0; i < values.size(); i++)
{
auto categoryName = System::String::Format(u"Period {0}", i + 1);
auto categoryCell = workbook->GetCell(0, i + 1, 0, System::ObjectExt::Box(categoryName));
chart->get_ChartData()->get_Categories()->Add(categoryCell);
auto valueCell = workbook->GetCell(0, i + 1, 1, System::ObjectExt::Box(values[i]));
series->get_DataPoints()->AddDataPointForLineSeries(valueCell);
}
// Zachovat první snímek lineární a změnit pouze měřítko hodnotové osy kopie.
auto logarithmicSlide = presentation->get_Slides()->AddClone(slide);
auto logarithmicChart = System::ExplicitCast<IChart>(logarithmicSlide->get_Shape(0));
auto valueAxis = logarithmicChart->get_Axes()->get_VerticalAxis();
valueAxis->set_IsLogarithmic(true);
valueAxis->set_LogBase(10);
presentation->Save(u"LogarithmicAxis.pptx", SaveFormat::Pptx);
Lineární měřítko (snímek 1): Stejné vertikální vzdálenosti představují stejné rozdíly v počtech požadavků. Největší hodnota dominuje grafu, což ztěžuje rozlišení menších hodnot.

Logaritmické měřítko (snímek 2): Stejné vertikální vzdálenosti představují stejné poměry. Každé období má desetkrát více požadavků než předchozí, takže body tvoří přímou stoupající čáru na logaritmickém měřítku se základem 10. Popisky osy stále ukazují původní počty požadavků.

Zpracování nulových a záporných hodnot
Logaritmické měřítko může zobrazovat jen striktně kladné hodnoty. Před jeho povolením zkontrolujte data. Pokud jsou nuly nebo záporné hodnoty významné, zachovejte lineární měřítko nebo je zobrazte odděleně. Pokud je vhodné tyto hodnoty z analýzy vyloučit, vysvětlete vynechání. Nevkládejte tichá nahrazení těmito hodnotami malými kladnými čísly, protože by to změnilo význam dat. Jakýkoli ručně nastavený minimální nebo maximální limit pro logaritmickou osu musí být také kladný.
Často kladené otázky
Jak nastavit hodnotu, při které se jedna osa protíná s druhou (překřížení osy)?
Použijte set_CrossType k výběru chování překřížení. Pro zadání číselné hodnoty překřížení použijte set_CrossAt. Tato nastavení vám umožní posunout překřížení osy na vhodnou základní linii.
Jak mohu umístit popisky značek relativně k ose?
Použijte set_TickLabelPosition s hodnotou z TickLabelPositionType: Low, High, NextTo nebo None. Pro řízení samotných značek použijte set_MajorTickMark nebo set_MinorTickMark; jsou to samostatné nastavení od pozic popisků.