JSL/JMP를 통한 R-플롯아래에 보이는 스크립트가 있는데, R에서 간단한 계산을 하고 JSL에서 플롯을 보고 싶습니다. JSL에서 두 플롯을 표시할 수 없습니다. 아래 코드를 실행하면 플롯 1이 닫히고 플롯 2만 표시됩니다. 여기에 설명된 것을 사용해 보았지만( https://community.jmp.com/t5/JMPer-Cable/Getting-started-with-the-JMP-to-R-Interface/ba-p/43920 ) 작동하지 않습니다. 간단한 명령일 수 있지만 JSL을 처음 접했습니다. 도와주시면 감사하겠습니다. FYI 저는 JMP 17.2를 사용합니다.
이름은 여기(1)에 기본으로 지정됩니다.
Include("Dialog_script.jsl"); // 선택된 X 및 Y 열을 가져오기 위해 대화상자를 로드합니다.
dt = Current Data Table(); // 현재 데이터 테이블을 가져옵니다.
// 데이터 테이블에서 선택된 X 및 Y 열을 가져옵니다.
xCol = Column(dt, xColName[1]);
yCol = Column(dt, yColName[1]);
// 열이 존재하는지 확인
xCol == Empty() | yCol == Empty()인 경우,
Throw("오류: 선택한 열이 데이터 테이블에 없습니다.");
);
// xCol과 yCol에서 값을 추출합니다.
xValues = xCol << Get Values; // xCol의 값을 가져옵니다.
yValues = yCol << Get Values; // yCol의 값을 가져옵니다.
// R로 전송되는 값을 표시합니다(디버깅용)
표시(x값);
yValues를 표시합니다.
// R 연결 초기화
R 초기화();
// xCol과 yCol의 값을 숫자형 벡터로 R에 전송합니다.
R Send(xValues);
R Send(yValues);
// 외부 R 스크립트 실행
R 파일 제출( "C:/Users/NDS/Data_Ana.R" );
// 플롯 검색
R 제출( "print(plot1)" );
R 제출( "print(plot2)" );
// R 연결을 종료합니다
//R 항();
자동화 및 스크립팅데이터 탐색 및 시각화윈도우Re: JSL/JMP를 통한 R-플롯당신이 보고 있는 것은 플롯 2가 플롯 1을 즉시 대체하는 것 같습니다. 이미지를 캡처하거나 새 JMP 창에 이미지를 표시하는 Wait()나 코드가 개입하지 않기 때문입니다. R의 플롯()을 실행하면 JMP 창이 아닌 R 창이 나타나므로 두 번째 플롯 명령을 실행하면 첫 번째 플롯을 덮어씁니다. 참조한 링크에서 R Get Graphics() 섹션을 참조하세요.
다음과 같은 것을 시도해 보세요
...
R Submit("print(plot1)");
New Window("Plot 1", Picture Box( R Get Graphics(png) ) );
R Submit("print(plot2)");
New Window("Plot 2", Picture Box( R Get Graphics(png) ) );
...
JMP 스크립팅 인덱스의 예를 살펴보셨나요? 도움말 메뉴 아래에 있습니다. 아래 스크립트는 스크립팅 인덱스 'R Get Graphics'에서 가져왔습니다.
Names Default To Here( 1 );
R Init();
R Submit( "plot(1:10)" );
plot = R Get Graphics( png );
New Window( "Plot", Picture Box( plot ) );
R Term();
Re: JSL/JMP를 통한 R-플롯안녕하세요 폴, 답변 감사합니다. 저는 R 대신 Python에 대해서만 같은 과정을 반복하려고 합니다.
그리고 JSL은 올바른 그림을 그리는 대신 Python에서 마지막으로 정의된 플롯을 계속 로드합니다.
plt.show(plt.figure(plot1))은 Python에서는 작동하지만 아래 코드를 JSL로 사용하면:
plot1 = Picture Box(Python Get Graphics("png","plt.show(plt.figure(plot1)"));
그러면 JSL은 마지막으로 정의된 플롯을 계속 사용합니다.
제가 잘못 알고 있는 점이 무엇인지 알려주시겠어요?
Re: JSL/JMP를 통한 R-플롯먼저, 스크립팅 인덱스의 설명서에서, 구문: image = Python Get Graphics(format);
두 번째 매개변수는 없습니다. 스크립팅 인덱스 설명은 다음과 같습니다. 형식 매개변수로 지정된 그래픽 형식으로 Python 그래프 표시 창에 기록된 마지막 그래픽 객체를 반환합니다.
둘째, JMP 18 이전의 JMP를 사용해야 합니다.
Python Get Graphics(png);는 18에서 더 이상 사용되지 않으며 JMP 19 개발 빌드에서 이미 제거되었습니다. JMP 18에서는 값을 반환하지 않고 대신 경고 대화 상자를 표시합니다. 모든 버전의 JMP에서 적절한 방법은 Python 코드가 이미지를 파일에 저장하는 것입니다 . 그런 다음 파일을 Open()하여 JSL Picture Box()에 전달합니다. Python Get Graphics()에 대한 JMP 18 스크립팅 인덱스는 해결 방법에 대한 완전한 예를 제공합니다.
plt.show()를 수행하는 대신
당신은 해야 합니다:
# save image to location of your choosing
plt.savefig( jmp.TEMP + 'get_graphics_img.png') # JMP 18+
# or ... savefig( '/tmp/get_graphics_img.png') before JMP 18 (macOS).
그런 다음 JSL에서: 또는 Python에서 jmp.run_jsl(''' ... '''')를 통해
// plot = Python Get Graphics( png ); // DEPRECATED
pngJMP = New Window( "Plot", Picture Box( Open( "$TEMP/get_graphics_img.png", png ) ) );
Python Submit( "plt.close()" );
rc = Delete File( "$TEMP/get_graphics_img.png" );
또 다른 문제가 있습니다. 특히 Mac에서 실행하는 경우 matplotlib과 JMP는 matplotlib이 대화형으로 시작되면 창 이벤트 루프에 대한 제어권을 놓고 싸웁니다. 화면에 표시된 마지막 matplotlib 창을 닫으면 JMP를 종료할 수 있습니다. 이는 matplotlib 백엔드에 따라 다르지만 macOS에서는 특히 까다롭습니다.