2017-01-10 6 views
1

그래픽 템플릿 언어를 사용하여 차트에 마커를 표시하려고합니다. 스타일에 마커 정의를 추가하려고 시도했습니다. markerattrs= 옵션 문 내의 seriesplot 문과 차트 그룹에 discreteattrmaps를 사용했습니다. 나는이 접근법들 중 어느 것도 작동시키지 못하는 것 같습니다.GTL을 사용하여 시리즈 차트에 마커 표시

스타일 정의 : 차트

proc template; 
    define style excel; 
    parent=styles.htmlblue; 
    class graph  /attrpriority='none'; 
    style graphdata1/contrastColor=#416FA6; 
    style graphdata2/contrastColor=#A8423F; 
    style graphdata3/contrastColor=#86A44A; 
    style graphdata4/contrastColor=#8064A2; 
    style graphdata5/contrastColor=#DA8137; 
    style graphdata6/contrastColor=#D7E4BD; 
    style graphdata7/contrastColor=#FCD5B5; 
    style graphdata8/contrastColor=#8EA5CB; 
    style graphdata9/contrastColor=#E6B9B8; 
    style graphdata10/contrastColor=#CCC1DA; 
    end; 

run; 

템플릿 :

proc template; 
    define statgraph excel_series_trended; 
    dynamic _date _class _metric _title; 
    begingraph; 
     entrytitle halign=center _title; 

     discreteattrmap name="symbols"/ignorecase=true ; 
     value "IBM"/markerattrs=(color=blue symbol=diamondfilled) ; 
     value other/markerattrs=(color=red symbol=circlefilled) ; 
     enddiscreteattrmap ; 

     discreteattrvar attrvar=groupmarkers var=stock attrmap="symbols" ; 

     layout lattice/rowdatarange=data columndatarange=data rowgutter=0 columngutter=0; 

      layout overlay/walldisplay=(fill) 
          yaxisopts=(griddisplay=on gridattrs=(pattern=2 color=Cx999999) linearopts=(viewmin=0)) 
          xaxisopts=(type=discrete ); 
      seriesplot x=_date y=_metric/group=_class markercolorgroup=_class name='series' groupdisplay=overlay connectorder=xaxis lineattrs=(pattern=solid thickness=3); 
      endlayout; 

      sidebar/align=bottom spacefill=false; 
      discretelegend 'series'/opaque=true border=false halign=center valign=center displayclipped=true order=rowmajor; 
      endsidebar; 

     endlayout; 

    endgraph; 
    end; 
run; 

sashelp.stocks 데이터 집합을 사용하여 차트를 렌더링 :

ods html style=excel; 
ods graphics/antialias=on antialiasmax=999999; 
proc sgrender data=sashelp.stocks template=excel_series_trended; 
    where date between '01jan2005'd and '01jun2005'd; 
    dynamic _date="date" _metric="high" _class="stock"; 
run; 

답변

1

당신은 아마도 두 가지를 할 필요가있다.

먼저 시리즈 플롯 문에 display=(markers)을 추가하십시오. 마커를 사용할 수 있습니다.

두 번째로 동일한 문에 markersymbolgroup=groupmarkers을 추가하여 불연속 속성 맵을 마커에 사용할 수 있도록하고 markercolorgroup을 동일한 값으로 변경하십시오. 동적 변수를 사용하여 동적 변수를 정의 할 수는 없으므로 discreteattrvar 값을 사용해야합니다.

전체 코드 : 내 마지막 프로젝트에서 유지하기 쉬웠다 약간 다른 솔루션을 선택 결국 받아 들여 나는 조의 답을 표시 한하지만

