Spravování popisků dat v grafech v prezentacích pomocí JavaScriptu
Úvod
Popisky dat zobrazují informace o řadách grafu a jednotlivých bodech dat, což čtenářům pomáhá identifikovat hodnoty a rozumět grafu. Tento článek vysvětluje, jak formátovat hodnoty, zobrazovat procenta, číst text popisku, řídit popisky mimo maximální hodnotu osy, upravit rozestupy popisků os kategorií a umístit popisky koláčových grafů.
Nastavení přesnosti dat v popiscích dat grafu
Použijte setNumberFormatOfValues k formátování hodnot řady. Tento příklad vytvoří spojnicový graf s výchozími daty, zobrazí jeho datovou tabulku a povolí popisky hodnot pro první řadu. Formát #,##0.00 zobrazuje oddělovač tisíců a dvě desetinná místa, aniž by měnil základní hodnoty.
const aspose = { slides: require("aspose.slides.via.java") };
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const chart = slide.getShapes().addChart(aspose.slides.ChartType.Line, 50, 50, 450, 300);
chart.setDataTable(true);
const series = chart.getChartData().getSeries().get_Item(0);
series.setNumberFormatOfValues("#,##0.00");
series.getLabels().getDefaultDataLabelFormat().setShowValue(true);
presentation.save("PrecisionOfDatalabels_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Pro formátování číselných buněk v vložené sešitu grafu viz Set Custom Number Formats for Workbook Cells. Ten příklad také ukazuje popisky hodnot následující formáty jejich zdrojových buněk při zachování uložených číselných hodnot.
Zobrazení procent jako popisků
Pro seskupený sloupcový graf vypočítejte každou hodnotu jako procento celkové kategorie a přiřaďte text do textového rámce vráceného metodou getTextFrameForOverriding. Tento příklad používá výchozí data grafu a zobrazuje procenta se dvěma desetinnými místy ve 8‑bodovém písmu. Kategorie s celkovým součtem nula jsou přeskočeny, aby nedošlo k dělení nulou. Přepočítejte vlastní text popisku, pokud se data grafu změní.
const aspose = { slides: require("aspose.slides.via.java") };
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const chart = slide.getShapes().addChart(aspose.slides.ChartType.StackedColumn, 20, 20, 400, 400);
const categoryTotals = new Array(chart.getChartData().getCategories().size()).fill(0);
for (let k = 0; k < chart.getChartData().getCategories().size(); k++) {
for (let i = 0; i < chart.getChartData().getSeries().size(); i++) {
const series = chart.getChartData().getSeries().get_Item(i);
const pointValue = series.getDataPoints().get_Item(k).getValue().getData();
categoryTotals[k] += Number(pointValue);
}
}
for (let x = 0; x < chart.getChartData().getSeries().size(); x++) {
const series = chart.getChartData().getSeries().get_Item(x);
series.getLabels().getDefaultDataLabelFormat().setShowLegendKey(false);
for (let j = 0; j < series.getDataPoints().size(); j++) {
const label = series.getDataPoints().get_Item(j).getLabel();
if (categoryTotals[j] == 0) {
continue;
}
const pointValue = series.getDataPoints().get_Item(j).getValue().getData();
const dataPointPercent = (Number(pointValue) / categoryTotals[j]) * 100;
const portion = new aspose.slides.Portion();
portion.setText(dataPointPercent.toFixed(2) + " %");
portion.getPortionFormat().setFontHeight(8);
label.getTextFrameForOverriding().setText("");
const paragraph = label.getTextFrameForOverriding().getParagraphs().get_Item(0);
paragraph.getPortions().add(portion);
label.getDataLabelFormat().setShowValue(true);
label.getDataLabelFormat().setShowSeriesName(false);
label.getDataLabelFormat().setShowPercentage(false);
label.getDataLabelFormat().setShowLegendKey(false);
label.getDataLabelFormat().setShowCategoryName(false);
label.getDataLabelFormat().setShowBubbleSize(false);
}
}
presentation.save("DisplayPercentageAsLabels_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Nastavení procentního znaku v popiscích dat grafu
Když jsou hodnoty uloženy jako zlomky, použijte setNumberFormat k zobrazení procent. Předávejte false metodě setNumberFormatLinkedToSource pro aplikaci formátu popisku nezávisle na zdrojových buňkách.
Tento příklad vytvoří 100 % seskupený sloupcový graf s červenou a modrou řadou napříč čtyřmi kategoriemi. Každý pár hodnot sečte na 1. Formát popisku 0.0% zobrazí 0.30 jako 30.0 %, zatímco vertikální osa používá dvě desetinná místa. Obě řady používají bílý text popisku o velikosti 10 bodů.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const chart = slide.getShapes().addChart(aspose.slides.ChartType.PercentsStackedColumn, 20, 20, 500, 400);
chart.getAxes().getVerticalAxis().setNumberFormatLinkedToSource(false);
chart.getAxes().getVerticalAxis().setNumberFormat("0.00%");
chart.getChartData().getSeries().clear();
chart.getChartData().getCategories().clear();
const workbook = chart.getChartData().getChartDataWorkbook();
const worksheetIndex = 0;
for (let i = 0; i < 4; i++) {
const categoryCell = workbook.getCell(worksheetIndex, i + 1, 0, "Category " + (i + 1));
chart.getChartData().getCategories().add(categoryCell);
}
const seriesNames = ["Reds", "Blues"];
const white = java.getStaticFieldValue("java.awt.Color", "WHITE");
const seriesColors = [java.getStaticFieldValue("java.awt.Color", "RED"), java.getStaticFieldValue("java.awt.Color", "BLUE")];
const values = [[0.30, 0.50, 0.80, 0.65], [0.70, 0.50, 0.20, 0.35]];
for (let i = 0; i < seriesNames.length; i++) {
const seriesCell = workbook.getCell(worksheetIndex, 0, i + 1, seriesNames[i]);
const series = chart.getChartData().getSeries().add(seriesCell, chart.getType());
for (let j = 0; j < 4; j++) {
const valueCell = workbook.getCell(worksheetIndex, j + 1, i + 1, values[i][j]);
series.getDataPoints().addDataPointForBarSeries(valueCell);
}
series.getFormat().getFill().setFillType(java.newByte(aspose.slides.FillType.Solid));
series.getFormat().getFill().getSolidFillColor().setColor(seriesColors[i]);
const labelFormat = series.getLabels().getDefaultDataLabelFormat();
labelFormat.setShowValue(true);
labelFormat.setNumberFormatLinkedToSource(false);
labelFormat.setNumberFormat("0.0%");
labelFormat.getTextFormat().getPortionFormat().setFontHeight(10);
labelFormat.getTextFormat().getPortionFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
labelFormat.getTextFormat().getPortionFormat().getFillFormat().getSolidFillColor().setColor(white);
}
presentation.save("SetDataLabelsPercentageSign_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Čtení skutečného textu popisků dat
Použijte getActualLabelText k získání textu vytvořeného nastavením popisku dat. To je užitečné při extrahování popisků pro zprávy, vyhledávání obsahu prezentace nebo ověřování generovaných grafů. V níže uvedeném příkladu výchozí data label format kombinuje název kategorie, název řady a hodnotu. Jeden bod formátuje svou hodnotu jako procento a další používá vlastní text z getTextFrameForOverriding.
const aspose = { slides: require("aspose.slides.via.java") };
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const chart = slide.getShapes().addChart(aspose.slides.ChartType.ClusteredColumn, 20, 20, 500, 300);
chart.getChartData().getSeries().clear();
chart.getChartData().getCategories().clear();
const workbook = chart.getChartData().getChartDataWorkbook();
const firstCategoryCell = workbook.getCell(0, 1, 0, "Q1");
chart.getChartData().getCategories().add(firstCategoryCell);
const secondCategoryCell = workbook.getCell(0, 2, 0, "Q2");
chart.getChartData().getCategories().add(secondCategoryCell);
const northSeriesCell = workbook.getCell(0, 0, 1, "North");
const north = chart.getChartData().getSeries().add(northSeriesCell, chart.getType());
const northFirstValueCell = workbook.getCell(0, 1, 1, 0.25);
north.getDataPoints().addDataPointForBarSeries(northFirstValueCell);
const northSecondValueCell = workbook.getCell(0, 2, 1, 0.75);
north.getDataPoints().addDataPointForBarSeries(northSecondValueCell);
const southSeriesCell = workbook.getCell(0, 0, 2, "South");
const south = chart.getChartData().getSeries().add(southSeriesCell, chart.getType());
const southFirstValueCell = workbook.getCell(0, 1, 2, 0.40);
south.getDataPoints().addDataPointForBarSeries(southFirstValueCell);
const southSecondValueCell = workbook.getCell(0, 2, 2, 0.60);
south.getDataPoints().addDataPointForBarSeries(southSecondValueCell);
for (let i = 0; i < chart.getChartData().getSeries().size(); i++) {
const series = chart.getChartData().getSeries().get_Item(i);
const format = series.getLabels().getDefaultDataLabelFormat();
format.setShowCategoryName(true);
format.setShowSeriesName(true);
format.setShowValue(true);
}
north.getLabels().get_Item(1).getDataLabelFormat().setNumberFormatLinkedToSource(false);
north.getLabels().get_Item(1).getDataLabelFormat().setNumberFormat("0%");
south.getLabels().get_Item(0).getTextFrameForOverriding().setText("Reviewed");
for (let i = 0; i < chart.getChartData().getSeries().size(); i++) {
const series = chart.getChartData().getSeries().get_Item(i);
for (let j = 0; j < series.getDataPoints().size(); j++) {
const point = series.getDataPoints().get_Item(j);
const label = point.getLabel();
if (!label.isVisible()) {
continue;
}
console.log("Value: " + point.getValue().getData() + "; label: " + label.getActualLabelText());
}
}
} finally {
presentation.dispose();
}
Číslo uložené v datovém bodě zůstává 0.75, i když jeho popisek zobrazuje 75 % spolu s názvy kategorie a řady. Vlastní text nahrazuje generovaný text popisku. getActualLabelText vrací výsledný řetězec popisku v obou případech. Kontrolujte isVisible odděleně, jak je ukázáno výše, pokud chcete extrahovat jen viditelné popisky.
Řízení popisků dat mimo maximální hodnotu osy
Když ručně omezíte rozsah osy, některé datové body mohou překročit její maximum. Použijte setShowDataLabelsOverMaximum k nastavení, zda se jejich popisky zobrazí. Toto nastavení mění viditelnost popisků; nemění rozsah osy ani základní hodnoty dat.
Níže uvedený příklad vytvoří 2D seskupený sloupcový graf s hodnotami 60 a 120. Předá false metodě setAutomaticMaxValue a nastaví maximum na 100 metodou setMaxValue na vertikální ose. První snímek povoluje popisky nad maximem; kopie tohoto snímku je zakáže. Oba snímky jsou uloženy v DataLabelsOverMaximum.pptx.
Povolte popisky hodnot pomocí setShowValue. Nastavení na úrovni grafu samo o sobě nezpůsobí zobrazení hodnot ani nepřepíše zakázané zobrazení hodnot jednotlivých popisků. Tento příklad povolí hodnoty pro celou řadu a použije setPosition k umístění popisků na vnější konec každého sloupce.
const aspose = { slides: require("aspose.slides.via.java") };
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const chart = slide.getShapes().addChart(aspose.slides.ChartType.ClusteredColumn, 50, 50, 600, 400);
chart.setLegend(false);
chart.getChartData().getSeries().clear();
chart.getChartData().getCategories().clear();
const workbook = chart.getChartData().getChartDataWorkbook();
const firstCategory = workbook.getCell(0, 1, 0, "Within range");
const secondCategory = workbook.getCell(0, 2, 0, "Above maximum");
chart.getChartData().getCategories().add(firstCategory);
chart.getChartData().getCategories().add(secondCategory);
const seriesName = workbook.getCell(0, 0, 1, "Values");
const series = chart.getChartData().getSeries().add(seriesName, chart.getType());
const firstValue = workbook.getCell(0, 1, 1, 60);
const secondValue = workbook.getCell(0, 2, 1, 120);
series.getDataPoints().addDataPointForBarSeries(firstValue);
series.getDataPoints().addDataPointForBarSeries(secondValue);
series.getLabels().getDefaultDataLabelFormat().setShowValue(true);
series.getLabels().getDefaultDataLabelFormat().setPosition(aspose.slides.LegendDataLabelPosition.OutsideEnd);
chart.getAxes().getVerticalAxis().setAutomaticMaxValue(false);
chart.getAxes().getVerticalAxis().setMaxValue(100);
chart.setShowDataLabelsOverMaximum(true);
const secondSlide = presentation.getSlides().addClone(slide);
const secondChart = secondSlide.getShapes().get_Item(0);
secondChart.setShowDataLabelsOverMaximum(false);
presentation.save("DataLabelsOverMaximum.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Následující obrázky ukazují uložené snímky vykreslené v Microsoft PowerPoint. S true je popisek 120 viditelný na horní hranici; s false je skrytý. Popisek 60 zůstává viditelný, maximum osy zůstává 100 a druhý datový bod zůstává 120 v obou případech.
| setShowDataLabelsOverMaximum(true) | setShowDataLabelsOverMaximum(false) |
|---|---|
![]() |
![]() |
Typ grafu
Tento příklad používá 2D sloupcový graf s hodnotovou osou. Grafy bez hodnotové osy, jako jsou koláčové a prstencové grafy, nemají maximum osy, které by bylo možné tímto způsobem omezit.Nastavení vzdálenosti popisku od osy
Použijte setLabelOffset k řízení vzdálenosti mezi popisky osy kategorií a samotnou osou. Hodnota je procento maximální velikosti písma popisků osy. Tento příklad vytvoří seskupený sloupcový graf a nastaví vodorovný offset popisků osy na 500. Toto nastavení ovlivňuje popisky osy kategorií spíše než popisky připojené k jednotlivým datovým bodům.
const aspose = { slides: require("aspose.slides.via.java") };
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const chart = slide.getShapes().addChart(aspose.slides.ChartType.ClusteredColumn, 20, 20, 500, 300);
chart.getAxes().getHorizontalAxis().setLabelOffset(500);
presentation.save("SetCategoryAxisLabelDistance_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Úprava umístění popisků
U koláčového grafu upravte polohy popisků dat tak, aby se zlepšily mezery a vytvořil se prostor pro vodící čáry.
Tento příklad zobrazí hodnotu prvního datového bodu, umístí jeho popisek mimo výseč a upraví horizontální a vertikální offsety pomocí setX a setY. Tyto offsety jsou relativní k šířce a výšce grafu.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const chart = slide.getShapes().addChart(aspose.slides.ChartType.Pie, 50, 50, 200, 200);
const series = chart.getChartData().getSeries();
const label = series.get_Item(0).getLabels().get_Item(0);
label.getDataLabelFormat().setShowValue(true);
label.getDataLabelFormat().setPosition(aspose.slides.LegendDataLabelPosition.OutsideEnd);
label.setX(java.newFloat(0.71));
label.setY(java.newFloat(0.04));
presentation.save("presentation.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}

Formátování vodících čar
Když jsou popisky koláčových grafů umístěny mimo výseče, vodící čáry pomáhají čtenářům přiřadit každou hodnotu ke správné výseči. Kontrastní barva a mírně silnější čára mohou usnadnit sledování těchto spojení, zatímco průhlednost a čárkovaný styl udrží čáry vizuálně nenápadné.
Použijte getLeaderLinesFormat k formátování vodících čar na úrovni kolekce popisků série. Nastavení v series.getLabels().getLeaderLinesFormat().getLine() se vztahuje na celou kolekci, nikoli na jednotlivý popisek.
Tento příklad vytvoří koláčový graf s výchozími daty, zobrazí hodnoty mimo výseče a povolí setShowLeaderLines. Posune dva popisky dál od svých výsečí pomocí offsetů setX a setY, vyjádřených jako zlomky šířky a výšky grafu. Vstupní prezentace není vyžadována.
getFillFormat čáry nastaví plnou modrou barvu s alfa hodnotou 191 ze 255, což dává přibližně 25 % průhlednost. setWidth nastaví tloušťku na 2 body a setDashStyle učiní čáru čárkovanou.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const chart = slide.getShapes().addChart(aspose.slides.ChartType.Pie, 80, 50, 560, 400);
chart.setLegend(false);
const series = chart.getChartData().getSeries().get_Item(0);
const labelFormat = series.getLabels().getDefaultDataLabelFormat();
labelFormat.setShowValue(true);
labelFormat.setPosition(aspose.slides.LegendDataLabelPosition.OutsideEnd);
labelFormat.setShowLeaderLines(true);
// Posuňte dva popisky dále od jejich výsečí.
series.getLabels().get_Item(0).setX(java.newFloat(0.10));
series.getLabels().get_Item(0).setY(java.newFloat(-0.05));
series.getLabels().get_Item(1).setX(java.newFloat(-0.10));
series.getLabels().get_Item(1).setY(java.newFloat(0.05));
const line = series.getLabels().getLeaderLinesFormat().getLine();
line.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
const lineColor = java.newInstanceSync("java.awt.Color", 30, 90, 160, 191);
line.getFillFormat().getSolidFillColor().setColor(lineColor);
line.setWidth(2);
line.setDashStyle(java.newByte(aspose.slides.LineDashStyle.Dash));
presentation.save("FormattedLeaderLines.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Povolení vodících čar nezaručuje, že se čára objeví u každého popisku. Viditelnost závisí na umístění popisku a chování rozvržení grafu. V tomto příkladu mají dva posunuté popisky viditelné vodící čáry; popisky, které zůstávají blízko svých výsečí, je nepotřebují.
Následující obrázek ukazuje uložený soubor FormattedLeaderLines.pptx vykreslený pomocí Aspose.Slides:

Přidání několika řádků popisků nad sloupcový graf
Tento příklad vytvoří sloupcový graf se dvěma řádky popisků nad vykreslenou oblastí. Řada A zobrazuje viditelné sloupce, zatímco řady B a C poskytují dodatečné popisky. Jejich sloupce jsou skryty odstraněním výplně a obrysu. Metoda ChartSeriesGroup.setOverlap zarovnává všechny tři řady ke stejným středům kategorií.
Nastavení ChartPlotArea vyhrazuje prostor pro řádky popisků. Po výpočtu výchozích pozic metodou Chart.validateChartLayout zachovají DataLabel.setX a DataLabel.setY vodorovné zarovnání a použijí vertikální offsety k uspořádání popisků ve dvou řadách. Čísla zůstávají popisky dat propojené s hodnotami řad; pouze nadpisy řad jsou samostatné textové tvary.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const black = java.getStaticFieldValue("java.awt.Color", "BLACK");
const presentation = new aspose.slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
const chart = slide.getShapes().addChart(aspose.slides.ChartType.ClusteredColumn, 40, 40, 640, 200);
chart.setTitle(false);
chart.setLegend(false);
chart.getTextFormat().getPortionFormat().setFontHeight(12);
chart.getChartData().getSeries().clear();
chart.getChartData().getCategories().clear();
const workbook = chart.getChartData().getChartDataWorkbook();
workbook.clear(0);
const categories = ["North", "South", "East", "West"];
const seriesNames = ["Series A", "Series B", "Series C"];
const seriesValues = [[35, 42, 28, 47], [22, 31, 19, 26], [12, 16, 14, 18]];
for (let categoryIndex = 0; categoryIndex < categories.length; categoryIndex++) {
const categoryCell = workbook.getCell(0, categoryIndex + 1, 0, categories[categoryIndex]);
chart.getChartData().getCategories().add(categoryCell);
}
for (let seriesIndex = 0; seriesIndex < seriesNames.length; seriesIndex++) {
const seriesCell = workbook.getCell(0, 0, seriesIndex + 1, seriesNames[seriesIndex]);
const series = chart.getChartData().getSeries().add(seriesCell, aspose.slides.ChartType.ClusteredColumn);
for (let categoryIndex = 0; categoryIndex < categories.length; categoryIndex++) {
const valueCell = workbook.getCell(0, categoryIndex + 1, seriesIndex + 1, seriesValues[seriesIndex][categoryIndex]);
series.getDataPoints().addDataPointForBarSeries(valueCell);
}
if (seriesIndex > 0) {
// Skryjte sloupce B a C, ale ponechte jejich popisky dat.
series.getFormat().getFill().setFillType(java.newByte(aspose.slides.FillType.NoFill));
series.getFormat().getLine().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.NoFill));
series.getLabels().getDefaultDataLabelFormat().setShowValue(true);
series.getLabels().getDefaultDataLabelFormat().getTextFormat().getPortionFormat().setFontHeight(12);
const labelFill = series.getLabels().getDefaultDataLabelFormat().getTextFormat().getPortionFormat().getFillFormat();
labelFill.setFillType(java.newByte(aspose.slides.FillType.Solid));
labelFill.getSolidFillColor().setColor(black);
series.getLabels().getDefaultDataLabelFormat().setPosition(aspose.slides.LegendDataLabelPosition.InsideBase);
}
}
// Zarovnejte všechny tři řady se stejnými středy kategorií.
chart.getChartData().getSeries().get_Item(0).getParentSeriesGroup().setOverlap(java.newByte(100));
// Pro tento kompaktní příklad použijte méně mřížkových čar.
chart.getAxes().getVerticalAxis().setAutomaticMajorUnit(false);
chart.getAxes().getVerticalAxis().setMajorUnit(10);
// Rezervujte místo nad vykreslenou oblastí pro dva řádky popisků dat.
chart.getPlotArea().setLayoutTargetType(aspose.slides.LayoutTargetType.Inner);
chart.getPlotArea().setX(java.newFloat(0.15));
chart.getPlotArea().setY(java.newFloat(0.32));
chart.getPlotArea().setWidth(java.newFloat(0.80));
chart.getPlotArea().setHeight(java.newFloat(0.48));
chart.validateChartLayout();
for (let seriesIndex = 1; seriesIndex < seriesNames.length; seriesIndex++) {
const series = chart.getChartData().getSeries().get_Item(seriesIndex);
const rowTop = seriesIndex == 1 ? 0.15 : 0.03;
for (let categoryIndex = 0; categoryIndex < categories.length; categoryIndex++) {
const dataLabel = series.getDataPoints().get_Item(categoryIndex).getLabel();
// Zachovejte výchozí vodorovnou pozici. Y je posun od
// výchozí pozice popisku, vyjádřený jako zlomek výšky grafu.
dataLabel.setX(0);
dataLabel.setY(java.newFloat(rowTop - dataLabel.getActualY() / chart.getHeight()));
}
// Pouze nadpis řádku je samostatný textový tvar.
const rowHeading = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, chart.getX(), chart.getY() + rowTop * chart.getHeight(), 85, 18);
rowHeading.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.NoFill));
rowHeading.getLineFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.NoFill));
rowHeading.addTextFrame(seriesNames[seriesIndex]);
rowHeading.getTextFrame().getTextFrameFormat().setMarginTop(0);
rowHeading.getTextFrame().getTextFrameFormat().setMarginBottom(0);
const headingFormat = rowHeading.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0).getPortionFormat();
headingFormat.setFontHeight(12);
headingFormat.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
headingFormat.getFillFormat().getSolidFillColor().setColor(black);
}
presentation.save("multiple-rows-of-labels.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}

Často kladené otázky
Jak mohu zabránit překrývání popisků dat v hustých grafech?
Kombinujte automatické umístění popisků, vodící čáry a sníženou velikost písma; v případě potřeby skryjte některá pole (například kategorii) nebo zobrazte popisky jen pro extrémní hodnoty či klíčové body.
Jak mohu zakázat popisky pouze pro nulové, záporné nebo prázdné hodnoty?
Filtrujte datové body před povolením popisků a vypněte zobrazení pro hodnoty 0, záporné hodnoty nebo chybějící hodnoty podle definovaného pravidla.
Jak zajistit jednotný styl popisků při exportu do PDF/obrázků?
Explicitně nastavte rodinu písma a velikost a ověřte, že je písmo dostupné v prostředí vykreslování, aby nedošlo k automatické náhradě.

