텍스트 주석 크기 및 텍스트 배치 제어: 도움이 필요합니다.모두,
플롯에 여러 개의 텍스트 주석을 추가해야 합니다.
두 줄은 한 줄이지만 길이가 다릅니다. 그래서 고정 크기(0)를 사용하여 텍스트에 맞게 레이블 길이를 조정해야 합니다.
그런데 이렇게 하면 세로 크기가 조정되면서 텍스트가 너무 높게 배치되어서 왠지 좀 거슬립니다(왼쪽 그림). 고정 크기(1)로 설정하면 레이블 크기를 직접 조절할 수 있고 텍스트 배치도 괜찮아 보입니다(오른쪽 그림). 하지만 텍스트 길이가 다르면 레이블이 너무 길거나, 텍스트가 레이블 크기를 초과하면 "고정 크기(0)"로 고정되어 보기가 매우 안 좋습니다.


라벨 내에서 텍스트 위치를 조정하고 고정 크기(0)를 사용하는 방법을 아시나요?
<< Vertical Alignment("bottom")이 작동하지 않습니다.
코드는 다음과 같습니다.
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = bivariate( y( :weight ), x( :height ) );
rbiv = biv << report;
taHeight = 20;
ta1 = rbiv << Add Text Annotation();
ta2 = rbiv << Add Text Annotation();
ta1 << Text( "We need to discuss this at the next meeting." );
ta1 << Text Box( {70, 80, 350, 80+taHeight} );
ta2 << Text( "We need to discuss this at the next " );
ta2 << Text Box( {70, 120, 350, 120+taHeight} );
{ta1, ta2} << Background Color( "Light Yellow" ) << Text Color( "red" )/*<
<SET wrap=""></SET>
<BR /> <BR />
<LINGO-LABS id="lingo-labs-913210" slang="en-US" mode="CREATE">
<LINGO-LABEL>자동화 및 스크립팅</LINGO-LABEL>
</LINGO-LABS>
Re: 텍스트 주석 크기 및 텍스트 배치 제어: 도움이 필요합니다.텍스트 상자의 크기를 직접 계산하지 않는 한 텍스트 주석에서 이를 제어할 수 있는지 확실하지 않습니다.
그래픽 스크립트를 활용할 수 있을까요?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
biv = dt << bivariate(y(:weight), x(:height));
rbiv = biv << report;
fb = rbiv[FrameBox(1)];
fb << Add Graphics Script(
Back Color("Light Yellow");
Text Color("Red");
Text(Erased, {50, 150}, "We need to discuss this at the next meeting.");
Text(Erased, {50, 135}, "We need to discuss this at the next");
);
Re: 텍스트 주석 크기 및 텍스트 배치 제어: 도움이 필요합니다.Add Graphics Script의 문제점은 텍스트 위치가 플롯의 실제 좌표로 지정된다는 것입니다. 제 경우에는 1e-07부터 9000 이상까지 어떤 좌표든 가능합니다. 
원하는 위치의 값을 계산하는 함수를 만드는 데 관심이 있는데, 첫 번째 예시처럼 텍스트 주위에 테두리와 프레임을 추가할 수 있어야 합니다. 그래프가 꽤 복잡할 것 같아서, 빠르게 읽고 버릴 수 있도록 시각적으로 구분해야 합니다.
Re: 텍스트 주석 크기 및 텍스트 배치 제어: 도움이 필요합니다.좋은 생각이 났어요.
먼저 고정 크기(0)로 텍스트 주석을 그린 다음 길이를 측정한 다음 고정 크기(1)로 변경하고 측정된 너비와 원하는 높이를 수동으로 설정하면 어떻게 되나요?
문제는 << Get Size()가 잘못된 값을 반환한다는 것입니다.
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = bivariate( y( :weight ), x( :height ) );
rbiv = biv << report;
taHeight = 40;
ta1 = rbiv << Add Text Annotation();
ta2 = rbiv << Add Text Annotation();
ta1 << Text( "We need to discuss this at the next meeting." );
ta1 << Text Box( {70, 80, 350, 80+taHeight} );
ta2 << Text( "We need to discuss this at the next " );
ta2 << Text Box( {70, 120, 350, 120+taHeight} );
{ta1, ta2} << Background Color( "Light Yellow" ) << Text Color( "red" )/*<
<SET wrap=""></SET>
<P>다음을 생성합니다.</P> //:*/
Show(ta1_x, ta2_x);
/*:
ta1_x = 328;
ta2_x = 328;
그래프에서 라벨의 길이가 눈에 띄게 다른데도 말이죠. 제가 뭔가 놓치고 있는 걸까요?
Re: 텍스트 주석 크기 및 텍스트 배치 제어: 도움이 필요합니다.<를 사용해 보세요 <>
Re: 텍스트 주석 크기 및 텍스트 배치 제어: 도움이 필요합니다.새 창에서 텍스트 상자를 사용하여 크기 검사를 수행할 수도 있습니다.
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = bivariate( y( :weight ), x( :height ) );
rbiv = biv << report;
taHeight = 20;
ta1 = rbiv << Add Text Annotation();
ta2 = rbiv << Add Text Annotation();
nw = new window("", << Window View("Invisible"),
tb1 = Text Box("We need to discuss this at the next meeting."),
tb2 = Text Box("We need to discuss this at the next ")
);
w1 = tb1 << Get Size;
w2 = tb2 << Get Size;
nw << close window;
ta1 << Text( "We need to discuss this at the next meeting." );
ta1 << Text Box( {70, 80, w1[1]+20+70, 80+taHeight});
ta2 << Text( "We need to discuss this at the next " );
ta2 << Text Box( {70, 120, w2[1]+20+70, 120+taHeight});
{ta1, ta2} << Background Color( "Light Yellow" ) << Text Color( "red" )/*<
<SET wrap=""></SET>
Re: 텍스트 주석 크기 및 텍스트 배치 제어: 도움이 필요합니다.팁을 주셔서 감사합니다. 이제 라벨 크기를 설정하고 가져올 수 있게 됐습니다.
문제는 JSL이 줄 단위로 처리하지 않고, 대신 각 속성에 대한 최종 상태를 별도로 계산한 다음 적용한다는 것입니다.
좋다:
...
...
ta1<
<FIXED size=""></FIXED>
<P>그러면 너비는 처음에 설정한 대로 유지됩니다.</P> <CODE class=" language-jsl">ta1 << Text( "We need to discuss this at the next meeting." );
ta1 << Text Box( {70, 80, 350, 80+taHeight} );
ta2 << Text( "We need to discuss this at the next " );
ta2 << Text Box( {70, 120, 350, 120+taHeight} );
Wait(0.5)를 추가하면 이 문제를 극복하는 데 도움이 됩니다.
최종 스크립트는 다음과 같습니다.
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = bivariate( y( :weight ), x( :height ) );
rbiv = biv << report;
taHeight = 40;
ta1 = rbiv << Add Text Annotation();
ta2 = rbiv << Add Text Annotation();
ta1 << Text( "We need to discuss this at the next meeting." );
ta1 << Text Box( {70, 80, 350, 80+taHeight} );
ta2 << Text( "We need to discuss this at the next " );
ta2 << Text Box( {70, 120, 350, 120+taHeight} );
{ta1, ta2} << Background Color( "Light Yellow" ) << Text Color( "red" )<
<FIXED size=""></FIXED> <BR />
Re: 텍스트 주석 크기 및 텍스트 배치 제어: 도움이 필요합니다.이것도 작동합니다. 주관적으로는 제 해결책보다 더 빠릅니다. 디버깅 도구로 측정해 보겠습니다.
Re: 텍스트 주석 크기 및 텍스트 배치 제어: 도움이 필요합니다.Wait(0)을 설정하면 속도가 빨라집니다. 이제 실제 대기가 발생하지만 화면은 다시 그려집니다.
Re: 텍스트 주석 크기 및 텍스트 배치 제어: 도움이 필요합니다.괜찮아요, 효과가 있어요.
루프 전:
taList = {};
루프 내부:
Insert Into(taList, ta);
루프 이후:
Wait(0);
taList << Fixed Size(1);
For Each({height, index}, taList << Get Height(),
taList[index] << Set Height(height*0.93)
);
이제 문제는 실제 시나리오에서 이를 구현할 때, 여러 개의 텍스트 주석이 있는 여러 개의 플롯이 있는 경우, 두 레벨 루프를 통해 각 주석에 대해 이 트릭을 수행하는 것은 너무 느리다는 것입니다.
텍스트 주석 목록을 만들어보았습니다.
taList={};
그리고 루프 내부에서 현재 ta를 목록에 추가합니다.
Insert Into(taList, ta);
루프의 끝에는 다음이 있습니다.
taList
/*:
{DisplayBox[gtext], DisplayBox[gtext],......}
하지만 이 목록이나 개별 회원에 대한 작업은 작동하지 않습니다.
어떤 아이디어가 있나요? 제 아이디어는 다음과 같습니다.
1. Context Box를 사용하여 다른 ta 사이의 변수를 분리해보세요.
2. 어떻게든 보고서에서 주석을 끌어오지만 XML을 끌어올 때(<