2変量データに対しての3D Raincloud plot[アニメーションバージョン]

前使ったダミーデータを雑にずらして二峰性にしたのでなんか、ラクダのコブか、戦艦みたいになっちゃいました



3Dグラフの、視点角度をループでずらして何枚も作図しながらanimationでまとめてGIFファイルにしてみました
なんか微妙に縮尺がブレて、ん?みたいになるので、ほんとはなんか調整がいるのかも
底面に配置したのはHPBINプロシジャでの単純なQuantile Binningの10ビンバージョンです
ようするに各変量で、ただ10%ごとに分位点だしてそれでメッシュしただけっす。
2変量に対しての3次元RCPがプロットとして有用かどうかは、ちょっと私自身、まだ実装例がないので、ちょっと保留で。散布図とヒートマップ、BAGPLOTなど2次元のプロットで複合評価するほうが正確に把握できる気もしている… 身も蓋もないけど(笑)

data wk1;

 seed = 15678;

 do i = 1 to 500;

  z1 = rannor(seed);

  z2 = rannor(seed);

  z3 = rannor(seed);

  x = 3*z1 + z2;

  y = 3*z1 + z3;

  output;

 end;

 do i = 1 to 500;

  z1 = rannor(seed)+3;

  z2 = rannor(seed)+3;

  z3 = rannor(seed)+3;

  x = 3*z1 + z2;

  y = 3*z1 + z3;

  output;

 end;

 drop seed;

run;

proc kde data=wk1 ; 

   bivar x y/ out=kde; 

run;

data wk2;

set wk1(in=wk) kde(in=kde);

if wk then do;

    density2=ranuni(777)*0.004;

end;

if kde then do;

    x=value1;

    y=value2;

    if density>10**-5 then density2=density+0.01;

    else delete;

end;

keep x y density2;

run;


ods output Mapping=map;

proc hpbin data=wk1  numbin=10 quantile   ;

   input x y;

 run;

data anno2;

set map;

where same ^missing(LB);

if  variable="x" then do;

   function='move'; xsys='1';ysys='2';zsys='2';color="gray";line=2;size=0.1; x=0; y=LB; z=0;output;

   function='draw';   x=100; y=LB; z=0;output;

end;

if  variable="y" then do;

   function='move'; xsys='2';ysys='1';zsys='2';color="gray";line=2;size=0.1; x=LB; y=0; z=0;output;

   function='draw';   x=LB; y=100; z=0;output;

end;

run;


%macro plot;

%do rotate=0  %to 360 %by 10;

goptions reset=all border cback=white htitle=12pt; 

proc g3d data=wk2;

 scatter x*y=density2 /shape="balloon" annotate=anno2  yticknum=2 xticknum=2 size=0.5 rotate=&rotate noneedle

;

run; 

%end;

%mend;

options  ANIMATION=START  ANIMDURATION=0.5   PRINTERPATH=GIF nodate;

ods printer file="xxxxx\test\test.gif" ;

%plot

ods printer close ;

options  ANIMATION=STOP ;











0 件のコメント:

コメントを投稿