Gráficos de barras de rango con SGPLOT

Gráficos de barras de rango con SGPLOT


El procedimiento SGPLOT admite una variedad de tipos de gráficos que puede usar tal cual o combinarlos para crear gráficos más complejos. A pesar de esta flexibilidad, puede haber ocasiones en las que encuentre un gráfico que no pueda crear utilizando uno de los tipos de gráficos estándar. Un gráfico de barras de «área» es uno de esos gráficos. En esta publicación, demostraré cómo puede crear este gráfico utilizando el gráfico «Swiss Army Knife» de SGPLOT llamado gráfico POLYGON.

El gráfico POLYGON está en algún lugar entre la anotación y un tipo de gráfico normal. La declaración de la trama admite cosas como grupos, respuestas de color y sugerencias de datos. El gráfico también utiliza los ejes de gráficos estándar y se puede superponer con otros tipos de gráficos. Sin embargo, los roles X, Y e ID se usan juntos para crear polígonos ad hoc, lo que le permite crear visualizaciones «no estándar».

Un gráfico de barras de área es un gráfico de barras en el que los ejes X e Y representan valores continuos y cada barra representa una categoría. El rol de RESPUESTA se usa para la altura (o longitud) mientras que el rol de ANCHO se usa para el ancho de la barra. La función CATEGORÍA se utiliza para identificar cada barra, de forma similar a un gráfico de barras estándar. Creé un conjunto de macros para simplificar la conversión de los datos de entrada a los datos necesarios para el gráfico POLYGON. Puede descargar estas macros aquí.

El conjunto de datos utilizado para todos los ejemplos se muestra a continuación. Las macros toman este conjunto de datos como entrada y generan los datos resumidos y transformados. Las macros ejecutan automáticamente estadísticas de resumen sobre las variables RESPONSE y WIDTH, utilizando CATEGORY como variable de clase. En el ejemplo de subgrupo posterior, SUBGROUP también se agrega como una variable de clase. Para el ejemplo de respuesta de color, verá que puede especificar opcionalmente una estadística alternativa para el color, que es una de las estadísticas admitidas por el procedimiento SUMMARY.

data totals;
input Site $ Quarter Sales Salespersons;
format Sales dollar12.2;
datalines;
Lima 1  4043.97  4
NY   1  8225.26 12
Rome 1  3543.97  6
Lima 2  3723.44  5
NY   2  8595.07 18
Rome 2  5558.29 10
Lima 3  4437.96  8
NY   3  9847.91 24
Rome 3  6789.85 14
Lima 4  6065.57 10
NY   4 11388.51 26
Rome 4  8509.08 16
;
run;

Gráfico de barras de rango básico

Este primer ejemplo es un gráfico de barras básico. El conjunto de datos de salida de la macro contiene las columnas X, Y e ID necesarias para dibujar las barras. Cada ID único se utiliza para dibujar un polígono. En este caso, los valores de CATEGORÍA se utilizan como valores de ID. Debido a esto, también usé la columna ID en las opciones GRUPO y ETIQUETA para colorear y etiquetar cada barra de manera diferente. Por defecto, los polígonos no están rellenos, así que agregué la opción LLENAR. También sobrescribí los atributos de la etiqueta para que se destaquen mejor. Como alternativa al etiquetado, puede eliminar la opción NOAUTOLEGEND y la opción LABEL para que se muestre una leyenda en lugar de etiquetar las barras directamente. La opción OFFSETMIN=0 en la declaración YAXIS fuerza las barras a la línea del eje. Sin la opción, se muestra un pequeño desplazamiento debajo de las barras para acomodar el texto del valor de marca del eje.

%genAreaBarDataBasic(totals, poly_data, Site, Sales, Salespersons);
title "Basic Area Bar Chart";
title2 h=9pt "with Category Labels";

proc sgplot data=poly_data noautolegend;
yaxis offsetmin=0;
polygon x=x y=y id=ID / group=ID label=ID fill labelattrs=GraphDataText;
run;

En realidad, es un proceso simple cambiar la orientación de este gráfico. Todo lo que se requiere es cambiar las asignaciones de variables X e Y y cambiar la declaración YAXIS a una declaración XAXIS.

/* Horizontal */
ods graphics / imagename="BasicHorizontalAB";
proc sgplot data=poly_data noautolegend;
xaxis offsetmin=0;
polygon x=y y=x id=ID / group=ID label=ID fill labelattrs=GraphDataText;
run;

Otra alternativa de etiquetado que puede usar es eliminar la opción NOAUTOLEGEND y hacer referencia a la columna RESPUESTA o ANCHO con la opción ETIQUETA para mostrar los valores del eje de la barra. La leyenda muestra los valores de CATEGORÍA.

title2 h=9pt "with Response Labels";
proc sgplot data=poly_data;
yaxis offsetmin=0;
polygon x=x y=y id=ID / group=ID label=response fill
                        labelattrs=GraphDataText;
run;

Gráfico de barras de rango con respuesta de color

Otra versión útil de este gráfico es incluir otra variable continua como variable COLORRESPONSE. Para este caso, llame a otra macro que tenga las mismas opciones que antes, pero ahora con una opción COLORRESPONSE requerida y una opción COLORSTAT opcional. La opción COLORSTAT es un parámetro con nombre con un valor predeterminado de «suma». Si anula el valor predeterminado, debe especificar el nombre COLORSTAT en el parámetro. En el siguiente ejemplo, utilicé la misma variable «Ventas» tanto para RESPONSE como para COLORRESPONSE. Sin embargo, configuré COLORSTAT en MEAN, por lo que el color representa el ingreso promedio por valor de categoría. El conjunto de datos de salida contiene una variable «colorResponse», a la que hace referencia con la opción COLORRESPONSE en la instrucción POLYGON. El COLORMODEL predeterminado es un degradado de tres colores, por lo que lo cambié haciendo referencia a un degradado de dos colores para crear una mejor apariencia de estos datos. Este ejemplo utiliza la etiqueta CATEGORÍA, que probablemente sería típica de COLORRESPONSE; Sin embargo, las variables RESPUESTA y ANCHO también están disponibles para el etiquetado.

