대화형 플롯대화형 보고서를 만드는 방법에 대한 아이디어가 있는 분이 있나요?
보고서에서 각 그래프에 여러 개의 선이 있는 그래프를 포함하고 싶습니다. 창의 왼쪽에 선 목록을 두고 싶습니다. 목록에서 선을 클릭하면 그래프에서 선택한 선이 더 두드러지고 나머지 선은 희미해지기를 원합니다.
데이터 탐색 및 시각화Re: 대화형 플롯왼쪽에 범례를 두는 것은 약간 까다로울 수 있지만 오른쪽이 괜찮다면 기본 그래프 빌더로 충분할 것입니다.

https://www.jmp.com/support/help/en/18.0/#page/jmp/graph-builder.shtml#
Re: 대화형 플롯안녕하세요! 저는 그래프 빌더를 사용하여 여러 그래프를 만들기 위해 for 루프를 사용했습니다. 이제 이 모든 그래프를 단일 시트에 그룹화하고 사용자가 모든 그래프와 함께 상호 작용할 수 있는 대화형 인터페이스를 만들고 싶습니다. 이를 달성할 방법이 있습니까? 감사합니다!
Re: 대화형 플롯기본 그래프 빌더를 사용하는 것은 좋은 아이디어이지만, 모든 그래프를 만든 다음에는 하나씩 아래에 배치하고 싶습니다.
Re: 대화형 플롯좀 더 많은 정보가 필요합니다. 예를 들어 V 목록 상자에 수집한 다음 새 창을 사용하여 표시할 수 있습니다.
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = V List Box();
For(i = 1, i <= 3, i++,
gb_collector << Append(
dt << Graph Builder(
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
)
);
nw = New Window("",
gb_collector
);
For 루프를 활용하고 있다면 스크립팅을 하고 있다고 가정합니다. 스크립팅 가이드(예: https://www.jmp.com/support/help/en/18.0/#page/jmp/examples-of-creating-a-dashboard-from-two-reports.shtml# )를 읽어보셨나요?
Re: 대화형 플롯탭 페이지 상자 방법을 for 루프와 결합하고 싶지만, 작동하지 않습니다.
제가 쓴 대본은 다음과 같습니다.
새 창("내 대시보드",
H 스플리터 박스(
크기(1000, 1000),
// 각 매개변수에 대한 루프
i = 1, i <= N 항목(numPar), i++,
// 모든 배치, 실제 데이터 및 차이의 플롯에 대한 열 상자
col1 = Col Box(""),
col2 = Col Box(""),
col3 = Col Box(""),
// 각 매개변수에 대한 탭 페이지 상자
탭 페이지 상자(
제목(numPar[i] || " vs. 시간 지점"),
// 모든 배치 플롯 생성
gb = 그래프 빌더(
크기(500, 500),
변수(X(:시간 지점 월), Y(:결과), 오버레이(:배치)),
요소(X, Y점)
),
// 로컬 필터: 참조가 있는 cyc에 있는 배치만 배치로 설정하고 다른 모든 배치는 설정하지 않음
gb << 로컬 데이터 필터(
보이지 않는,
필터 추가(열(:구성요소, :배치, :소스 테이블),
여기서(:Component == numPar[i]),
Where(:Batch == {cyc, bat}),
Where(:소스 테이블 == dt_name)
)
),
dt << Select() 지우기,
// 그래프에서 필터 표시를 제거합니다.
gb << 제어판 표시(0),
// 플롯 변경에 대한 보고서
gbb = 보고서(gb)[GraphBuilderBox(1)],
// 선형 회귀 추가
gbb << 요소 추가(1, 1, {유형("적합선"), X, Y, 적합도 신뢰도(0), 방정식(0)}),
// Y축 설정
minval = min(:Result[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 0.95,
maxval = max(:Result[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 1.05,
maxvalts = max(:시간 지점 Months[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc & :소스 테이블 == dt_name | :Batch == bat & :Component == numPar[i] & :소스 테이블 == dt_name)]) * 1.05,
gbb[AxisBox(1)] << min(-0.1),
gbb[AxisBox(1)] << 최대(최대값),
gbb[AxisBox(2)] << min(최소값),
gbb[AxisBox(2)] << 최대(최대값),
gbb[AxisBox(2)] << inc((최대값 - 최소값) / 10),
// Y축 라벨 설정
unitList = 연관 배열(:Result Unit[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) << Remove("") << 키 가져오기,
N개의 항목(unitList) == 1인 경우,
gbb[텍스트 편집 상자(4)] << 텍스트 설정(numPar[i] || " [" || unitList[1] || "]")
,
gbb[텍스트 편집 상자(4)] << 텍스트 설정(numPar[i])
),
// 그래프 제목 설정
gbb[텍스트 편집 상자(1)] << Set text(numPar[i] || " vs. Time Point"),
// 추가
gbba = 보고서(gb),
col1 << 추가(gbba),
< )
)
),
< );
Re: 대화형 플롯Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = Tab Box(<< Set Style("Horizontal Spread"));
For(i = 1, i <= 3, i++,
gb_collector << Add("Title",
dt << Graph Builder(
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
)
);
nw = New Window("",
gb_collector
);Re: 대화형 플롯어떤 jmp 버전을 쓰시나요? jmp에서 작동하나요? 위의 스크립트를 사용해도 예상한 출력이 나오지 않거든요.
Re: 대화형 플롯기대하는 출력이 무엇인지 모르겠고 데이터가 없습니다. 스크립트는 Tab Box를 사용하여 for 루프에서 결과를 수집합니다.

Re: 대화형 플롯위의 스크립트를 실행하면 이 출력이 나옵니다. 당신과는 다릅니다.
Re: 대화형 플롯JMP18에서는 변경된 것 같습니다. JMP17.2에서는 작동하는 것 같습니다.
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = Tab Box(<< Set Style("Horizontal Spread"));
For(i = 1, i <= 3, i++,
tab = Tab Page Box("",
gb = dt << Graph Builder(
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
);
tab << Title("Title " || Char(i));
gb << title(Char(i));
gb_collector << Append(tab)
);
nw = New Window("",
gb_collector
);Re: 대화형 플롯제가 다루고 싶은 또 다른 문제는 긴 제목이 있는 탭이 많을 때(예: 20개) 그래프가 불균형적으로 커져서 명확하게 관찰하기 어렵다는 것입니다. 큰 제목과 탭을 유지하면서 그래프 크기를 더 작은 규모로 조정하고 싶습니다. 그래프를 왼쪽에 배치하고 오른쪽에 빈 공간을 두는 것이 가능할까요?
Re: 대화형 플롯"왼쪽 그래프, 오른쪽 빈 공간"이란 말이 무슨 뜻인지 잘 모르겠습니다. 그래프를 수동으로 만들고, 크기를 조금 조정하고, 스크립트를 복사하면 그래프 크기를 추가하는 방법을 알려줍니다. 탭 상자에는 오버플로 및 스크립팅 인덱스에서 찾을 수 있는 다른 옵션도 있습니다.

Re: 대화형 플롯이 스크린샷처럼 그래프를 배치할 방법이 있는지 알아내려고 합니다. 예를 들어, 첫 번째 그래프를 먼저 배치하고, 그 다음에 다른 두 그래프를 함께 배치하는 거죠.
Re: 대화형 플롯원하는 레이아웃을 얻기 위해 V 목록 상자, H 목록 상자, 탭 상자, 탭 페이지 상자를 다양한 방법으로 결합할 수 있습니다.
스크립팅 가이드 https://www.jmp.com/support/help/en/18.0/#page/jmp/construct-display-boxes-for-new-windows.shtml 에서 많은 정보를 찾을 수 있습니다.
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_expr = Expr(dt << Graph Builder(
Show Control Panel(0),
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
));
nw = New Window("",
V List Box(
gb_expr,
H List Box(
gb_expr,
gb_expr
)
)
);Re: 대화형 플롯이름은 여기(1)에 기본으로 지정됩니다.
dt = Open("$SAMPLE_DATA/Big Class.jmp" );
gb_collector = 탭 상자( "대시보드" );
i = 1, i <= 20, i++에 대하여
// 모든 배치의 플롯을 위한 열 상자
col1 = Col Box( "모든 배치" || Char( i ) );
// 첫 번째 Graph Builder 플롯을 생성합니다.
gb = 식(
dt << 그래프 빌더(
보이지 않는,
변수( X( :weight ), Y( :height ), Overlay( :sex ) ),
요소(점(X, Y, 범례(9)), 적합선(X, Y, 범례(11)))
)
);
col1 << Append(gb);
// 두 개의 Graph Builder 플롯에 대한 열 상자를 만듭니다.
col2 = Col Box( "실제 데이터 " || Char( i ) );
// 두 개의 Graph Builder 플롯을 생성하여 col2에 추가합니다.
j = 1, j <= 2, j++에 대해서
gbb = 지수(
dt << 그래프 빌더(
보이지 않는,
변수( X( :weight ), Y( :height ), Overlay( :sex ) ),
요소(점(X, Y, 범례(9)), 적합선(X, Y, 범례(11)))
)
);
col2 << Append(gbb);
);
// col1과 col2에 대한 탭을 생성하여 gb_collector에 추가합니다.
탭 = 탭 페이지 상자( "뭔가 뭔가 ",
V 목록 상자(
콜1,
H 목록 상자( col2 ) // 두 개의 플롯을 나란히 배치
)
);
gb_collector << 추가(탭);
// gb의 제목 설정
gb << title( "dxfkgbdlk,xfhglihxfd" );
);
gb_collector << Dockable( 1 );
gb_collector << 오버플로 활성화 설정(1);
nw = 새 창( "대시보드",
gb_수집기
);
위의 예를 내 스크립트에 사용하려고 합니다. 하지만 출력이 나오지 않습니다. 내 스크립트는 다음과 같습니다.
현재 데이터 테이블(dt);
dt << 새로운 열("시간점 월", Formula(Round(:시간점 일/30.438), 2));
gb_collector = 탭 상자();
i = 1, i <= N 항목(numPar), i++,
// 모든 배치의 플롯을 위한 열 상자
col1 = Col Box( "" );
// 실제 데이터 플롯을 위한 열 상자
col2 = Col Box( "" );
// 차이 플롯을 위한 열 상자
col3 = Col Box( "" );
//탭 = 탭 페이지 상자("",
gb = dt << 그래프 빌더(
//보이지 않는,
크기(700, 400),
변수(X(:시간 지점 월), Y(:결과), 오버레이(:배치)),
요소(X, Y점)
);
// 로컬 필터: 참조가 있는 cyc에 있는 배치만 배치로 설정하고 다른 모든 배치는 설정하지 않음
gb << 로컬 데이터 필터(
보이지 않는,
필터 추가(열(:구성요소, :배치, :소스 테이블),
여기서(:Component == numPar[i]),
Where(:Batch == {cyc, bat}),
Where(:소스 테이블 == dt_name)
)
);
dt << 선택 취소();
// 그래프에서 필터 표시를 제거합니다.
gb << 제어판 표시(0);
// 플롯 변경에 대한 보고서
gbb = 보고서(gb)[GraphBuilderBox(1)];
// 선형 회귀 추가
gbb << Element(1, 1, {Type("적합선"), X, Y, 적합도 신뢰도(0), 방정식(0)}) 추가
// Y축 설정
minval = min(:Result[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 0.95;
maxval = max(:Result[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 1.05;
maxvalts = max(:시간 지점 월[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc & :소스 테이블 == dt_name | :Batch == bat & :Component == numPar[i] & :소스 테이블 == dt_name)]) * 1.05;
다음 중 하나를 수행하십시오. 축상자(1) << min(-0.1);
gbb[AxisBox(1)] << max(최대값);
gbb[AxisBox(2)] << min(최소값);
gbb[AxisBox(2)] << max(최대값);
gbb[AxisBox(2)] << inc((최대값 - 최소값) / 10);
// Y축 라벨 설정
unitList = 연관 배열(:Result Unit[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) << Remove("") << 키 가져오기;
N개의 항목(unitList) == 1인 경우,
gbb[텍스트 편집 상자(4)] << 텍스트 설정(numPar[i] || " [" || unitList[1] || "]")
,
gbb[텍스트 편집 상자(4)] << 텍스트 설정(numPar[i])
);
// 그래프 제목 설정
gbb[텍스트 편집 상자(1)] << Set text(numPar[i] || " vs. Time Point");
// 추가
//gbba = 보고서(gb),
col1 << Append(gb);
//필터 << 닫기;
gb << 창 닫기;
// 매개변수를 통한 루프 내에서 이제 배치를 통한 루프도 실행 중입니다.
k = 1, k <= N 항목( cyc ), k++,
check = dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name | :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name);
if(N items(check) > 0, // 현재 배치에 대한 매개변수가 존재하는지 확인하기 위한 검사를 생성합니다.
// 기본 플롯 생성
gb = 그래프 빌더(
//보이지 않는,
크기(700, 400),
변수( X( :시간 지점 월 ), Y( :결과 ), 오버레이( :배치 ) ),
요소(점(X, Y), )
);
gb << 로컬 데이터 필터(보이지 않음, 필터 추가(열( :Component, :Batch, :Source Table), Where( :Component == numPar[i] ), Where( :Batch == {cyc[k], bat[k]}), Where( :Source Table == dt_name) ));
dt << 선택 취소();
// 그래프에서 필터 표시를 제거합니다.
gb << 제어판 표시( 0 );
// 플롯 변경에 대한 보고서
gbb = 보고서(gb)[GraphBuilderBox(1)];
// 선형 회귀 추가
gbb << 요소 추가( 1, 1, {Type( "적합선" ), X, Y, 적합도 신뢰도( 0 ), 방정식( 0 )} );
// Y축 설정
minval = min(:Result[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name | :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)])*0.95;
maxval = max(:Result[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name| :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)])*1.05;
maxvalts = max(:시간 지점 월[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name| :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)])*1.05;
다음 중 하나를 수행하십시오. 축상자(1) << min(-0.1);
gbb[AxisBox(1)] << max(최대값);
gbb[AxisBox(2)] << min(최소값);
gbb[AxisBox(2)] << max(최대값);
gbb[AxisBox(2)] << inc((최대값-최소값)/10);
// Y축 라벨 설정
unitList = 연관 배열( :Result Unit[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name | :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)] ) << Remove( "" ) << 키 가져오기;
N개의 항목( unitList )이 1인 경우,
gbb[텍스트 편집 상자( 4 )] << 텍스트 설정( numPar[i] || " [" || unitList[1] || "]" )
);
N개의 항목(단위 목록)이 1이면,
gbb[텍스트 편집 상자( 4 )] << 텍스트 설정( numPar[i] )
);
// 그래프 제목 설정
gbb[텍스트 편집 상자( 1 )] << 텍스트 설정( numPar[i] || " vs. 시간 지점 ");
// 추가
//gbba = 보고서( gbb );
col2 << Append(gbb);
//필터 << 닫기;
gb << 창 닫기;
// 두 번째 플롯 시작
gb2 = 그래프 빌더(
//보이지 않는,
크기(700, 400),
변수( X(시간 지점 월), Y(:차이), 색상(:배치)),
요소(점(X, Y))
);
gb2 << 로컬 데이터 필터(보이지 않음, 필터 추가(열( :Component, :Batch, :소스 테이블), Where( :Component == numPar[i] ), Where( :Batch == cyc[k]), Where( :소스 테이블 == dt5_name)));
dt4 << 선택 취소();
// 그래프에서 필터 표시를 제거합니다.
gb2 << 제어판 표시( 0 );
// 플롯 변경에 대한 보고서
gbb2 = 보고서(gb2)[GraphBuilderBox(1)];
gbb2 << 요소 추가( 1, 1, {Type( "선" ), X, Y} );
// HC 값을 가져옵니다
l_idx = dt4 << dt4:Component == numPar[i] & :Batch == cyc[k]인 행을 가져옵니다.
ul = min(dt4:HC[l_idx]);
if(ul이 누락된 경우),
if(min(:Difference[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)]) == 0,
최소값 = -5;
최대값 = 5,
minval = min(:Difference[dt << 행 가져오기(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)])*0.95;
maxval = max(:Difference[dt << 행 가져오기(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)])*1.05;
),
minval = min(:Difference[dt << 행 가져오기(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)],-ul)*1.05;
maxval = max(:Difference[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)], ul)*1.05;
);
if(!ismissing(ul), //HC 값이 없으면 한계선을 생성하지 않음
gbb2[AxisBox(2)] << 참조 라인 추가(ul,"solid", black, char(round(ul,2)));
gbb2[AxisBox(2)] << 참조 라인 추가(-ul,"solid", black, char(round(-ul,2)));
);
gbb2[AxisBox(2)] << 참조 줄 추가(0,"대시");
gbb2[AxisBox(2)] << min(최소값);
gbb2[AxisBox(2)] << max(최대값);
gbb2[AxisBox(2)] << inc((최대값-최소값)/10);
//추가
//gbba2 = 보고서(gbb2);
col3 << Append(gbba2);
//필터 << 닫기;
gb2 << 창 닫기;
);
);
//);
탭 = 탭 페이지 상자(numPar[i],
V 목록 상자(
열 1
H List Box( col2, col3 ) // 두 개의 플롯을 나란히 배치
)
);
탭 << 제목(numPar[i]);
//gb << title(Char(1));
gb_collector << 추가(탭);
);
gb_collector << Dockable( 1 );
gb_collector << 오버플로 활성화 설정(1);
nw = 새 창("내 대시보드",
gb_수집기
);
어떻게 하는지 알려주실 수 있나요?
Re: 대화형 플롯한 걸음 물러나서 원하는 바를 설명해야 합니다. 가장 좋은 경우, 예제 데이터를 제공하거나 JMP 샘플 데이터 세트 중 하나를 사용하여 가능한 가장 작은 예제에서 원하는 바를 설명하세요.
Re: 대화형 플롯Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = Tab Box("Dashboard");
For(i = 1, i <= 20, i++,
// Column box for plot of all batches
col1 = Col Box("All Batches" || Char(i));
// Create the first Graph Builder plot
gb = Expr(
dt << Graph Builder(
invisible,
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
);
col1 << Append(gb);
// Create a column box for the two Graph Builder plots
col2 = Col Box("Actual Data " || Char(i));
// Create and append two Graph Builder plots to col2
For(j = 1, j <= 2, j++,
gbb = Expr(
dt << Graph Builder(
invisible,
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
);
col2 << Append(gbb);
);
// Create a tab for col1 and col2 and append it to gb_collector
tab = Tab Page Box(
" Something Something ",
V List Box(
col1,
H List Box(col2) // Placing the two plots next to each other
)
);
gb_collector << Append(tab);
// Set title for gb
gb << title("Title");
);
gb_collector << Dockable(1);
gb_collector << Set Overflow Enabled(1);
nw = New Window("Dashboard", gb_collector);
Here is the example that i use and i am trying to follow the same structure in my own script.Re: 대화형 플롯현재 데이터 테이블(dt);
dt << 새로운 열("시간점 월", Formula(Round(:시간점 일/30.438), 2));
gb_collector = 탭 상자();
i = 1, i <= N 항목(numPar), i++,
// 모든 배치의 플롯을 위한 열 상자
col1 = Col Box( "" );
// 실제 데이터 플롯을 위한 열 상자
col2 = Col Box( "" );
// 차이 플롯을 위한 열 상자
col3 = Col Box( "" );
//탭 = 탭 페이지 상자("",
gb = dt << 그래프 빌더(
//보이지 않는,
크기(700, 400),
변수(X(:시간 지점 월), Y(:결과), 오버레이(:배치)),
요소(X, Y점)
);
// 로컬 필터: 참조가 있는 cyc에 있는 배치만 배치로 설정하고 다른 모든 배치는 설정하지 않음
gb << 로컬 데이터 필터(
보이지 않는,
필터 추가(열(:구성요소, :배치, :소스 테이블),
여기서(:Component == numPar[i]),
Where(:Batch == {cyc, bat}),
Where(:소스 테이블 == dt_name)
)
);
dt << 선택 취소();
// 그래프에서 필터 표시를 제거합니다.
gb << 제어판 표시(0);
// 플롯 변경에 대한 보고서
gbb = 보고서(gb)[GraphBuilderBox(1)];
// 선형 회귀 추가
gbb << Element(1, 1, {Type("적합선"), X, Y, 적합도 신뢰도(0), 방정식(0)}) 추가
// Y축 설정
minval = min(:Result[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 0.95;
maxval = max(:Result[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 1.05;
maxvalts = max(:시간 지점 월[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc & :소스 테이블 == dt_name | :Batch == bat & :Component == numPar[i] & :소스 테이블 == dt_name)]) * 1.05;
다음 중 하나를 수행하십시오. 축상자(1) << min(-0.1);
gbb[AxisBox(1)] << max(최대값);
gbb[AxisBox(2)] << min(최소값);
gbb[AxisBox(2)] << max(최대값);
gbb[AxisBox(2)] << inc((최대값 - 최소값) / 10);
// Y축 라벨 설정
unitList = 연관 배열(:Result Unit[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) << Remove("") << 키 가져오기;
N개의 항목(unitList) == 1인 경우,
gbb[텍스트 편집 상자(4)] << 텍스트 설정(numPar[i] || " [" || unitList[1] || "]")
,
gbb[텍스트 편집 상자(4)] << 텍스트 설정(numPar[i])
);
// 그래프 제목 설정
gbb[텍스트 편집 상자(1)] << Set text(numPar[i] || " vs. Time Point");
// 추가
//gbba = 보고서(gb),
col1 << Append(gb);
//필터 << 닫기;
gb << 창 닫기;
// 매개변수를 통한 루프 내에서 이제 배치를 통한 루프도 실행 중입니다.
k = 1, k <= N 항목( cyc ), k++,
check = dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name | :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name);
if(N items(check) > 0, // 현재 배치에 대한 매개변수가 존재하는지 확인하기 위한 검사를 생성합니다.
// 기본 플롯 생성
gb = 그래프 빌더(
//보이지 않는,
크기(700, 400),
변수( X( :시간 지점 월 ), Y( :결과 ), 오버레이( :배치 ) ),
요소(점(X, Y), )
);
gb << 로컬 데이터 필터(보이지 않음, 필터 추가(열( :Component, :Batch, :Source Table), Where( :Component == numPar[i] ), Where( :Batch == {cyc[k], bat[k]}), Where( :Source Table == dt_name) ));
dt << 선택 취소();
// 그래프에서 필터 표시를 제거합니다.
gb << 제어판 표시( 0 );
// 플롯 변경에 대한 보고서
gbb = 보고서(gb)[GraphBuilderBox(1)];
// 선형 회귀 추가
gbb << 요소 추가( 1, 1, {Type( "적합선" ), X, Y, 적합도 신뢰도( 0 ), 방정식( 0 )} );
// Y축 설정
minval = min(:Result[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name | :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)])*0.95;
maxval = max(:Result[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name| :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)])*1.05;
maxvalts = max(:시간 지점 월[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name| :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)])*1.05;
다음 중 하나를 수행하십시오. 축상자(1) << min(-0.1);
gbb[AxisBox(1)] << max(최대값);
gbb[AxisBox(2)] << min(최소값);
gbb[AxisBox(2)] << max(최대값);
gbb[AxisBox(2)] << inc((최대값-최소값)/10);
// Y축 라벨 설정
unitList = 연관 배열( :Result Unit[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name | :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)] ) << Remove( "" ) << 키 가져오기;
N개의 항목( unitList )이 1인 경우,
gbb[텍스트 편집 상자( 4 )] << 텍스트 설정( numPar[i] || " [" || unitList[1] || "]" )
);
( N개의 항목( unitList ) != 1인 경우,
gbb[텍스트 편집 상자( 4 )] << 텍스트 설정( numPar[i] )
);
// 그래프 제목 설정
gbb[텍스트 편집 상자( 1 )] << 텍스트 설정( numPar[i] || " vs. 시간 지점 ");
// 추가
//gbba = 보고서( gbb );
col2 << Append(gbb);
//필터 << 닫기;
gb << 창 닫기;
// 두 번째 플롯 시작
gb2 = 그래프 빌더(
//보이지 않는,
크기(700, 400),
변수( X(시간 지점 월), Y(:차이), 색상(:배치)),
요소(점(X, Y))
);
gb2 << 로컬 데이터 필터(보이지 않음, 필터 추가(열( :Component, :Batch, :소스 테이블), Where( :Component == numPar[i] ), Where( :Batch == cyc[k]), Where( :소스 테이블 == dt5_name)));
dt4 << 선택 취소();
// 그래프에서 필터 표시를 제거합니다.
gb2 << 제어판 표시( 0 );
// 플롯 변경에 대한 보고서
gbb2 = 보고서(gb2)[GraphBuilderBox(1)];
gbb2 << 요소 추가( 1, 1, {Type( "선" ), X, Y} );
// HC 값을 가져옵니다
l_idx = dt4 << dt4:Component == numPar[i] & :Batch == cyc[k]인 행을 가져옵니다.
ul = min(dt4:HC[l_idx]);
if(ul이 누락된 경우),
if(min(:Difference[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)]) == 0,
최소값 = -5;
최대값 = 5,
minval = min(:Difference[dt << 행 가져오기(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)])*0.95;
maxval = max(:Difference[dt << 행 가져오기(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)])*1.05;
),
minval = min(:Difference[dt << 행 가져오기(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)],-ul)*1.05;
maxval = max(:Difference[dt << 행 가져오기 where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)], ul)*1.05;
);
if(!ismissing(ul), //HC 값이 없으면 한계선을 생성하지 않음
gbb2[AxisBox(2)] << 참조 라인 추가(ul,"solid", black, char(round(ul,2)));
gbb2[AxisBox(2)] << 참조 라인 추가(-ul,"solid", black, char(round(-ul,2)));
);
gbb2[AxisBox(2)] << 참조 줄 추가(0,"대시");
gbb2[AxisBox(2)] << min(최소값);
gbb2[AxisBox(2)] << max(최대값);
gbb2[AxisBox(2)] << inc((최대값-최소값)/10);
//추가
//gbba2 = 보고서(gbb2);
col3 << Append(gbba2);
//필터 << 닫기;
gb2 << 창 닫기;
);
);
//);
탭 = 탭 페이지 상자(numPar[i],
V 목록 상자(
열 1
H List Box( col2, col3 ) // 두 개의 플롯을 나란히 배치
)
);
탭 << 제목(numPar[i]);
//gb << title(Char(1));
gb_collector << 추가(탭);
);
gb_collector << Dockable( 1 );
gb_collector << 오버플로 활성화 설정(1);
nw = 새 창("내 대시보드",
gb_수집기
);
제 대본은 다음과 같습니다.
첨부된 것은 8개의 그래프가 포함된 현재 대시보드의 스크린샷입니다. 이러한 그래프를 구성하기 위한 구체적인 요구 사항은 다음과 같습니다.
- 첫 번째 그래프 유지 : 첫 번째 그래프를 그대로 유지하고 싶습니다.
- 두 번째 그래프 제거 : 두 번째 그래프는 대시보드에서 제거해야 합니다.
- 마지막 6개 그래프를 페어링합니다 . 마지막 6개 그래프는 각 쌍이 나란히 표시되도록 페어링해야 합니다. 구체적으로 그래프는 다음과 같이 구성해야 합니다.
- 세 번째와 네 번째 그래프는 나란히 표시되어야 합니다.
- 다섯 번째와 여섯 번째 그래프는 나란히 표시되어야 합니다.
- 일곱 번째와 여덟 번째 그래프는 나란히 표시되어야 합니다.
요약하자면, 최종 레이아웃은 첫 번째 그래프가 나오고 그 다음에 세 쌍의 그래프가 나오며, 각 쌍은 나란히 표시됩니다.
Re: 대화형 플롯그 두 스크립트는 완전히 다릅니다(JSL 코드에는 JSL 포맷을 사용하세요. 읽기가 훨씬 쉽습니다). Col Box를 무엇에 사용하시나요? (i와 j)를 무엇에 반복하시나요? 각 그래프에 어떤 정보가 포함되는지 결정하는 것은 무엇인가요? 서로 상호 작용해야 하나요?