Gestionar series de datos de gráficos en presentaciones en Java
Visión general
Un gráfico puede almacenar sus valores trazados en celdas del libro de trabajo o directamente como literales numéricos. Un IChartSeries representa un conjunto de valores relacionados, y cada IChartDataPoint representa un punto en esa serie. Los objetos IChartCategory proporcionan las etiquetas o valores de agrupación compartidos por las series. En los gráficos creados con datos predeterminados, los nombres de series, categorías y valores de puntos utilizan objetos IChartDataCell del libro de trabajo del gráfico.
Para un gráfico de categorías típico, el libro de trabajo predeterminado usa la fila 0 para los nombres de series, la columna 0 para los nombres de categorías y las celdas restantes para los valores de series. Los índices de hoja, fila y columna que se pasan a IChartDataWorkbook.getCell son base cero. Esta disposición es útil cuando crea un gráfico con datos predeterminados, pero no asuma que todo gráfico existente lo utilice. Para una presentación cargada, examine las celdas referenciadas por las series, categorías y puntos de datos antes de cambiar los valores del libro de trabajo.
Los ajustes del gráfico tienen tres ámbitos diferentes:
- Los ajustes a nivel de serie, como IChartSeries.getFormat, proporcionan la apariencia predeterminada para todos los puntos de una serie.
- Los ajustes de punto de datos, como IChartDataPoint.getFormat, sustituyen la apariencia de la serie para un punto.
- Los ajustes de grupo se aplican a series compatibles que pertenecen al mismo IChartSeriesGroup. Acceda al grupo mediante IChartSeries.getParentSeriesGroup cuando necesite establecer opciones como superposición o ancho del intervalo.
Cuando no se establece un relleno explícito de punto o serie, el estilo y el tema del gráfico determinan la apariencia automática. Cuando existen tanto el formato de serie como el de punto, el formato del punto tiene precedencia para ese punto.

