테이블 요약의 각 요소에 대한 참조선이 있는 그래프를 그리는 방법안녕 모두,
테이블 요약의 각 요소에 대한 참조선이 있는 그래프(스크립트, JMP 13)를 플롯하려고 합니다(각 Name+Grade에 대한 점수 대 # 시도의 그래프, x축에 점수의 25 및 75 백분위수 참조선 추가). . 어떤 의견을 주셔서 감사합니다
| 이름 | 등급 | 점수 | # 노력하다 |
| 이름1 | ㅏ | 80 | 2 |
| 이름1 | ㅏ | 82 | 삼 |
| 이름1 | 비 | 98 | 삼 |
| 이름1 | 씨 | 86 | 2 |
| 이름2 | ㅏ | 88 | 삼 |
| 이름3 | ㅏ | 90 | 2 |
| 이름3 | ㅏ | 88 | 1 |
| 이름3 | ㅏ | 94 | 삼 |
| 이름4 | 비 | 96 | 2 |
| 이름4 | 비 | 82 | 4 |
| 이름4 | ㅏ | 100 | 1 |
| 이름4 | 씨 | 92 | 2 |
| 이름5 | ㅏ | 84 | 삼 |
Re: 표 요약의 각 요소에 대한 참조선으로 그래프를 그리는 방법안녕 @스핀업 ,
나는 당신이 원하는 것을 이해한다고 생각합니다. 하지만 약간 혼란스럽기도 합니다. 9개의 개별 이변량 그래프를 요약하거나 그래프로 표시하고 싶습니까?
원본 데이터 테이블을 사용하여 이변량 맞춤을 수행하면 9개의 그래프를 모두 쉽게 만들 수 있습니다. 예를 들면 다음과 같습니다.
Bivariate(
Y( :Score ), X( :Name( "# try" ) ),
By( :Name, :Grade )
);
이렇게 하면 이전 게시물에서 색칠한 9개의 그래프가 생성됩니다.
그런 다음 아마도 해야 할 일은 For 루프를 사용하여 Quantile 라인(또는 음영 영역)을 생성하는 것입니다.
첫 번째 그래프의 스크립트는 다음과 같습니다.
Bivariate(
Y( :Score ),
X( :Name( "# try" ) ),
Where( :Name == "name1" & :Grade == "A" ), // this would be selecting
SendToReport(
Dispatch(
{},
"2",
ScaleBox,
{Min( 75 ), Max( 100 ), Inc( 5 ), Minor Ticks( 1 ), // this sets the appearance of the y-axis
Add Ref Line( 83, "Solid", "Blue", "25th quantile", 1 ),
Add Ref Line( 95, "Solid", "Blue", "75th quantile", 1 )}
)
)
);실제로 NameList={"Name1", "Name2"...}라는 이름의 목록을 설정하거나 열 요소에서 가져오면 For 루프를 삽입하고 NameList[i] 요소를 참조합니다. Where(:Name==NameList[i] & Grade == GradeList[i])의 경우도 마찬가지입니다.
또 다른 옵션은 위에 포함된 첫 번째 스크립트의 출력 트리 구조를 검사한 다음 9개 그래프의 각 y축에 대해 AxisBox(i)를 참조하는 것입니다. y축은 모두 홀수이므로 For 루프를 수행하는 경우 루프에서 1에서 3, 5로 반복되도록 i++를 수행해야 합니다.
링크에 정말 좋은 내용이 있습니다. @Craige_Hales 제공.
귀하의 특정 문제에 대해서는 확실히 일부 루핑이 필요하다고 생각합니다. 또는 모든 작업을 수동으로 한 번 수행한 다음 스크립트를 데이터 테이블(아마도 그룹으로)에 저장한 다음 해당 스크립트를 복사/붙여넣고 새 스크립트 창에 별도의 JSL 파일로 저장할 수 있습니다. 수동으로 수행하는 방법을 알아낼 수 있는 경우 JMP가 자동으로 JSL을 작성하므로 사용자는 모든 작업을 처리하는 마스터 JSL 파일에 모두 함께 넣기만 하면 됩니다. 유일한 문제는 이름이나 열 참조 등을 변경하기로 결정한 경우입니다. 그렇다면 지역 변수를 사용하기 시작해야 합니다.
도움이 되었기를 바랍니다!,
DS
Re: 표 요약의 각 요소에 대한 참조선으로 그래프를 그리는 방법아마도 이런 식으로
dtBigClass = Open( "$sample_data/big class.jmp" );
dtage = dtBigClass << Summary( Group( :age ) ); // makes a small table of unique ages
ages = dtage[0, 1]; // [12, 13, 14, 15, 16, 17]
Close( dtage, "nosave" ); // table no longer needed
grid = Lineup Box( N Col( 3 ), spacing( 20, 30 ) ); // Horz,Vert extra space between graphs in pixels
For( iAge = 1, iAge <= N Rows( ages ), iAge += 1, // for each age...
dtBigClass << selectwhere( age == ages[iAge] );
dtSubset = dtBigClass << subset( selectedrows( 1 ), linked( 1 ), "invisible" );
// the summary will be a single row with the requested information
dtSummary = dtSubset << Summary( Mean( :height ), Mean( :weight ), Std Dev( :height ), Std Dev( :weight ), Freq( "None" ), Weight( "None" ) );
// grab the values of interest in simpler variable names
heightMean = dtSummary:name( "Mean(height)" )[1]; // row one has the answers
heightStdDev = dtSummary:name( "Std Dev(height)" )[1];
weightMean = dtSummary:name( "Mean(weight)" )[1];
weightStdDev = dtSummary:name( "Std Dev(weight)" )[1];
Close( dtSummary, "nosave" ); // close the work table, no longer needed
// make a graph, attach to a borderbox so it does not open in a window...
bb = Border Box(
dtSubset << Graph Builder(
Size( 400, 300 ),
Show Control Panel( 0 ),
Show Legend( 0 ), // don't need a legend
Variables( X( :height ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 5 ) ) ),
// add ref lines. You can get a script like this GraphBuilder script by
// making a graph builder interactively, then using the red triangle->get script.
// below, the numbers in the script have been replaced with the variables above.
SendToReport(
Dispatch(
{},
"height",
ScaleBox,
{Add Ref Line( heightMean, "Dotted", "Red", "", 2 ), Add Ref Line( heightMean + heightStdDev, "Dotted", "Blue", "", 2 ),
Add Ref Line( heightMean - heightStdDev, "Dotted", "Blue", "", 2 ),
// force all axes to be the same...
Min( 48.2828947368421 ), Max( 75.8776488919668 ), Inc( 5 ), Minor Ticks( 1 )}
),
Dispatch(
{},
"weight",
ScaleBox,
{Add Ref Line( weightMean, "Dotted", "Red", "", 2 ), Add Ref Line( weightMean + weightStdDev, "Dotted", "Blue", "", 2 ),
Add Ref Line( weightMean - weightStdDev, "Dotted", "Blue", "", 2 ),
// force all axes to be the same...
Min( 55.2100840336134 ), Max( 188.127074359155 ), Inc( 20 ), Minor Ticks( 0 )}
),
Dispatch( {}, "Graph Builder", FrameBox, {Marker Size( 6 ), Transparency( 1 )} ), // make the markers bigger
Dispatch( {}, "graph title", TextEditBox, {Set Text( "Age = " || Char( ages[iAge] ) )} ), // add the age= title
Dispatch( {}, "Graph Builder", OutlineBox, {Set Title( "" )} ) // suppress the Graph Builder title
)
)
);
grid << append( bb ); // add the graph to the grid
); // the iAge loop
dtBigClass << clearRowStates; // undo the final selection
New Window( "the report", V List Box( H Center Box( Text Box( "Big Report", <<SETFONTSIZE></SETFONTSIZE>
Reports grouped in a 3-wide gridReports grouped in a 3-wide grid3차원 그리드로 그룹화된 보고서
Re: 표 요약의 각 요소에 대한 참조선으로 그래프를 그리는 방법감사해요 @Craige_Hales 링크에 대한 것이지만 내 주요 어려움은 각각 고유한 참조선이 있는 개별 그래프를 출력하도록 프로그래밍하는 방법입니다. 보다 명확하게 이 데이터 테이블의 각 색상에 대한 그래프를 생성하는 방법이 궁금합니다.

감사해요!
Re: 표 요약의 각 요소에 대한 참조선으로 그래프를 그리는 방법다음은 관련 게시물입니다. https://community.jmp.com/t5/JSL-Cookbook/Use-Summary-to-Automatically-Add-Reference-Lines-to-Graph/ta-p/41709
Re: 표 요약의 각 요소에 대한 참조선으로 그래프를 그리는 방법감사해요 @SDF1 답장을 보내주셔서 감사합니다. 명확하지 않아서 죄송합니다. 여기에 조금 더 설명하고 싶습니다.
먼저 별도의 스크립트 창에 스크립트를 작성하여 독립적으로 실행할 수 있도록 하려고 합니다. 다음은 요약을 가져오려는 스크립트의 첫 번째 부분입니다.
Names Default To Here( 1 );
dt = Current Data Table();
Summary = dt << Summary(
Group( :Name, :Grade ),
Median( :Score ),
// other statistics can be added here//
Link to Original Data Table( 0 )
);
출력은 다음과 같습니다.

이제 내가 정말로 원하는 것은 9개의 그래프(점수 대 # 시도)(각 행에 대해 하나씩(N 행 데이터 포인트가 있음)) 각 그룹의 통계를 사용하여 참조 라인에 추가하는 것입니다(모두 스크립팅을 통해).
그래프 예에서 등급이 있는 name1을 찾습니다.
감사해요
Re: 표 요약의 각 요소에 대한 참조선으로 그래프를 그리는 방법안녕 @스핀업 ,
당신이 하고 싶은 일을 완전히 이해하고 있는지 잘 모르겠지만 전체를 스크립트로 작성하는 데 어려움을 겪을 수 있습니다. 잠시 동안 데이터 테이블을 유지하거나 로드하는 경우 별도로 분석을 수행한 다음 데이터 테이블에 저장할 수 있습니다.
전체를 스크립팅하려면 분석을 계속 실행하여 25/75 분위수 등을 결정해야 합니다.
"점수 대 # 시도"를 그래프로 표시한다고 말할 때 "y x x 맞추기"를 수행할 때 점수가 "y"이고 "# 시도"가 "x"라는 의미입니까?
그리고 표 요약이라고 하면 이름과 등급별로 그룹화하면서 점수와 #try의 평균을 찾는다는 뜻인가요? 또는 등급 이름으로 표를 작성하고 점수 및 #try 값의 평균을 찾는다는 의미입니까?
그래도 몇 가지 방법으로 할 수 있습니다. 저는 귀하의 테이블을 JMP로 가져와서 다음과 같이 했습니다(저도 귀하와 같은 방식으로 생각하고 있다고 가정).
이름으로 표 만들기(A, B, C는 # 시도), 이것은 수단을 얻는 데 도움이 되지만 필요한 경우 별도로 스크립트를 작성할 수 있습니다.

이를 가지고 저는 이변량 적합 또는 히스토그램(히스토그램에는 이미 박스 플롯에서 쉽게 사용할 수 있는 사분위수 정보가 있음)과 같은 몇 가지 다른 방법으로 그래프를 그렸습니다. 그런 다음 일반적인 방법으로 참조선을 추가할 수 있습니다.


이 모든 것을 스크립팅하려면 빨간색 핫 버튼을 사용하여 실제 JSL 스크립트로 이동하여 원하는 것을 생성해야 합니다. 하지만 다시 스크립트를 데이터 테이블에 저장하면 데이터 테이블을 열 때마다 녹색 핫 버튼을 클릭하고 빠르게 다시 실행할 수 있습니다.
도움이 되었기를 바랍니다!,
DS