SAS SGPLOT : Comment maîtriser KEYLEGEND pour des graphiques haute résolution ?

Ce code est également disponible en : Deutsch English Español
Niveau de difficulté
Débutant
Publié le :
Stéphanie

Le Conseil de l'Expert

Stéphanie
Spécialiste Machine Learning et IA.

La clarté d'un graphique ne repose pas uniquement sur la data-visualisation elle-même, mais sur la précision de sa légende. L'utilisation de la procédure PROC SGPLOT offre un contrôle granulaire sur l'instruction KEYLEGEND, permettant de transformer une légende générique en un outil de lecture haute performance. Ce script démontre des techniques avancées comme l'ajustement du LINELENGTH pour faciliter la distinction entre les types de lignes (régressions vs intervalles de confiance) et la modification du FILLASPECT (ratio d'aspect) pour les zones de remplissage. L'intégration de caractères Unicode (symbole $\ge$) via un format personnalisé (PROC FORMAT) assure une rigueur scientifique indispensable pour la publication de rapports d'analyse.

Ce script illustre comment modifier l'apparence des légendes dans PROC SGPLOT via l'instruction KEYLEGEND. Il couvre plusieurs cas d'usage : ajustement de la longueur des lignes, modification de l'échelle des symboles, contrôle du ratio d'aspect des zones de remplissage, et utilisation de formats personnalisés contenant des caractères Unicode (symbole 'supérieur ou égal').
Analyse des données

Type : SASHELP


Le script utilise exclusivement les tables d'exemple standards SASHELP.CARS et SASHELP.HEART.

1 Bloc de code
PROC FORMAT
Explication :
Configuration de l'environnement de sortie graphique (ODS) et création d'un format personnalisé 'agegroupUnicode' qui utilise une séquence d'échappement pour afficher le symbole mathématique 'supérieur ou égal' (Unicode 2265).
Copié !
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 Bloc de code
PROC SGPLOT
Explication :
Génération d'un graphique de régression polynomiale de base pour établir une référence visuelle de la légende par défaut.
Copié !
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 Bloc de code
PROC SGPLOT
Explication :
Modification de la longueur de la ligne représentative dans la légende à l'aide de l'option 'linelength=32' dans l'instruction KEYLEGEND.
Copié !
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 Bloc de code
PROC SGPLOT
Explication :
Combinaison de la longueur de ligne et de l'option 'scale=1.2' pour agrandir globalement les éléments de la légende.
Copié !
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 Bloc de code
PROC SGPLOT
Explication :
Contrôle précis des dimensions des rectangles de légende (swatches) avec 'fillheight' (hauteur) et 'fillaspect' (ratio d'aspect, ici le nombre d'or).
Copié !
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 Bloc de code
PROC SGPLOT
Explication :
Graphique en barres complexe utilisant le format Unicode défini précédemment. La légende est placée à l'intérieur du graphique ('location=inside'), rendue opaque, et ses dimensions sont personnalisées pour s'adapter au style 'dataskin=pressed'.
Copié !
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;
L'Astuce Pro
Pour ameliorer la lisibilite des symboles de legende dans vos graphiques a barres, utilisez l option FILLASPECT dans KEYLEGEND plutot que d augmenter uniquement la taille globale. En fixant un ratio specifique (ex: fillaspect=golden ou fillaspect=2.5), vous changez la forme des echantillons de couleur sans degrader la resolution des textes associes, ce qui est ideal pour distinguer des motifs de remplissage complexes ou des degradents de type dataskin=pressed comme illustre dans votre dernier bloc de code.
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.

Documentation liée

Aucune documentation spécifique pour cette catégorie.