Establecer valores de serie usando literales numéricos
Use literales numéricos cuando los valores de serie provengan de datos de aplicación o cálculos y no necesiten referencias a celdas de la hoja de cálculo. Llame a setDataSourceTypeForValues con DataSourceType.DoubleLiterals antes de asignar el resultado de getValue de cada punto mediante setAsLiteralDouble.
El ajuste de la colección controla el tipo de origen de todos los valores de punto en esa serie. El método getDataSourceType de cada valor de punto informa del tipo seleccionado; cámbielo a través del ajuste de la colección. Con Worksheet, use getAsCell para acceder a la celda referenciada. Con DoubleLiterals, use getAsLiteralDouble o setAsLiteralDouble para leer o escribir el número directamente.
El siguiente ejemplo crea un gráfico de columnas con series y categorías predeterminadas, luego asigna valores calculados de 10, 20, etc., a los puntos existentes de su primera serie. Guarda la presentación, la vuelve a abrir y muestra los valores almacenados.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 300);
IChartSeries series = chart.getChartData().getSeries().get_Item(0);
series.getDataPoints().setDataSourceTypeForValues(DataSourceType.DoubleLiterals);
for (int i = 0; i < series.getDataPoints().size(); i++) {
series.getDataPoints().get_Item(i).getValue().setAsLiteralDouble((i + 1) * 10);
}
presentation.save("numeric_literals.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Presentation reopenedPresentation = new Presentation("numeric_literals.pptx");
try {
ISlide reopenedSlide = reopenedPresentation.getSlides().get_Item(0);
IChart reopenedChart = (IChart) reopenedSlide.getShapes().get_Item(0);
IChartSeries reopenedSeries = reopenedChart.getChartData().getSeries().get_Item(0);
for (IChartDataPoint point : reopenedSeries.getDataPoints()) {
System.out.println(point.getValue().getAsLiteralDouble());
}
} finally {
reopenedPresentation.dispose();
}
El tipo de origen del valor del punto es independiente de IChartData.getDataSourceType, que identifica la configuración interna o externa del libro de trabajo del gráfico. El uso de literales numéricos no elimina, por sí mismo, el libro de trabajo incrustado. En este ejemplo, el libro de trabajo sigue disponible para las etiquetas de categoría, los nombres de serie y la otra serie. Consulte Libro de trabajo del gráfico para la gestión del libro de trabajo.
Para gráficos de dispersión y burbujas, use setDataSourceTypeForXValues y setDataSourceTypeForYValues para elegir los orígenes de getXValue y getYValue. Los gráficos de burbujas también usan setDataSourceTypeForBubbleSizes para getBubbleSize. Establezca cada origen aplicable en DoubleLiterals antes de asignar números mediante el método setAsLiteralDouble del valor correspondiente.
Establecer la superposición de series de gráfico
IChartSeries.getOverlap informa del grado de superposición de barras o columnas en un gráfico 2D, de -100 a 100 por ciento. Es una proyección de solo lectura del ajuste en el grupo de series padre. Use IChartSeriesGroup.setOverlap para actualizar todas las series compatibles en ese grupo. Esta opción se aplica a tipos de gráfico que muestran barras o columnas agrupadas; no afecta a grupos de series no relacionados en un gráfico combinado.
El siguiente ejemplo establece la superposición para el grupo que contiene la primera serie:
import com.aspose.slides.*;
final int firstSlideIndex = 0;
final int firstSeriesIndex = 0;
final byte overlapPercent = 30;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(firstSlideIndex);
// El nuevo gráfico contiene series, categorías y valores de muestra.
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 200);
IChartSeries series = chart.getChartData().getSeries().get_Item(firstSeriesIndex);
series.getParentSeriesGroup().setOverlap(overlapPercent);
presentation.save("series_overlap.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
El resultado:

Cambiar el color de relleno de la serie
Use IChartSeries.getFormat para establecer el relleno predeterminado de una serie completa. Si un punto ya tiene un relleno explícito, su ajuste IChartDataPoint.getFormat sustituye el relleno de la serie para ese punto.
El siguiente ejemplo aplica un relleno sólido azul a la primera serie:
import com.aspose.slides.*;
import java.awt.Color;
final int firstSlideIndex = 0;
final int firstSeriesIndex = 0;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(firstSlideIndex);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 200);
IChartSeries series = chart.getChartData().getSeries().get_Item(firstSeriesIndex);
series.getFormat().getFill().setFillType(FillType.Solid);
series.getFormat().getFill().getSolidFillColor().setColor(Color.BLUE);
presentation.save("series_color.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
El resultado:

Cambiar el nombre de la serie
Un nombre de serie se almacena en el libro de trabajo de datos del gráfico y normalmente se muestra en la leyenda. En el libro de trabajo predeterminado creado para un gráfico de columnas agrupadas, la celda B1 está en la fila 0, columna 1 y contiene el nombre de la primera serie. Las constantes nombradas en el siguiente ejemplo hacen explícita esa estructura:
import com.aspose.slides.*;
final int firstSlideIndex = 0;
final int worksheetIndex = 0;
final int seriesNameRowIndex = 0;
final int firstSeriesColumnIndex = 1;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(firstSlideIndex);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 200);
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
IChartDataCell seriesNameCell = workbook.getCell(worksheetIndex, seriesNameRowIndex, firstSeriesColumnIndex);
seriesNameCell.setValue("Revenue");
presentation.save("series_name.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
También puede actualizar la celda ya referenciada por IChartSeries.getName. Este enfoque evita suponer una fila y columna determinadas en un gráfico existente:
import com.aspose.slides.*;
final int firstSlideIndex = 0;
final int firstSeriesIndex = 0;
final int firstNameCellIndex = 0;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(firstSlideIndex);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 200);
IChartSeries series = chart.getChartData().getSeries().get_Item(firstSeriesIndex);
IChartDataCell seriesNameCell = series.getName().getAsCells().get_Item(firstNameCellIndex);
seriesNameCell.setValue("Revenue");
presentation.save("series_name.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
El resultado:

Crear una serie con un nombre a partir de varias celdas
Un nombre de serie compuesto es útil cuando el nombre del producto y el período de informe se guardan en celdas diferentes del libro de trabajo. Por ejemplo, puede combinar Product A en B1 y 2026 en C1 en un único nombre de serie manteniendo ambas partes vinculadas a sus celdas origen.
Use IChartDataWorkbook.getCellCollection para obtener el rango de nombres y luego pase esa colección a IChartSeriesCollection.add. El argumento skipHiddenCells controla si se incluyen celdas ocultas: true las excluye, false las incluye. Este ejemplo usa false para incluir todas las celdas del rango de nombres.
El siguiente ejemplo crea una presentación con una serie y dos puntos de datos. Las celdas B1:C1 suministran solo el nombre de la serie; A2:A3 suministran las etiquetas de categoría, y B2:B3 suministran los valores numéricos.
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, 620, 180);
chart.getChartData().getSeries().clear();
chart.getChartData().getCategories().clear();
chart.setLegend(true);
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
workbook.clear(0);
// Estas dos celdas proporcionan el nombre de la serie.
workbook.getCell(0, 0, 1, "Product A");
workbook.getCell(0, 0, 2, "2026");
IChartCellCollection nameCells = workbook.getCellCollection("Sheet1!$B$1:$C$1", false);
IChartSeries series = chart.getChartData().getSeries().add(nameCells, ChartType.ClusteredColumn);
// Celdas separadas proporcionan las categorías y los puntos de datos numéricos.
IChartDataCell northCategory = workbook.getCell(0, 1, 0, "North");
IChartDataCell southCategory = workbook.getCell(0, 2, 0, "South");
chart.getChartData().getCategories().add(northCategory);
chart.getChartData().getCategories().add(southCategory);
IChartDataCell northValue = workbook.getCell(0, 1, 1, 120);
IChartDataCell southValue = workbook.getCell(0, 2, 1, 150);
series.getDataPoints().addDataPointForBarSeries(northValue);
series.getDataPoints().addDataPointForBarSeries(southValue);
presentation.save("composite_series_name.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
El nombre de serie resultante es Product A 2026, con un espacio entre los dos valores de celda. La leyenda lo muestra como una única entrada para ambas columnas. La imagen a continuación ilustra el resultado:

Obtener el color automático de relleno de la serie
IChartSeries.getAutomaticSeriesColor devuelve el color calculado a partir del índice de la serie y el estilo del gráfico. Este es el color usado cuando el relleno de la serie no ha sido definido explícitamente. Llamar al método lee el color calculado; no asigna un nuevo relleno.
El siguiente ejemplo muestra el color automático de cada serie predeterminada:
import com.aspose.slides.*;
import java.awt.Color;
final int firstSlideIndex = 0;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(firstSlideIndex);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 200);
int seriesCount = chart.getChartData().getSeries().size();
for (int seriesIndex = 0; seriesIndex < seriesCount; seriesIndex++) {
IChartSeries series = chart.getChartData().getSeries().get_Item(seriesIndex);
Color automaticColor = series.getAutomaticSeriesColor();
System.out.println("Series " + seriesIndex + ": " + automaticColor);
}
} finally {
presentation.dispose();
}
Salida de ejemplo para el estilo de gráfico predeterminado:
Series 0: java.awt.Color[r=79,g=129,b=189]
Series 1: java.awt.Color[r=192,g=80,b=77]
Series 2: java.awt.Color[r=155,g=187,b=89]
Los colores exactos dependen del estilo y el tema del gráfico.
Establecer color de relleno invertido para una serie de gráfico
Para series de barras, columnas y burbujas, IChartSeries.setInvertIfNegative puede mostrar valores negativos con un relleno diferente. Establezca el relleno regular de la serie como sólido, habilite la inversión y asigne el color para valores negativos mediante IChartSeries.getInvertedSolidFillColor. Los números negativos permanecen sin cambios en el libro de trabajo; solo cambia su color de visualización.
El siguiente ejemplo sustituye los datos predeterminados del gráfico por una serie. La fila 0 de la hoja contiene el nombre de la serie, la columna 0 contiene los nombres de categoría y la columna 1 contiene los valores:
import com.aspose.slides.*;
import java.awt.Color;
final int firstSlideIndex = 0;
final int worksheetIndex = 0;
final int headerRowIndex = 0;
final int categoryColumnIndex = 0;
final int firstSeriesColumnIndex = 1;
final int firstDataRowIndex = 1;
String[] categoryNames = { "Category 1", "Category 2", "Category 3" };
int[] seriesValues = { -20, 50, -30 };
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(firstSlideIndex);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 200);
IChartData chartData = chart.getChartData();
IChartDataWorkbook workbook = chartData.getChartDataWorkbook();
chartData.getSeries().clear();
chartData.getCategories().clear();
IChartDataCell seriesNameCell = workbook.getCell(worksheetIndex, headerRowIndex, firstSeriesColumnIndex, "Series 1");
int chartType = chart.getType();
IChartSeries series = chartData.getSeries().add(seriesNameCell, chartType);
for (int categoryIndex = 0; categoryIndex < categoryNames.length; categoryIndex++) {
int dataRowIndex = firstDataRowIndex + categoryIndex;
String categoryName = categoryNames[categoryIndex];
int seriesValue = seriesValues[categoryIndex];
IChartDataCell categoryCell = workbook.getCell(worksheetIndex, dataRowIndex, categoryColumnIndex, categoryName);
chartData.getCategories().add(categoryCell);
IChartDataCell valueCell = workbook.getCell(worksheetIndex, dataRowIndex, firstSeriesColumnIndex, seriesValue);
series.getDataPoints().addDataPointForBarSeries(valueCell);
}
Color automaticSeriesColor = series.getAutomaticSeriesColor();
series.getFormat().getFill().setFillType(FillType.Solid);
series.getFormat().getFill().getSolidFillColor().setColor(automaticSeriesColor);
series.setInvertIfNegative(true);
series.getInvertedSolidFillColor().setColor(Color.RED);
presentation.save("inverted_solid_fill_color.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
El resultado:

Puede habilitar la inversión para un punto mediante IChartDataPoint.setInvertIfNegative. En el siguiente ejemplo, la inversión está desactivada para la serie y activada solo para el punto seleccionado. Además, al punto se le asigna un valor negativo para que el efecto sea visible:
import com.aspose.slides.*;
import java.awt.Color;
final int firstSlideIndex = 0;
final int firstSeriesIndex = 0;
final int targetDataPointIndex = 2;
final int negativeValue = -30;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(firstSlideIndex);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 200);
IChartSeries series = chart.getChartData().getSeries().get_Item(firstSeriesIndex);
Color automaticSeriesColor = series.getAutomaticSeriesColor();
series.getFormat().getFill().setFillType(FillType.Solid);
series.getFormat().getFill().getSolidFillColor().setColor(automaticSeriesColor);
series.getInvertedSolidFillColor().setColor(Color.RED);
series.setInvertIfNegative(false);
IChartDataPoint dataPoint = series.getDataPoints().get_Item(targetDataPointIndex);
dataPoint.getValue().getAsCell().setValue(negativeValue);
dataPoint.setInvertIfNegative(true);
presentation.save("data_point_invert_color_if_negative.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Borrar el valor de un punto de datos específico
Para dejar vacío un punto sin eliminar los demás puntos, establezca su celda de respaldo en el libro de trabajo a null. En un gráfico de columnas, el valor trazado está disponible a través de IChartDataPoint.getValue. El punto permanece en la misma posición de categoría, pero el gráfico trata su valor como vacío según la configuración de valores en blanco del gráfico.
El siguiente ejemplo elimina solo el segundo punto de la primera serie:
import com.aspose.slides.*;
final int firstSlideIndex = 0;
final int firstSeriesIndex = 0;
final int targetDataPointIndex = 1;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(firstSlideIndex);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 200);
IChartSeries series = chart.getChartData().getSeries().get_Item(firstSeriesIndex);
IChartDataPoint dataPoint = series.getDataPoints().get_Item(targetDataPointIndex);
dataPoint.getValue().getAsCell().setValue(null);
presentation.save("clear_data_point_value.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Los gráficos de dispersión usan celdas X y Y por separado, y los gráficos de burbujas también usan una celda de tamaño. Elimine solo la celda que representa el valor que desea suprimir. No llame a IChartDataPointCollection.clear cuando desee conservar los demás puntos, ya que ese método elimina todos los puntos de datos de la colección.
Controlar la visualización de celdas vacías
Las celdas ocultas que contienen valores son un caso distinto de las celdas vacías. Para incluir o excluir datos de filas y columnas ocultas de la hoja, consulte Incluir datos de filas y columnas ocultas.
Una celda vacía del libro de trabajo representa datos faltantes; una celda que contiene 0 representa un valor numérico conocido. Llame a IChartDataCell.setValue con null para dejar una celda vacía. Un cero numérico sigue siendo cero independientemente de la configuración de celdas en blanco.
Use IChart.setDisplayBlanksAs para elegir cómo el gráfico muestra las celdas vacías. Esta configuración se aplica a todo el gráfico. Cambia la forma en que se trazan los vacíos, sin rellenar la celda vacía del libro de trabajo con cero ni con un valor interpolado.
El siguiente ejemplo autónomo crea un gráfico de líneas con una serie, elimina el valor del Día 3 y guarda el mismo gráfico con cada modo. No se requiere archivo de entrada. El IChartDataWorkbook usa la hoja 0, columna 0 para etiquetas de categoría y columna 1 para valores; la fila 0 contiene el nombre de la serie. Los datos finales son 10, 20, empty, 30, 40.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.LineWithMarkers, 40, 40, 640, 400);
IChartData chartData = chart.getChartData();
IChartDataWorkbook workbook = chartData.getChartDataWorkbook();
chartData.getSeries().clear();
chartData.getCategories().clear();
IChartDataCell seriesNameCell = workbook.getCell(0, 0, 1, "Measurements");
IChartSeries series = chartData.getSeries().add(seriesNameCell, chart.getType());
int[] values = { 10, 20, 25, 30, 40 };
for (int i = 0; i < values.length; i++) {
IChartDataCell categoryCell = workbook.getCell(0, i + 1, 0, "Day " + (i + 1));
chartData.getCategories().add(categoryCell);
IChartDataCell valueCell = workbook.getCell(0, i + 1, 1, values[i]);
series.getDataPoints().addDataPointForLineSeries(valueCell);
}
// Dejar el Día 3 realmente vacío, mientras se mantiene su categoría y punto de datos.
workbook.getCell(0, 3, 1).setValue(null);
int[] modes = { DisplayBlanksAsType.Gap, DisplayBlanksAsType.Zero, DisplayBlanksAsType.Span };
String[] modeNames = { "Gap", "Zero", "Span" };
for (int i = 0; i < modes.length; i++) {
chart.setDisplayBlanksAs(modes[i]);
presentation.save("empty_cells_" + modeNames[i] + ".pptx", SaveFormat.Pptx);
}
} finally {
presentation.dispose();
}
Cada archivo de salida almacena el modo asignado antes de guardar: empty_cells_Gap.pptx, empty_cells_Zero.pptx y empty_cells_Span.pptx. Para guardar solo una versión, asigne el modo deseado y guarde la presentación una sola vez en lugar de iterar sobre los modos.
La tabla comparativa a continuación muestra los mismos datos en los tres archivos. El Día 3 está vacío en el libro de trabajo en todos los casos:

