<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />JMP 11에서는 사용자가 행 상태를 정의하는 그룹화 열을 선택하여 범례를 사용자 정의할 수 있는 플로팅 응용 프로그램을 작성하고 있습니다. 이렇게 하려면 이전 범례를 삭제하고(상위 테두리 상자를 삭제하여) 새 범례를 추가해야 합니다.그러나 자동 재계산이 이변량 또는 가변성 플랫폼에서 설정되면(다른 플랫폼을 테스트하지 않음) 이로 인해 새 범례에 추가로 이전 범례의 복사본이 다시 표시된다는 사실을 발견했습니다. 하나는 FrameBox<
또한 "범례가 있는 창 만들기" 옵션을 사용하여 데이터 테이블에서 열별로 <<색상을 사용한 다음 범례(strincolbox 자식이 있는 테이블 상자)를 플롯에 직접 삽입하는 방법을 살펴보았지만 이렇게 하면 범례가 손실됩니다. 행 선택 기능이 있고 다시 추가할 수 없는 것 같습니다.
그래서 나는 그것을 가지고 많이 놀았고 결국 내장 데이터 세트 중 하나를 사용하여 이 동작을 재현할 수 있었습니다.다음 코드는 일종의 메모리 누수를 일으켜 JMP를 중단시킵니다.
버그를 재현하는 방법은 다음과 같습니다.
(1) 자동 재계산이 1로 설정된 창 안에 플랫폼을 만듭니다.
(2) 일부 범례 추가
(3) 일부 행 제외
(4) 다른 범례를 추가합니다.. 원래 범례 중 하나 또는 둘 모두를 삭제한 후에도 JMP가 중지됩니다.
이 버그는 무한 메모리 누수를 통해 작동하는 jmp의 메모리 사용량(~10MB/s)이 점진적으로 증가하는 것으로 나타납니다.
이 버그는 테이블의 모든 행에 대해 제외 상태를 0으로 설정하여 방지할 수 있습니다(예: 각 행에 대해(Excluded(RowState()) = 0).
자동 재계산에 의해 켜진 또 다른 단점은 범례가 생성된 후 삭제되기 전에 강제 시간 지연이 없는 한 범례가 삭제되지 않는다는 사실입니다.자동 재계산을 0으로 설정하면 문제 없이 삭제됩니다.
//충돌하는 코드
여기에 기본 이름( 1 );
Try(CLose(dt,nosave));
dt = Open( "$SAMPLE_DATA/Big Class.jmp",invisible );
dt<<행 상태 지우기;
obj = NewWindow("test",biv_container = HListbox(biv = Bivariate( Y( :weight ), X( :height ),Automatic Recalc(1))));
/*
data_filter_container = ScrollBox(Size(200,500),data_filter = dt << Data Filter( Add Filter( columns( :Sex, :Age, :Name, :Height, :Weight ) )));
data_filter<<모드( 선택( 1 ), 표시( 1 ), 포함( 1 ) );
obj[OutlineBox("키에 따른 무게의 이변량 맞춤")]<
obj[OutlineBox("높이에 따른 무게의 이변량 맞춤")][FrameBox(1)]<
obj[OutlineBox("키에 따른 무게의 이변량 맞춤")][FrameBox(1)]<
obj[OutlineBox("높이에 따른 무게의 이변량 맞춤")][FrameBox(1)]<<마커 크기(6);
dt<
//Show(각 행에 대해(Excluded(RowState()) = 0));
//dt<
wait(0.1);//색상 범례를 삭제하는 데 필요한 강제 시간 지연
obj[OutlineBox("키에 따른 무게의 이변량 맞춤")][BorderBox(2)]<<삭제;
obj[OutlineBox("높이에 따른 무게의 이변량 맞춤")][FrameBox(1)]<Re: 자동 재계산(1)으로 인해 상위 테두리 상자를 삭제한 후 이전 범례가 다시 나타납니다.
그래서 간단한 해결 방법을 찾았습니다. 문제의 플랫폼 개체에 대한 자동 재계산을 해제하고(<<선택한 테이블에서 스크립터블 개체 가져오기 사용) 범례를 업데이트한 다음 자동 재계산을 다시 켭니다.이상한 점은 자동 재계산이 켜져 있고 범례가 반복적으로 추가 및 삭제된 이변량에서 더미 스크립트를 사용하여 이 버그를 재현할 수 없다는 것입니다.