%genAreaBarDataColorResponse(totals, poly_data, Site, sales, Salespersons, Sales, colorStat=mean);
title "Basic Area Bar Chart";
title2 h=9pt "with Color Response and Category Labels";

proc sgplot data=poly_data;
yaxis offsetmin=0;
polygon x=x y=y id=ID / colorResponse=colorResponse label=ID fill
                labelattrs=GraphDataText colormodel=twocolorramp;
run;

Con esta salida, como en el primer ejemplo, se puede cambiar la alineación.

proc sgplot data=poly_data;
xaxis offsetmin=0;
polygon x=y y=x id=ID / colorResponse=colorResponse label=ID fill
                labelattrs=GraphDataText colormodel=twocolorramp;
run;

Gráfico de barras de área con subgrupos

Las barras de rango se pueden subdividir aún más en función de otra variable de clasificación, similar a las barras «apiladas» en un gráfico de barras. Para este gráfico, la columna ID contiene los valores de SUBGRUPO en lugar de los valores de CATEGORÍA, pero aún necesita la información de CATEGORÍA para resumir correctamente los datos e identificar cada barra en el gráfico con una etiqueta. La macro para este caso genera información de etiquetado adicional en los datos de salida que puede ser utilizada por un diagrama de TEXTO para etiquetar la CATEGORÍA para cada barra, así como el valor de RESPUESTA para cada SUBGRUPO.

%genAreaBarDataSubgroup(totals, poly_data, Site, sales, Salespersons, quarter);
title "Subgrouped Area Bar Chart";
title2 h=9pt "with Subgroup and Category Labels";

proc sgplot data=poly_data;
format sublabel f8.2;
yaxis offsetmin=0;
polygon x=x y=y id=ID / group=ID fill;
text x=subLabelX y=subLabelY text=subLabel / contributeoffsets=none;
text x=labelX y=labelY text=label / contributeoffsets=(ymax) position=top;
run;

La primera declaración de TEXTO utiliza las columnas subLabelX, subLabelY y subLabel para colocar los valores de respuesta en cada segmento de subgrupo. Si no desea mostrar estos valores, simplemente elimine esta declaración de TEXTO. La segunda declaración de TEXTO nombra la CATEGORÍA para barra con las columnas etiquetaX, etiquetaY y etiqueta. Los valores de SUBGRUPO aparecen en la leyenda porque están en la columna ID y la columna ID es utilizada por el GRUPO en el gráfico POLYGON. La opción CONTRIBUTEOFFSET=(YMAX) hace que el gráfico de TEXTO solo contribuya al cálculo del desplazamiento del eje en el lado máximo del eje Y para evitar el recorte de la etiqueta. POSITION=TOP establece la etiqueta sobre el punto de datos (que es la parte superior de la barra).

Como en los ejemplos anteriores, puede cambiar la orientación de este gráfico; Sin embargo, hay algunas consideraciones adicionales. Las columnas X e Y de cada gráfico de TEXTO también deben intercambiarse. La POSICIÓN del gráfico de TEXTO de la etiqueta también debe cambiarse de ARRIBA a DERECHA para colocar la etiqueta a la derecha del punto de datos. Por fin. La opción CONTRIBUTEOFFSETS debe cambiarse de (YMAX) a (XMAX) para que el lado máximo del eje X tenga en cuenta el tamaño de la etiqueta para el desplazamiento del eje.

proc sgplot data=poly_data;
format sublabel f8.2;
xaxis offsetmin=0;
polygon x=y y=x id=ID / group=ID fill;
text x=subLabelY y=subLabelX text=subLabel / contributeoffsets=none;
text x=labelY y=labelX text=label / contributeoffsets=(xmax) position=right;
run;

Conclusión

Los gráficos de áreas se pueden crear de diferentes maneras con diferentes características. Con suerte, estas macros y ejemplos son lo suficientemente flexibles para brindarle la visualización que necesita. Le animo a que examine las macros y los conjuntos de datos de salida y experimente con sus propias mejoras. Comprender la estructura de los datos para el diagrama POLYGON puede abrir la puerta a ideas de diagramas aún más creativas.

Related post

Nissan presenta a Sakura, Mitsubishi eK X EV, Obi-Wan Kenobi se asocia con VW ID.Buzz — EV News Today

Nissan presenta a Sakura, Mitsubishi eK X EV, Obi-Wan…

Algunos aman los autos más pequeños. Si es cierto. Bueno, hoy encontrarás más para amar con dos autos nuevos tan asequibles…
Textiles lavables y reciclables infundidos con células solares

Textiles lavables y reciclables infundidos con células solares

21 de mayo de 2022 (Noticias de Nanowerk) En estudios anteriores, las células solares se instalaron en las superficies, se colocaron…
El «efecto boomerang» en las gotas podría ayudar a limpiar superficies sensibles (con video)

El «efecto boomerang» en las gotas podría ayudar a…

21 de mayo de 2022 (Noticias de Nanowerk) Un grupo de científicos dirigido por Nate Cira de la Universidad de Harvard…

Leave a Reply

Tu dirección de correo electrónico no será publicada.