proc template; 
    define statgraph excel_series_trended; 
    dynamic _date _class _metric _title; 
    begingraph; 
     entrytitle halign=center _title; 

     discreteattrmap name="symbols"/ignorecase=true ; 
     value "IBM"/markerattrs=(color=blue symbol=diamondfilled) ; 
     value other/markerattrs=(color=red symbol=circlefilled) ; 
     enddiscreteattrmap ; 

     discreteattrvar attrvar=groupmarkers var=stock attrmap="symbols" ; 

     layout lattice/rowdatarange=data columndatarange=data rowgutter=0 columngutter=0; 

      layout overlay/walldisplay=(fill) 
          yaxisopts=(griddisplay=on gridattrs=(pattern=2 color=Cx999999) linearopts=(viewmin=0)) 
          xaxisopts=(type=discrete ); 
      seriesplot x=_date y=_metric/group=_class name='series' 
              markersymbolgroup=groupmarkers markercolorgroup=groupmarkers 
              groupdisplay=overlay connectorder=xaxis lineattrs=(pattern=solid thickness=3) 
              display=(markers); 
      endlayout; 

      sidebar/align=bottom spacefill=false; 
      discretelegend 'series'/opaque=true border=false halign=center valign=center displayclipped=true order=rowmajor; 
      endsidebar; 

     endlayout; 

    endgraph; 
    end; 
run; 
+1

가, (나도 대답을 리콜하지 않았로) 나는이 문제를 해결하는 방법은'sgplot'을 실행하는 데이었고, 'tmplout' 옵션을 사용하여 SGPLOT이 어떤 일을하는지보십시오. – Joe

+0

감사합니다. 나는 sgplot에 익숙하지 않고 그 옵션이 있다는 것을 깨닫지 못했습니다. 알아 둘만한. –

+0

그래, SGPLOT이 쉽게 해낸 GTL에서 뭔가를하는 방법을 알아 내는데 어려움을 겪어왔다. SGPANEL에는 비슷한 옵션이 없다는 것은 짜증나게합니다. – Joe

1

.

필자가 누락 한 구문의 핵심 부분은 시리즈 플롯에 display=(markers) 옵션이 있다는 것입니다 (Joe가 지적한대로). 그 추가 한 후, 나는 단순히 스타일을 지정하여 마커 기호를 제어 할 수 있었다 :

proc template; 
    define style excel; 
    parent=styles.htmlblue; 
    class graph  /attrpriority='none'; 
    style graphdata1/contrastColor=#416FA6 markersymbol='circlefilled'; 
    style graphdata2/contrastColor=#A8423F markersymbol='circlefilled'; 
    style graphdata3/contrastColor=#86A44A markersymbol='circlefilled'; 
    end; 

run; 

불행하게도 스타일 does not 지원 (문서의 말씀에도 불구하고)를 markersize= 옵션을 선택합니다. 이를 위해 seriesplot 문에 markerattrs=(size=_markersize) 옵션을 추가했습니다. _markersize을 동적 값 0px (예 : 마커가 표시되지 않음)로 설정했습니다. 이제 템플릿이 나를 쉽게 기호를 변경할 수 있으며, 또는 마커의 크기 : 참고로

proc template; 
    define statgraph excel_series_trended; 
    dynamic _date _class _metric _title _markersize=0px; 
    begingraph; 
     entrytitle halign=center _title; 

     layout lattice/rowdatarange=data columndatarange=data rowgutter=0 columngutter=0; 

      layout overlay/walldisplay=(fill) 
          yaxisopts=(griddisplay=on gridattrs=(pattern=2 color=Cx999999) linearopts=(viewmin=0)) 
          xaxisopts=(type=discrete ); 
      seriesplot x=_date y=_metric/display=(markers) group=_class name='series' groupdisplay=overlay connectorder=xaxis 
              lineattrs=(pattern=solid thickness=3) 
              markerattrs=(size=_markersize) 
              ; 
      endlayout; 

      sidebar/align=bottom spacefill=false; 
      discretelegend 'series'/opaque=true border=false halign=center valign=center displayclipped=true order=rowmajor; 
      endsidebar; 

     endlayout; 

    endgraph; 
    end; 
run;