Personalizar Legendas de Gráficos em Apresentações Usando Java

Visão geral

Aspose.Slides for Java oferece opções para personalizar legendas de gráficos em apresentações do PowerPoint. Este artigo mostra como posicionar e dimensionar uma legenda, definir o tamanho da fonte para toda a legenda, formatar uma entrada de legenda individual e ocultar ou restaurar entradas selecionadas.

A FAQ cobre comportamentos relacionados, incluindo reservar espaço para a legenda, exibir rótulos em várias linhas e herdar a formatação do tema da apresentação.

Posicionamento da Legenda

Use os métodos setX, setY, setWidth, e setHeight da legenda para especificar sua posição e tamanho como frações das dimensões do gráfico.

Este exemplo cria uma apresentação e adiciona um gráfico de colunas agrupadas com dados padrão ao primeiro slide. Dividir os deslocamentos e dimensões desejados da legenda pela largura e altura do gráfico os converte em valores relativos: a legenda é deslocada 50 pontos do canto superior esquerdo do gráfico e tem tamanho de 100 por 100 pontos.

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, 500, 500);

    // Expresse a posição e o tamanho da legenda em relação ao gráfico.
    chart.getLegend().setX(50 / chart.getWidth());
    chart.getLegend().setY(50 / chart.getHeight());
    chart.getLegend().setWidth(100 / chart.getWidth());
    chart.getLegend().setHeight(100 / chart.getHeight());

    presentation.save("legend_position.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Definir o Tamanho da Fonte de uma Legenda

Use o getTextFormat da legenda para acessar a formatação de texto e use setFontHeight para definir o tamanho da fonte em pontos.

Este exemplo cria um gráfico com dados padrão e define o texto da legenda para 20 pontos. Ele também desabilita os limites automáticos para o eixo vertical e define seu intervalo de -5 a 10.

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, 600, 400);

    chart.getLegend().getTextFormat().getPortionFormat().setFontHeight(20);
    chart.getAxes().getVerticalAxis().setAutomaticMinValue(false);
    chart.getAxes().getVerticalAxis().setMinValue(-5);
    chart.getAxes().getVerticalAxis().setAutomaticMaxValue(false);
    chart.getAxes().getVerticalAxis().setMaxValue(10);

    presentation.save("legend_font_size.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Definir o Tamanho da Fonte de uma Entrada Individual da Legenda

Use a coleção retornada pelo método getEntries da legenda para acessar a formatação de uma entrada específica. Os índices das entradas são baseados em zero, portanto o índice 1 refere‑se à segunda entrada.

Este exemplo cria um gráfico de colunas agrupadas cujos dados padrão incluem pelo menos duas séries. Ele formata a segunda entrada da legenda com texto em negrito, itálico e azul de 20 pontos.

import com.aspose.slides.*;
import java.awt.Color;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 600, 400);
    IChartTextFormat textFormat = chart.getLegend().getEntries().get_Item(1).getTextFormat();

    textFormat.getPortionFormat().setFontBold(NullableBool.True);
    textFormat.getPortionFormat().setFontHeight(20);
    textFormat.getPortionFormat().setFontItalic(NullableBool.True);
    textFormat.getPortionFormat().getFillFormat().setFillType(FillType.Solid);
    textFormat.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLUE);

    presentation.save("legend_entry_format.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Ocultar Entradas Individuais da Legenda

Para excluir uma série auxiliar da legenda mantendo seus dados visíveis, chame ILegendEntryProperties.setHide com true via IChartSeries.getRelatedLegendEntry. Isso oculta apenas a entrada de legenda selecionada; não remove a série nem seus pontos de dados. Chamar IChart.setLegend com false, por outro lado, oculta a legenda inteira.

O exemplo abaixo cria um gráfico de colunas agrupadas com várias séries usando dados padrão. Ele oculta a entrada de legenda da segunda série (índice 1) e salva a apresentação. Em seguida, restaura a entrada chamando setHide com false e salva uma segunda cópia. As colunas permanecem visíveis em ambos os arquivos.

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, 600, 400);
    chart.setLegend(true);

    ILegendEntryProperties legendEntry = chart.getChartData().getSeries().get_Item(1).getRelatedLegendEntry();

    legendEntry.setHide(true);
    presentation.save("hidden_legend_entry.pptx", SaveFormat.Pptx);

    // Restaurar a mesma entrada sem alterar os dados do gráfico.
    legendEntry.setHide(false);
    presentation.save("restored_legend_entry.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

A comparação abaixo mostra o mesmo gráfico com todas as entradas da legenda visíveis e com a segunda entrada oculta da legenda; todas as colunas permanecem visíveis.

Comparação de um gráfico com todas as entradas da legenda visíveis e com a Série 2 oculta da legenda; todas as colunas permanecem visíveis.

Em gráficos de colunas, barras e linhas, as entradas da legenda identificam séries. Em gráficos de pizza, elas identificam pontos de dados individuais (fatias), portanto use IChartDataPoint.getRelatedLegendEntry na fatia selecionada. A API documenta este método de ponto de dados para os tipos de gráfico Pie, Pie3D, ExplodedPie, ExplodedPie3D, PieOfPie e BarOfPie. Não suponha que ele se aplique a gráficos de rosquinha, que não estão incluídos nessa lista.

FAQ

Posso fazer o gráfico reservar espaço para a legenda em vez de sobrepô-la?
Sim. Chame setOverlay com false para reservar espaço para a legenda em vez de permitir que ela sobreponha a área do gráfico.

Posso criar rótulos de legenda em várias linhas?
Sim. Rótulos longos podem ser quebrados quando a largura disponível é insuficiente. Também é possível usar caracteres de nova linha nos nomes das séries para solicitar quebras de linha.

Como faço a legenda seguir o esquema de cores do tema da apresentação?
Deixe as cores, preenchimentos e fontes da legenda sem definição para que ela possa herdar a formatação do tema. A formatação explícita substitui as configurações correspondentes do tema.