다른 N의 반복 값이 있는 그룹화된 x 축이 있는 변동성 차트에서 공유 y 축이 있는 동적 수평선을 추가하는 방법은 무엇입니까?안녕하세요 여러분,
이전 게시물을 기반으로 차별화할 새 스레드를 만들고 싶었습니다. https://community.jmp.com/t5/Discussions/How-to-add-Dynamic-horizontal-line-by-shared-y-axis-among /mp/622722 . 가변성 차트에서 동적 수평선을 원하는 경우에도 동일한 아이디어가 적용되지만 x당 하나의 값이 있으므로 연관 배열을 사용하는 이전 솔루션과 달리 이 경우 잠재적으로 x당 여러 값이 그룹화되어 그래프가 표시됩니다. N이 조건 간에 분할되어 그렇게 그려져야 하기 때문에 x당 N을 기반으로 하는 것은 작동하지 않습니다. 여기서 저는 이를 수행하는 방법을 알아내기 위해 애쓰고 있으며 가능하다면 그래프 스크립팅 경험이 더 많은 사람이 도움을 주시면 감사하겠습니다. 아래는 예를 들어 손으로 그린 선을 사용하여 원하는 출력이며 그래프를 생성하는 코드도 아래에 있습니다.
아래 예에서 Toyota는 이제 N=8 및 N=3이 있는 :Protection으로 분할되고 마찬가지로 Ford는 그룹화에 대해 N=11 및 N=3이므로 Toyota 그룹과 Ford 그룹이 모두 그중에는 빨간색과 파란색 선으로 표시된 것처럼 Max(:Wt) 값을 갖는 수평선이 있고 다른 모든 것에는 보라색 선으로 표시된 것처럼 똑같이 고유한 선이 있습니다. 이를 달성하는 방법에 대한 아이디어는 환상적입니다. 게시물 하단에 @ErraticAttack 이 제공한 코드는 그룹화 및 그래프 작성을 위한 멋진 템플릿으로 게시되어 있지만 연관 배열이므로 Toyota는 N: 8+3 = 11이고 마찬가지로 Ford는 11+3=14라고 표시됩니다. 범위를 넓히고 이제 분할되어 있으므로 잘못된 범위를 그래프로 표시합니다. 
dt = Open( "$SAMPLE_DATA/Cars.jmp" );
rpt = dt << Variability Chart(
Y( :Head IC),
X( :Protection, :Make, :Model ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Show Cell Means( 0 ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
By( :NAME("D/P")),
);이전 질문을 돕기 위한 @ErraticAttack 의 코드입니다.
names default to here(1);
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Cars.jmp" );
rpt = dt << Variability Chart(
Y( :Head IC),
X( :Make, :Model ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Show Cell Means( 0 ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
Where( :NAME("D/P") == "Driver" & :Protection == "manual belts" ),
);
//find groupings:
rows = dt << Get Rows Where( :NAME("D/P") == "Driver" & :Protection == "manual belts" );
subt = dt << Subset( Rows( rows ), Columns( :Make, :Model, :Wt ), Not Linked, Private );
sumt = subt << Summary( Group( :Make, Model ), Mean( :Wt ), Statistics Column Name Format( "Column" ), Link to Original Data Table( 0 ), Private );
Close( subt, No Save );
subt = sumt << Summary( Group( :Make ), Mean( :Wt ), Statistics Column Name Format( "Column" ), Link to Original Data Table( 0 ), Private );
Close( sumt, No Save );
category number = [=>];
category average = [=>];
For Each Row( subt,
category number[:Make] = :N Rows; // each least-significant category in a VariabilityPlot is exactly X=1 width on the hidden x-axis, starting at zero
category average[:Make] = :Wt
);
Close( subt, No Save );
tree = rpt << Report;
Eval( Eval Expr(
tree[FrameBox( 1 )] << Add Graphics Script(
Local( {values = Expr( category average ), numbers = Expr( category number ), i, items, sum = 0},
items = numbers << Get Keys;
Pen Size( 2 );
Pen Color( "Blue" );
Summation( i = 1, N Items( items ),
Line( Eval List( {sum, values[items[i]]} ), Eval List( {sum += numbers[items[i]], values[items[i]]} ) );
0
)
)
)
) )감사합니다. 어떤 도움이라도 진심으로 감사드립니다!
자동화 및 스크립팅기본 데이터 분석 및 모델링데이터 탐색 및 시각화대량 맞춤화윈도우Re: 다른 N의 반복 값이 있는 그룹화된 x축이 있는 가변성 차트에서 공유 y축이 있는 동적 수평선을 추가하는 방법은 무엇입니까?고마워요 짐!
Re: 다른 N의 반복 값이 있는 그룹화된 x축이 있는 가변성 차트에서 공유 y축이 있는 동적 수평선을 추가하는 방법은 무엇입니까?37번째 줄에서 다음과 같이 변경해야 합니다.
fb = Report(varchart)[i][FrameBox(1)];
에게
fb = Report( varchart[i] )[FrameBox( 1 )];
Re: 다른 N의 반복 값이 있는 그룹화된 x 축이 있는 가변성 차트에서 공유 y 축이 있는 동적 수평선을 추가하는 방법은 무엇입니까?안녕하세요 @jthi 님 ,
솔루션을 제공해 주셔서 감사합니다. 매우 우아한 답변이 있습니다. 언급한 대로 이는 하나의 프레임박스에만 적용되며 가변성 차트가 생성하는 두 프레임박스 모두에 대해 작동하는 것이 이상적입니다. 귀하의 코드를 이에 맞게 조정했지만 두 가지 모두에 수평선이 표시되도록 하는 데 문제가 있습니다. 오류를 확인하고 해결 방법을 알 수 있다면 정말 좋을 것입니다. 감사해요!
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cars.jmp");
varchart = dt << Variability Chart(
Y(:Head IC),
X(:Protection, :Make, :Model),
Analysis Type("Choose best analysis (EMS REML Bayesian)"),
Show Range Bars(0),
Show Cell Means(0),
Std Dev Chart(0),
Points Jittered(1),
By(:"D/P"n)
);
dt << new column("Group", Character, Nominal, Formula(
:"D/P"n || :Protection || :Make // don't add model here
));
dt_summary = dt << Summary(
Group(:Group),
Max(:Wt),
N Categories(:Model),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0),
//Invisible
);
uniq = Associative Array( Column( dt, "D/P" ) << GetValues ) << GetKeys;
for(i = 1, i <= N Items(uniq), i++,
dt_summary_subset = dt_summary << Subset( Rows( dt_summary << get rows where(Substr(:Group, 1, Length(uniq[i])) == uniq[i])),
Columns(), Not Linked);
weights = dt_summary_subset[0, "Wt"];
counts = dt_summary_subset[0, "Model"];
fb = Report(varchart)[i][FrameBox(1)];
Eval(Eval Expr(
fb << Add Graphics Script(
Local({refs = Expr(weights), counts = Expr(counts), i, sum = 0},
Pen Size(2);
Pen Color("Blue");
Summation(i = 1, N Items(counts),
Line(Eval List({sum, refs[i]}), Eval List({sum += counts[i], refs[i]}));
);
)
)
));
);Re: 다른 N의 반복 값이 있는 그룹화된 x축이 있는 가변성 차트에서 공유 y축이 있는 동적 수평선을 추가하는 방법은 무엇입니까?매우 쉬운 옵션 중 하나는 그룹에 대한 새 열을 만드는 것입니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cars.jmp");
// for simplicity sake we drop Passenger
rows_to_delete = dt << Get Rows Where(:"D/P"n == "Passenger");
dt << Delete Rows(rows_to_delete);
varchart = dt << Variability Chart(
Y(:Head IC),
X(:Protection, :Make, :Model),
Analysis Type("Choose best analysis (EMS REML Bayesian)"),
Show Range Bars(0),
Show Cell Means(0),
Std Dev Chart(0),
Points Jittered(1),
By(:"D/P"n)
);
dt << new column("Group", Character, Nominal, Formula(
:"D/P"n || :Protection || :Make // don't add model here
));
dt_summary = dt << Summary(
Group(:Group),
Max(:Wt),
N Categories(:Model),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0),
Invisible
);
weights = dt_summary[0, "Wt"];
counts = dt_summary[0, "Model"];
Close(dt_summary, no save);
fb = Report(varchart)[FrameBox(1)];
Eval(Eval Expr(
fb << Add Graphics Script(
Local({refs = Expr(weights), counts = Expr(counts), i, sum = 0},
Pen Size(2);
Pen Color("Blue");
Summation(i = 1, N Items(counts),
Line(Eval List({sum, refs[i]}), Eval List({sum += counts[i], refs[i]}));
);
)
)
));
이 예에는 다른 D/P가 삭제되므로 프레임박스가 하나만 있습니다.