Formatear gráficos de presentación en PHP
Entidades de formato de gráfico
Aspose.Slides for PHP via Java permite a los desarrolladores añadir gráficos personalizados a sus diapositivas desde cero. Este artículo explica cómo dar formato a distintas entidades de gráfico, incluidas la categoría del gráfico y el eje de valores.
Aspose.Slides for PHP via Java proporciona una API simple para gestionar diferentes entidades de gráfico y darles formato mediante valores personalizados:
- Crear una instancia de la clase Presentation.
- Obtener la referencia de una diapositiva por su índice.
- Añadir un gráfico con datos predeterminados del tipo que se desee (en este ejemplo utilizaremos ChartType::LineWithMarkers).
- Acceder al eje de valores del gráfico y establecer las siguientes propiedades:
- Establecer Line format para las líneas de la cuadrícula mayor del eje de valores
- Establecer Line format para las líneas de la cuadrícula menor del eje de valores
- Establecer Number Format para el eje de valores
- Establecer Min, Max, Major and Minor units para el eje de valores
- Establecer Text Properties para los datos del eje de valores
- Establecer Title para el eje de valores
- Establecer Line Format para el eje de valores
- Acceder al eje de categoría del gráfico y establecer las siguientes propiedades:
- Establecer Line format para las líneas de la cuadrícula mayor del eje de categoría
- Establecer Line format para las líneas de la cuadrícula menor del eje de categoría
- Establecer Text Properties para los datos del eje de categoría
- Establecer Title para el eje de categoría
- Establecer Label Positioning para el eje de categoría
- Establecer Rotation Angle para las etiquetas del eje de categoría
- Acceder a la leyenda del gráfico y establecer las Text Properties.
- Mostrar las leyendas del gráfico sin que se superpongan al gráfico.
- Acceder al Secondary Value Axis del gráfico y establecer las siguientes propiedades:
- Habilitar el Value Axis secundario
- Establecer Line Format para el eje de valores secundario
- Establecer Number Format para el eje de valores secundario
- Establecer Min, Max, Major and Minor units para el eje de valores secundario
- Ahora trazar la primera serie del gráfico en el eje de valores secundario.
- Establecer el color de relleno del fondo trasero del gráfico.
- Establecer el color de relleno del área de trazado del gráfico.
- Guardar la presentación modificada en un archivo PPTX.
# Crear una instancia de la clase Presentation
$pres = new Presentation();
try {
# Accediendo a la primera diapositiva
$slide = $pres->getSlides()->get_Item(0);
# Añadiendo el gráfico de ejemplo
$chart = $slide->getShapes()->addChart(ChartType::LineWithMarkers, 50, 50, 500, 400);
# Estableciendo el título del gráfico
$chart->hasTitle();
$chart->getChartTitle()->addTextFrameForOverriding("");
$chartTitle = $chart->getChartTitle()->getTextFrameForOverriding()->getParagraphs()->get_Item(0)->getPortions()->get_Item(0);
$chartTitle->setText("Sample Chart");
$chartTitle->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
$chartTitle->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->GRAY);
$chartTitle->getPortionFormat()->setFontHeight(20);
$chartTitle->getPortionFormat()->setFontBold(NullableBool::True);
$chartTitle->getPortionFormat()->setFontItalic(NullableBool::True);
# Estableciendo el formato de las líneas de cuadrícula mayores para el eje de valores
$chart->getAxes()->getVerticalAxis()->getMajorGridLinesFormat()->getLine()->getFillFormat()->setFillType(FillType::Solid);
$chart->getAxes()->getVerticalAxis()->getMajorGridLinesFormat()->getLine()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLUE);
$chart->getAxes()->getVerticalAxis()->getMajorGridLinesFormat()->getLine()->setWidth(5);
$chart->getAxes()->getVerticalAxis()->getMajorGridLinesFormat()->getLine()->setDashStyle(LineDashStyle->DashDot);
# Estableciendo el formato de las líneas de cuadrícula menores para el eje de valores
$chart->getAxes()->getVerticalAxis()->getMinorGridLinesFormat()->getLine()->getFillFormat()->setFillType(FillType::Solid);
$chart->getAxes()->getVerticalAxis()->getMinorGridLinesFormat()->getLine()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$chart->getAxes()->getVerticalAxis()->getMinorGridLinesFormat()->getLine()->setWidth(3);
# Estableciendo el formato numérico del eje de valores
$chart->getAxes()->getVerticalAxis()->isNumberFormatLinkedToSource();
$chart->getAxes()->getVerticalAxis()->setDisplayUnit(DisplayUnitType::Thousands);
$chart->getAxes()->getVerticalAxis()->setNumberFormat("0.0%");
# Estableciendo los valores máximo y mínimo del gráfico
$chart->getAxes()->getVerticalAxis()->isAutomaticMajorUnit();
$chart->getAxes()->getVerticalAxis()->isAutomaticMaxValue();
$chart->getAxes()->getVerticalAxis()->isAutomaticMinorUnit();
$chart->getAxes()->getVerticalAxis()->isAutomaticMinValue();
$chart->getAxes()->getVerticalAxis()->setMaxValue(15.0);
$chart->getAxes()->getVerticalAxis()->setMinValue(-2.0);
$chart->getAxes()->getVerticalAxis()->setMinorUnit(0.5);
$chart->getAxes()->getVerticalAxis()->setMajorUnit(2.0);
# Estableciendo las propiedades de texto del eje de valores
$txtVal = $chart->getAxes()->getVerticalAxis()->getTextFormat()->getPortionFormat();
$txtVal->setFontBold(NullableBool::True);
$txtVal->setFontHeight(16);
$txtVal->setFontItalic(NullableBool::True);
$txtVal->getFillFormat()->setFillType(FillType::Solid);
$txtVal->getFillFormat()->getSolidFillColor()->setColor(new java("java.awt.Color", PresetColor->DarkGreen));
$txtVal->setLatinFont(new FontData("Times New Roman"));
# Estableciendo el título del eje de valores
$chart->getAxes()->getVerticalAxis()->hasTitle();
$chart->getAxes()->getVerticalAxis()->getTitle()->addTextFrameForOverriding("");
$valtitle = $chart->getAxes()->getVerticalAxis()->getTitle()->getTextFrameForOverriding()->getParagraphs()->get_Item(0)->getPortions()->get_Item(0);
$valtitle->setText("Primary Axis");
$valtitle->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
$valtitle->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->GRAY);
$valtitle->getPortionFormat()->setFontHeight(20);
$valtitle->getPortionFormat()->setFontBold(NullableBool::True);
$valtitle->getPortionFormat()->setFontItalic(NullableBool::True);
# Estableciendo el formato de las líneas de cuadrícula mayores para el eje de categoría
$chart->getAxes()->getHorizontalAxis()->getMajorGridLinesFormat()->getLine()->getFillFormat()->setFillType(FillType::Solid);
$chart->getAxes()->getHorizontalAxis()->getMajorGridLinesFormat()->getLine()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->GREEN);
$chart->getAxes()->getHorizontalAxis()->getMajorGridLinesFormat()->getLine()->setWidth(5);
# Estableciendo el formato de las líneas de cuadrícula menores para el eje de categoría
$chart->getAxes()->getHorizontalAxis()->getMinorGridLinesFormat()->getLine()->getFillFormat()->setFillType(FillType::Solid);
$chart->getAxes()->getHorizontalAxis()->getMinorGridLinesFormat()->getLine()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->YELLOW);
$chart->getAxes()->getHorizontalAxis()->getMinorGridLinesFormat()->getLine()->setWidth(3);
# Estableciendo las propiedades de texto del eje de categoría
$txtCat = $chart->getAxes()->getHorizontalAxis()->getTextFormat()->getPortionFormat();
$txtCat->setFontBold(NullableBool::True);
$txtCat->setFontHeight(16);
$txtCat->setFontItalic(NullableBool::True);
$txtCat->getFillFormat()->setFillType(FillType::Solid);
$txtCat->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLUE);
$txtCat->setLatinFont(new FontData("Arial"));
# Estableciendo el título de la categoría
$chart->getAxes()->getHorizontalAxis()->hasTitle();
$chart->getAxes()->getHorizontalAxis()->getTitle()->addTextFrameForOverriding("");
$catTitle = $chart->getAxes()->getHorizontalAxis()->getTitle()->getTextFrameForOverriding()->getParagraphs()->get_Item(0)->getPortions()->get_Item(0);
$catTitle->setText("Sample Category");
$catTitle->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
$catTitle->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->GRAY);
$catTitle->getPortionFormat()->setFontHeight(20);
$catTitle->getPortionFormat()->setFontBold(NullableBool::True);
$catTitle->getPortionFormat()->setFontItalic(NullableBool::True);
# Estableciendo la posición de la etiqueta del eje de categoría
$chart->getAxes()->getHorizontalAxis()->setTickLabelPosition(TickLabelPositionType::Low);
# Estableciendo el ángulo de rotación de la etiqueta del eje de categoría
$chart->getAxes()->getHorizontalAxis()->setTickLabelRotationAngle(45);
# Estableciendo las propiedades de texto de las leyendas
$txtleg = $chart->getLegend()->getTextFormat()->getPortionFormat();
$txtleg->setFontBold(NullableBool::True);
$txtleg->setFontHeight(16);
$txtleg->setFontItalic(NullableBool::True);
$txtleg->getFillFormat()->setFillType(FillType::Solid);
$txtleg->getFillFormat()->getSolidFillColor()->setColor(new java("java.awt.Color", PresetColor->DarkRed));
# Configurar la visualización de leyendas sin superponerse al gráfico
$chart->getLegend()->setOverlay(true);
# chart.ChartData.Series[0].PlotOnSecondAxis=true;
$chart->getChartData()->getSeries()->get_Item(0)->setPlotOnSecondAxis(true);
# Estableciendo el eje de valores secundario
$chart->getAxes()->getSecondaryVerticalAxis()->isVisible();
$chart->getAxes()->getSecondaryVerticalAxis()->getFormat()->getLine()->setStyle(LineStyle->ThickBetweenThin);
$chart->getAxes()->getSecondaryVerticalAxis()->getFormat()->getLine()->setWidth(20);
# Estableciendo el formato numérico del eje de valores secundario
$chart->getAxes()->getSecondaryVerticalAxis()->isNumberFormatLinkedToSource();
$chart->getAxes()->getSecondaryVerticalAxis()->setDisplayUnit(DisplayUnitType::Hundreds);
$chart->getAxes()->getSecondaryVerticalAxis()->setNumberFormat("0.0%");
# Estableciendo los valores máximo y mínimo del gráfico
$chart->getAxes()->getSecondaryVerticalAxis()->isAutomaticMajorUnit();
$chart->getAxes()->getSecondaryVerticalAxis()->isAutomaticMaxValue();
$chart->getAxes()->getSecondaryVerticalAxis()->isAutomaticMinorUnit();
$chart->getAxes()->getSecondaryVerticalAxis()->isAutomaticMinValue();
$chart->getAxes()->getSecondaryVerticalAxis()->setMaxValue(20.0);
$chart->getAxes()->getSecondaryVerticalAxis()->setMinValue(-5.0);
$chart->getAxes()->getSecondaryVerticalAxis()->setMinorUnit(0.5);
$chart->getAxes()->getSecondaryVerticalAxis()->setMajorUnit(2.0);
# Estableciendo el color de la pared trasera del gráfico
$chart->getBackWall()->setThickness(1);
$chart->getBackWall()->getFormat()->getFill()->setFillType(FillType::Solid);
$chart->getBackWall()->getFormat()->getFill()->getSolidFillColor()->setColor(java("java.awt.Color")->ORANGE);
$chart->getFloor()->getFormat()->getFill()->setFillType(FillType::Solid);
$chart->getFloor()->getFormat()->getFill()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
# Estableciendo el color del área de trazado
$chart->getPlotArea()->getFormat()->getFill()->setFillType(FillType::Solid);
$chart->getPlotArea()->getFormat()->getFill()->getSolidFillColor()->setColor(new java("java.awt.Color", PresetColor->LightCyan));
# Guardar la presentación
$pres->save("FormattedChart.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Establecer propiedades de fuente para un gráfico
Aspose.Slides for PHP via Java ofrece soporte para establecer las propiedades relacionadas con la fuente del gráfico. Siga los pasos a continuación para establecer las propiedades de fuente del gráfico.
- Instanciar el objeto de la clase Presentation.
- Añadir un gráfico a la diapositiva.
- Establecer la altura de la fuente.
- Guardar la presentación modificada.
# Crear una instancia de la clase Presentation
$pres = new Presentation();
try {
$chart = $pres->getSlides()->get_Item(0)->getShapes()->addChart(ChartType::ClusteredColumn, 100, 100, 500, 400);
$chart->getTextFormat()->getPortionFormat()->setFontHeight(20);
$chart->getChartData()->getSeries()->get_Item(0)->getLabels()->getDefaultDataLabelFormat()->setShowValue(true);
$pres->save("FontPropertiesForChart.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Establecer el formato numérico
Aspose.Slides for PHP via Java proporciona una API simple para gestionar el formato de datos del gráfico:
- Crear una instancia de la clase Presentation.
- Obtener la referencia de una diapositiva por su índice.
- Añadir un gráfico con datos predeterminados del tipo deseado (en este ejemplo se usa ChartType::ClusteredColumn).
- Establecer el formato numérico predefinido a partir de los valores predefinidos disponibles.
- Recorrer la celda de datos del gráfico en cada serie y establecer el formato numérico de los datos del gráfico.
- Guardar la presentación.
- Establecer el formato numérico personalizado.
- Recorrer la celda de datos del gráfico en cada serie y establecer un formato numérico de datos diferente.
- Guardar la presentación.
# Crear una instancia de la clase Presentation
$pres = new Presentation();
try {
# Acceder a la primera diapositiva de la presentación
$slide = $pres->getSlides()->get_Item(0);
# Añadir un gráfico de columnas agrupadas predeterminado
$chart = $slide->getShapes()->addChart(ChartType::ClusteredColumn, 50, 50, 500, 400);
# Acceder a la colección de series del gráfico
$series = $chart->getChartData()->getSeries();
# Recorrer cada serie del gráfico
foreach($series as $ser) {
# Recorrer cada celda de datos en la serie
foreach($ser->getDataPoints() as $cell) {
# Establecer el formato numérico
$cell->getValue()->getAsCell()->setPresetNumberFormat(10);// 0.00%
}
}
# Guardar la presentación
$pres->save("PresetNumberFormat.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Los posibles valores de formato numérico predefinidos junto con su índice predefinido y que pueden usarse se muestran a continuación:
| 0 | General |
|---|---|
| 1 | 0 |
| 2 | 0.00 |
| 3 | #,##0 |
| 4 | #,##0.00 |
| 5 | $#,##0;$-#,##0 |
| 6 | $#,##0;Red$-#,##0 |
| 7 | $#,##0.00;$-#,##0.00 |
| 8 | $#,##0.00;Red$-#,##0.00 |
| 9 | 0% |
| 10 | 0.00% |
| 11 | 0.00E+00 |
| 12 | # ?/? |
| 13 | # / |
| 14 | m/d/yy |
| 15 | d-mmm-yy |
| 16 | d-mmm |
| 17 | mmm-yy |
| 18 | h:mm AM/PM |
| 19 | h:mm:ss AM/PM |
| 20 | h:mm |
| 21 | h:mm:ss |
| 22 | m/d/yy h:mm |
| 37 | #,##0;-#,##0 |
| 38 | #,##0;Red-#,##0 |
| 39 | #,##0.00;-#,##0.00 |
| 40 | #,##0.00;Red-#,##0.00 |
| 41 | _ * #,##0_ ;_ * “_ ;_ @_ |
| 42 | _ $* #,##0_ ;_ $* “_ ;_ @_ |
| 43 | _ * #,##0.00_ ;_ * “??_ ;_ @_ |
| 44 | _ $* #,##0.00_ ;_ $* “??_ ;_ @_ |
| 45 | mm:ss |
| 46 | h:mm:ss |
| 47 | mm:ss.0 |
| 48 | ##0.0E+00 |
| 49 | @ |
Establecer bordes redondeados del área del gráfico
Aspose.Slides for PHP via Java ofrece soporte para establecer el área del gráfico. Los métodos hasRoundedCorners y setRoundedCorners se han añadido a la clase Chart.
- Instanciar el objeto de la clase Presentation.
- Añadir un gráfico a la diapositiva.
- Establecer el tipo de relleno y el color de relleno del gráfico.
- Establecer la propiedad de esquina redondeada a True.
- Guardar la presentación modificada.
# Crear una instancia de la clase Presentation
$pres = new Presentation();
try {
$slide = $pres->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::ClusteredColumn, 20, 100, 600, 400);
$chart->getLineFormat()->getFillFormat()->setFillType(FillType::Solid);
$chart->getLineFormat()->setStyle(LineStyle->Single);
$chart->setRoundedCorners(true);
$pres->save("output.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
FAQ
¿Puedo establecer rellenos semitransparentes para columnas/áreas manteniendo el contorno opaco?
Sí. La transparencia del relleno y el contorno se configuran por separado. Esto es útil para mejorar la legibilidad de la cuadrícula y los datos en visualizaciones densas.
¿Cómo puedo manejar las etiquetas de datos cuando se superponen?
Reduzca el tamaño de la fuente, desactive los componentes de etiqueta no esenciales (por ejemplo, categorías), ajuste el desplazamiento/posición de la etiqueta, muestre etiquetas solo para los puntos seleccionados si es necesario, o cambie el formato a “valor + leyenda”.
¿Puedo aplicar rellenos degradados o con patrón a las series?
Sí. Normalmente están disponibles tanto los rellenos sólidos como los degradados/patrón. En la práctica, use los degradados con moderación y evite combinaciones que reduzcan el contraste con la cuadrícula y el texto.