smoothconnectでSG系グラフの線を滑らかにする話

最近、エクセルで滑らかな曲線の折れ線グラフを書いてる人がいて、「へ~、そんなんできるんだ」と言うと、「は?そんなんも知らないんですか?」と馬鹿にされました。

だって、最近のエクセルあんまりよく知らないしと言うと、「スムージングにチェック入れるだけだし、2003とかでもありましたけど?」とさらに馬鹿にされました。

挙句に「SASではどう書くんですか?」と聞かれ「え、そんなんできたかな?ちょっとわかんない」と答えると、「SASが書けるだけが取り柄なのに全然駄目じゃないですか」と軽蔑の眼差しを向けられてしまいました。

家に帰って、泣きながら調べてみると、あったよ、smoothconnectオプション。
でも9.4からか、結構最近だなぁ。

適当にデータ作って

data Q1;
    call streaminit(777);
    do X=1 to 20;
        Y=rand('uniform');
        output;
    end;
run;

まずは普通にプロット

proc sgplot data=Q1;
    series x=X y=Y/ lineattrs=(thickness=2);
run;






















で、次に

proc sgplot data=Q1;
    series x=X y=Y/smoothconnect lineattrs=(thickness=2);
run;





















おぉ!できた!できたよ!

ちなみにGTLで表現するなら

proc template;
  define statgraph temp1;
     begingraph; 
     layout overlay;
        seriesplot x=X y=Y / lineattrs=(tickness=2)
         smoothconnect=true;
     endlayout;  
   endgraph;
 end;
run;

proc sgrender data=Q1 template=temp1;
run;























で同じだと思う。


ちなみに、また別記事にするかもですが、データ数が多い場合、細かい部分で線が表現しきれず
ドットぽくなってしまうことがあります。
またwaterfallpltのようなぴったりくっついた棒グラフを書きたいのになんか一部に変な隙間ができたりすることもあります。
そういう、細かい部分で生じるアラ?を補正にするにはsubpixelオプションを使います。
今回のグラフでも、画質マニアなら


proc sgplot data=Q1 subpixel;
    series x=X y=Y/smoothconnect lineattrs=(thickness=2);
run;

または

proc template;
  define statgraph temp1;
     begingraph/subpixel=on
     layout overlay;
        seriesplot x=X y=Y / lineattrs=(tickness=2)
         smoothconnect=true;
     endlayout;  
   endgraph;
 end;

proc sgrender data=Q1 template=temp1;
run;

とすると






















うん、やっぱこの程度のグラフだと素人には違いがさっぱりわかりませんね


0 件のコメント:

コメントを投稿