안녕하세요. 표준 차트를 사용하면 그래프 빌더처럼 빈 막대가 제거되지 않기 때문에 그래프 빌더에서 막대 차트를 스크립팅하고 있습니다. X 요인으로 연속 모델링 유형을 사용할 수 있도록 허용합니다. 내가 어떻게 접근하고 있는지 설명하겠습니다.
사용자는 막대 차트를 그릴 몇 가지 열을 선택합니다. 그래프 빌더와 선택된 첫 번째 열을 사용하여 차트를 만듭니다. 그런 다음 두 개 이상의 열이 선택된 경우 그래프 빌더에 <<변수를 추가합니다. 선택한 열 중 하나가 연속적인 경우를 제외하고는 내가 원하는 대로 정확하게 작동합니다. 그런 다음 그래프 빌더는 전체 X를 연속형 변수로 대체하고 거기에 더 많은 변수가 있지만 하나에 대한 플롯만 표시한다고 말합니다. 이렇게 연속형 변수를 순서형으로 변경하여 수동으로 차트를 생성하면 원하는 대로 작동됩니다. 그래서 각 연속 열을 원래대로 변경했지만 그래프는 여전히 변수를 추가하지 않고 대체합니다.
내가 원하는 방식으로 이 작업을 수행할 수 있는 방법에 대한 아이디어가 있는 사람이 있습니까? 내 스크립트의 단순화된 버전은 다음과 같습니다.
myWin = Column Dialog( FactorCol = Col List( "Multivariate Factor(s)" ) );
myFactor = myWin["FactorCol"];
myPlot = Graph Builder(
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables( X( Eval( myFactor[1] ) ), Y( yCol ), Color( Eval( myColor ) ) ),
Elements( Bar( X, Y, Summary Statistic( "Std Dev" ), Label( "Label by Value" ) ) ),
SendToReport(
Dispatch(
{},
ScaleBox,
{Label Row( 1, {Automatic Tick Marks( 0 ), Show Major Ticks( 1 ), Lower Frame( 1 ), Tick Mark Style( "Long Divider" )} )}
)
)
);
//If there is more than one factor then need to add variables to the graph
If( N Items( myFactor ) > 1,
myRep = Report( myPlot )[Graph Builder Box( 1 )];
For( j = 2, j <= N Items( myFactor ), j++,
xcol = Column( dtmm, myFactor[j] );
If( xcol << Get Modeling Type == "Continuous",
//set a column property so I can change it back later
xcol << Set Property( "change", 1 );
xcol << Modeling Type( "Ordinal" );
);
myRep << Add Variable( {xcol, Role( "X" ), Position( 1 )} );
);
//now I have to adjust all the x-axis for the way I want it
For( j = 1, j <= N Items( myFactor ), j++,
Report( myPlot )[Axisbox( 1 )] << {Label Row(
j,
{Automatic Tick Marks( 0 ), Show Major Ticks( 1 ), Lower Frame( 1 ), Tick Mark Style( "Long Divider" )}
)}
);
);
실제로 그래프 빌더 박스의 변수들을 차근차근 확인하면서 어떻게 하는지 알아냈습니다. 컬럼이 연속형이면 순서형으로 변경하고, 변수 추가 시 내부 위치 항을 추가해야 합니다. 다음은 관련 스크립트 비트입니다.
//graph builder can not add factors unless they are ordinal or nominal
//so if it is continuous, change to ordinal, and set a column property to change back later
If( xcol << Get Modeling Type == "Continuous",
xcol << Set Property( "change", {1} );
xcol << Modeling Type( "Ordinal" );
myRep << Add Variable( {xcol, Role( "X" ), Position( 1 ), Inner Position[i]} ),
,
myRep << Add Variable( {xcol, Role( "X" ), Position( 1 )} )
);이것은 내가 원하는 것을 정확히 수행합니다.
시간
감사합니다. 예, 문자열 스크립트를 만드는 것이 옵션이라는 것을 알고 있지만 항상 그렇게 하기를 꺼려합니다. 하지만 이 경우에는 필요할 수도 있습니다.나는 실망했다.
최상의
시간