Publié le :
Reporting CREATION_INTERNE

Superposition de deux surfaces 3D avec PROC G3D et GREPLAY

Ce code est également disponible en : Deutsch English Español
En attente de validation
Ce script illustre une technique avancée de SAS©/Graph. Il commence par créer un jeu de données brut (`raw_data`) via une étape DATA avec des données intégrées (datalines). Ensuite, il utilise PROC G3GRID pour lisser ces données et créer une grille interpolée. Les données lissées sont ensuite modifiées pour simuler deux surfaces distinctes. Le script configure l'environnement graphique pour une sortie HTML et génère deux graphiques 3D séparés avec PROC G3D, en les sauvegardant dans un catalogue de graphiques sans les afficher immédiatement. La particularité est de jouer sur la couleur du texte (blanc puis noir) pour éviter un effet de flou lors de la superposition. Enfin, PROC GREPLAY est utilisée pour combiner ces deux graphiques en une seule image, qui est alors rendue dans le fichier HTML de sortie.
Analyse des données

Type : CREATION_INTERNE


Les données initiales sont créées directement dans le script via un bloc DATA STEP et l'instruction 'datalines'. Toutes les données suivantes sont dérivées de cette source interne.

1 Bloc de code
DATA STEP Data
Explication :
Ce bloc DATA STEP crée la table 'raw_data' contenant les coordonnées X, Y, Z. Les données sont intégrées directement dans le code à l'aide de l'instruction 'datalines'.
Copié !
1DATA raw_data;
2INPUT X Y Z;
3DATALINES;
4-1.0 -1.0 15.5
5 -.5 -1.0 18.6
6 .0 -1.0 19.6
7 .5 -1.0 18.5
8 1.0 -1.0 15.8
9-1.0 -.5 10.9
10 -.5 -.5 14.8
11 .0 -.5 16.5
12 .5 -.5 14.9
13 1.0 -.5 10.9
14-1.0 .0 9.6
15 -.5 .0 14.0
16 .0 .0 15.7
17 .5 .0 13.9
18 1.0 .0 9.5
19-1.0 .5 11.2
20 -.5 .5 14.8
21 .0 .5 16.5
22 .5 .5 14.9
23 1.0 .5 11.1
24-1.0 1.0 15.8
25 -.5 1.0 18.6
26 .0 1.0 19.5
27 .5 1.0 18.5
28 1.0 1.0 15.8
29;
30RUN;
2 Bloc de code
PROC G3GRID Data
Explication :
La procédure G3GRID est utilisée pour l'interpolation. Elle prend les données brutes ('raw_data') et génère une nouvelle table 'smoothed' avec une grille de points plus fine. L'option 'spline' avec 'smooth=.05' applique un lissage par spline cubique pour obtenir une surface régulière.
Copié !
1PROC G3GRID DATA=raw_data out=smoothed;
2grid y*x=z / spline smooth=.05
3 axis1=-1 to 1 BY .1
4 axis2=-1 to 1 BY .1;
5RUN;
3 Bloc de code
DATA STEP Data
Explication :
Ce DATA STEP modifie la table 'smoothed' pour simuler deux surfaces distinctes. Il crée deux nouvelles variables 'z1' et 'z2' en décalant la valeur originale de 'z' de -8 et +8 respectivement.
Copié !
1DATA smoothed; SET smoothed;
2label z1='Z' z2='Z';
3z1=z-8;
4z2=z+8;
5RUN;
4 Bloc de code
ODS / GOPTIONS
Explication :
Ce bloc configure l'environnement de sortie. 'goptions' définit les paramètres des graphiques (périphérique, taille). ODS (Output Delivery System) est configuré pour fermer la sortie listing standard et rediriger la sortie vers un fichier HTML. L'option 'nodisplay' empêche l'affichage immédiat des graphiques.
Copié !
1%let name=example06;
2filename odsout '.';
3 
4goptions device=png;
5goptions xpixels=600 ypixels=600;
6goptions noborder;
7
8ODS LISTING CLOSE;
9ODS HTML path=odsout body="&name..htm" (title="SAS/Graph g3d plots") style=minimal;
10 
11goptions gunit=pct htitle=4.0 htext=2.5 ftitle="albany amt/bo" ftext="albany amt";
12goptions nodisplay;
5 Bloc de code
PROC G3D
Explication :
La procédure G3D génère le premier graphique 3D basé sur la variable 'z1'. 'name="plot1"' sauvegarde le graphique dans le catalogue de travail pour une utilisation ultérieure. Le texte est défini en blanc pour préparer la superposition et éviter les artéfacts visuels.
Copié !
1goptions ctext=white;
2 
3title ls=1.5 "Overlay Multiple G3D Surfaces, using Greplay";
4PROC G3D DATA=smoothed;
5 plot y*x=z1 /
6 grid zmin=0 zmax=30 xticknum=4 tilt=80
7 ctop=purple cbottom=cx00ff00 des='' name="plot1";
8RUN;
6 Bloc de code
PROC G3D
Explication :
La procédure G3D génère le second graphique 3D basé sur la variable 'z2', en utilisant les mêmes paramètres d'axes et d'angle que le premier pour garantir un alignement parfait. Le graphique est sauvegardé sous le nom 'plot2' et le texte est défini en noir.
Copié !
1goptions ctext=black;
2 
3PROC G3D DATA=smoothed;
4 plot y*x=z2 /
5 grid zmin=0 zmax=30 xticknum=4 tilt=80
6 ctop=blue cbottom=red des='' name="plot2";
7RUN;
7 Bloc de code
PROC GREPLAY
Explication :
L'option 'goptions display' est réactivée. La procédure GREPLAY superpose les deux graphiques ('plot1' et 'plot2') dans une seule et même zone définie par le modèle 'WHOLE'. L'instruction 'treplay' exécute cette superposition, créant le graphique composite final.
Copié !
1goptions display;
2 
3PROC GREPLAY tc=tempcat nofs igout=work.gseg;
4tdef WHOLE des="my template"
5 1/llx=0 lly=0
6 ulx=0 uly=100
7 urx=100 ury=100
8 lrx=100 lry=0
9 ;
10template = whole;
11treplay 1:plot1 1:plot2 des='' name="&name";
12RUN;
13QUIT;
8 Bloc de code
ODS
Explication :
Ce bloc finalise le processus en fermant le fichier de sortie HTML et en réactivant la destination ODS LISTING par défaut.
Copié !
1ODS HTML CLOSE;
2ODS LISTING;
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.