Publicado el :
Informes SASHELP

Personalización Avanzada de Leyendas Gráficas con PROC SGPLOT

Este código también está disponible en: Deutsch English Français
Este script ilustra cómo modificar la apariencia de las leyendas en PROC SGPLOT a través de la instrucción KEYLEGEND. Cubre varios casos de uso: ajuste de la longitud de las líneas, modificación de la escala de los símbolos, control de la relación de aspecto de las áreas de relleno y uso de formatos personalizados que contienen caracteres Unicode (símbolo 'mayor o igual que').
Análisis de datos

Type : SASHELP


El script utiliza exclusivamente las tablas de ejemplo estándar SASHELP.CARS y SASHELP.HEART.

1 Bloque de código
PROC FORMAT
Explicación :
Configuración del entorno de salida gráfica (ODS) y creación de un formato personalizado 'agegroupUnicode' que utiliza una secuencia de escape para mostrar el símbolo matemático 'mayor o igual que' (Unicode 2265).
¡Copiado!
1%let gpath='.';
2%let dpi=200;
3 
4ods html close;
5ods listing gpath=&gpath image_dpi=&dpi;
6 
7/*--Unicode Format--*/
8PROC FORMAT;
9 value agegroupUnicode
10 0 -< 40 = '< 40'
11 40 -< 50 = '40 < 50'
12 50 -< 60 = '50 < 60'
13 60 - high = "(*ESC*){unicode '2265'x} 60"
14 ;
15RUN;
2 Bloque de código
PROC SGPLOT
Explicación :
Generación de un gráfico de regresión polinómica base para establecer una referencia visual de la leyenda por defecto.
¡Copiado!
1/*--Legend default--*/
2ods graphics / reset width=5in height=3in imagename='LegendDefault';
3title 'MSRP by Horsepower';
4PROC SGPLOT DATA=sashelp.cars(where=(type eq 'Sedan'));
5 styleattrs axisextent=DATA;
6 reg x=horsepower y=msrp / cli clm degree=2;
7RUN;
3 Bloque de código
PROC SGPLOT
Explicación :
Modificación de la longitud de la línea representativa en la leyenda usando la opción 'linelength=32' en la instrucción KEYLEGEND.
¡Copiado!
1/*--Legend Line Length--*/
2ods graphics / reset width=5in height=3in imagename='LegendLine';
3title 'MSRP by Horsepower';
4PROC SGPLOT DATA=sashelp.cars(where=(type eq 'Sedan'));
5 styleattrs axisextent=DATA;
6 reg x=horsepower y=msrp / cli clm degree=2;
7 keylegend / linelength=32;
8RUN;
4 Bloque de código
PROC SGPLOT
Explicación :
Combinación de la longitud de línea y la opción 'scale=1.2' para ampliar globalmente los elementos de la leyenda.
¡Copiado!
1/*--Legend Line Length and Swatch--*/
2ods graphics / reset width=5in height=3in imagename='LegendLineScale';
3title 'MSRP by Horsepower';
4PROC SGPLOT DATA=sashelp.cars(where=(type eq 'Sedan'));
5 styleattrs axisextent=DATA;
6 reg x=horsepower y=msrp / cli clm degree=2;
7 keylegend / linelength=32 scale=1.2;
8RUN;
5 Bloque de código
PROC SGPLOT
Explicación :
Control preciso de las dimensiones de los rectángulos de leyenda (swatches) con 'fillheight' (altura) y 'fillaspect' (relación de aspecto, aquí la proporción áurea).
¡Copiado!
1/*--Legend Line Length and Swatch--*/
2ods graphics / reset width=5in height=3in imagename='LegendLineAspect';
3title 'MSRP by Horsepower';
4PROC SGPLOT DATA=sashelp.cars(where=(type eq 'Sedan'));
5 styleattrs axisextent=DATA;
6 reg x=horsepower y=msrp / cli clm degree=2;
7 keylegend / linelength=32 fillheight=2.5pct fillaspect=golden;
8RUN;
6 Bloque de código
PROC SGPLOT
Explicación :
Gráfico de barras complejo utilizando el formato Unicode definido anteriormente. La leyenda se coloca dentro del gráfico ('location=inside'), se hace opaca y sus dimensiones se personalizan para adaptarse al estilo 'dataskin=pressed'.
¡Copiado!
1/*--Legend Swatch--*/
2ods graphics / reset width=5in height=3in imagename='DeathsUnicode';
3title 'Counts by Death Cause and Age Group';
4PROC SGPLOT DATA=sashelp.heart(where=(deathcause ne 'Unknown')) nocycleattrs noborder;
5 FORMAT ageatdeath agegroupUnicode.;
6 vbar ageatdeath / group=deathcause groupdisplay=cluster fillattrs=(color=white);
7 vbar ageatdeath / group=deathcause groupdisplay=cluster nooutline
8 baselineattrs=(thickness=0) dataskin=pressed filltype=gradient name='a';
9 keylegend 'a' / location=inside across=1 title='' fillheight=2.5pct fillaspect=2.5 opaque;
10 xaxis display=(nolabel noline);
11 yaxis label='Count' grid display=(noline noticks);
12RUN;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.