We used SAS to make this 3d animated plot with a SAS feature called the "GIFANIM" driver.
* make data with predicted values ;
data test;
* range age from -21 to 21 (centered) ;
do age = -21 to 21 ;
* range tenure from -18 to 25 (centered) ;
do ten = -18 to 25 ;
* here is the regression equation ;
ypred = 47 + 0.0705*age + 0.1820*ten - 0.00779*age*ten ;
output ;
end;
end;
run;
* this is required ;
%macro ENDGIF;
goptions gepilog='3B'x;
%mend;
%macro IMGSIZE(w=1280, h=1024, dpi=100, rows=43, cols=83);
%if &dpi<=0 %then
%put DPI must be greater than zero.;
%else %do;
goptions hsize=%sysevalf(&w/&dpi)in vsize=%sysevalf(&h/&dpi)in
hpos=&cols vpos=&rows;
%end;
%mend IMGSIZE;
%macro ANIMATE;
%let first=1;
* shift 6 degrees each frame ;
%do angle=1 %to 360 %by 6;
* on first frame, set defaults etc... ;
%if &first = 1 %then %do;
goptions reset=all;
* name of output gif file;
filename out "e:tempspin.gif";
* initiialize size of .gif file ;
%IMGSIZE(w=570, h=480);
* set options for gif, like color font ;
* wait time between frames ;
goptions dev=gifanim gsfname=out
gsfmode=replace ftext=swiss
htext=1 gcopies=0 gwait=50 /* changed 25 to 5 */
cback=black
colors=(WHITE YELLOW GOLD BLUE MAGENTA DAGRAY BROWN);
* give info for footnote ;
footnote h=4 j=right "Graph of Age and Tenure on Predicted Y";
%let first=0;
%end;
%else
%do;
goptions gsfmode=append;
%end;
* after last frame, put out final part via "endgif" macro ;
%if &angle = 360 %then
%do;
%ENDGIF;
%end;
* this makes each frame ;
proc g3d;
plot age*ten=ypred/rotate=&ANGLE ctop=yellow cbottom=gold;
label age = 'Age of Person'
ten = 'Tenure of Person'
ypred = 'Predicted Y' ;
run;
%end;
%mend;
* this calls the animate macro to make the animated gif ;
%ANIMATE;