El efecto visible depende del tipo de gráfico. Un gráfico de líneas permite comparar fácilmente los tres modos. Los gráficos de barras y columnas no tienen línea que conectar una categoría ausente, por lo que Span no puede generar el segmento de conexión mostrado arriba; una columna ausente y una columna de altura cero pueden parecer iguales. Del mismo modo, un gráfico de dispersión solo con marcadores no tiene línea de conexión. No espere tres resultados distintos para cada tipo de gráfico; verifique la salida para el tipo que utilice.
Establecer el ancho del intervalo de la serie
El ancho del intervalo es el espacio entre clústeres de barras o columnas adyacentes, expresado como un porcentaje del ancho de la barra o columna. Al igual que la superposición, pertenece al grupo de series padre y no a una sola serie. Llame a IChartSeriesGroup.setGapWidth una vez para el grupo. Un valor mayor crea más espacio entre clústeres; un valor menor los hace más densos.
El siguiente ejemplo modifica el ancho del intervalo y guarda solo la presentación final:
import com.aspose.slides.*;
final int firstSlideIndex = 0;
final int firstSeriesIndex = 0;
final int gapWidthPercent = 30;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(firstSlideIndex);
IChart chart = slide.getShapes().addChart(ChartType.StackedColumn, 20, 20, 500, 200);
IChartSeries series = chart.getChartData().getSeries().get_Item(firstSeriesIndex);
series.getParentSeriesGroup().setGapWidth(gapWidthPercent);
presentation.save("gap_width_30.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
El resultado:

Preguntas frecuentes
¿Qué tipos de gráficos admiten series de datos?
Todos los tipos de gráficos representados por la enumeración ChartType utilizan datos de gráfico, pero sus series no comparten la misma estructura de valores ni los mismos ajustes. Por ejemplo, los gráficos de categorías usan categorías y valores, los de dispersión usan valores X e Y, y los de burbujas añaden tamaños de burbuja. Utilice el método de creación de puntos de datos que corresponda al tipo de serie. Opciones como superposición y ancho del intervalo solo se aplican a grupos de barras o columnas compatibles.
¿Qué es un grupo de series de gráfico?
Un IChartSeriesGroup contiene series compatibles que comparten ajustes de trazado a nivel de grupo. Un gráfico combinado puede contener más de un grupo, por lo que cambiar el grupo al que se accede a través de una serie no modifica necesariamente todas las series del gráfico.
¿Un gráfico recién creado contiene datos predeterminados?
Sí. Por defecto, IShapeCollection.addChart crea series, categorías y valores de muestra. Puede editar esas celdas o eliminar tanto las colecciones de series como de categorías antes de añadir un conjunto de datos completamente personalizado. También existe una sobrecarga que crea un gráfico sin datos predeterminados.
¿Cómo se conectan los objetos del gráfico a las celdas del libro de trabajo?
Los nombres de series, las etiquetas de categoría y los valores de los puntos de datos hacen referencia a celdas en un IChartDataWorkbook. Cambiar una celda referenciada actualiza el elemento del gráfico correspondiente. Cuando construya datos personalizados, mantenga alineadas las filas de categorías y las filas de valores de series para que cada punto se trace bajo la categoría prevista.
¿Cómo borrar un punto sin eliminar toda la serie?
Establezca la celda de valor correspondiente a null para mantener la posición de categoría del punto como un punto vacío. Use IChartDataPointCollection.clear solo cuando pretenda eliminar todos los puntos de esa serie. Si también elimina categorías, actualice cada serie para que sus valores sigan alineados con la colección de categorías.
¿Cómo se muestran los puntos vacíos?
El resultado depende del tipo de gráfico y del valor configurado mediante IChart.setDisplayBlanksAs. Los gráficos compatibles pueden mostrar los vacíos como huecos, como valores cero o conectando los puntos vecinos. Elija la configuración que coincida con el significado de los datos faltantes en su presentación. Consulte Controlar la visualización de celdas vacías para un ejemplo completo y una comparación visual.
¿Cómo se formatean los valores negativos?
Para series de barras, columnas y burbujas compatibles, llame a IChartSeries.setInvertIfNegative y establezca el color devuelto por IChartSeries.getInvertedSolidFillColor. Puede sobrescribir el comportamiento para un punto individual mediante IChartDataPoint.setInvertIfNegative. Estos métodos afectan al formato, no a los valores numéricos almacenados.
¿Qué formato prevalece cuando se formatean tanto una serie como un punto?
El formato explícito de punto de datos tiene precedencia para ese punto. Los demás puntos continúan usando el formato explícito de la serie o, cuando no está definido, el estilo y tema automáticos del gráfico. Los ajustes de grupo, como superposición y ancho del intervalo, controlan el diseño y no sustituyen el formato a nivel de punto.
¿Existe un límite en el número de series que puede contener un gráfico?
Aspose.Slides no impone un límite fijo independiente de series. En la práctica, las limitaciones del archivo de presentación, la memoria disponible, el tiempo de renderizado y la legibilidad del gráfico determinan un límite útil.
¿Qué debo cambiar cuando las columnas están demasiado juntas o demasiado separadas?
Llame a IChartSeriesGroup.setGapWidth en el grupo de series padre correspondiente. Aumente el valor para ensanchar el espacio entre clústeres o disminúyalo para acercar los clústeres.