Y축을 로그 스케일로 스크립팅안녕하세요,
누적된 데이터를 사용하여 여러 개의 히스토그램을 만드는 스크립트가 있습니다. 히스토그램에 사용된 y축은 누적 데이터 열:Data이고, 히스토그램에 사용된 x축은 누적 데이터 열 레이블:화학 화합물입니다. 그런 다음 페이지(:샘플 ID)를 사용하여 그래프를 샘플당 하나의 그래프로 분리합니다. 스크립트를 사용하는 데이터 세트에 따라 샘플이 2개일 수도 있고 샘플이 100개일 수도 있습니다. 내 그래프는 잘 작동하지만 y축을 로그 스케일로 설정하고 싶습니다. 이를 위해 코드를 삽입하는 여러 가지 방법을 시도했지만, 내가 작업한 대부분은 로그 규모의 그래프 1개였고 나머지는 모두 선형이었습니다. 코드를 첨부했습니다. 일종의 작업을 수행하는 부분은 'ScaleBox (2)'입니다.첫 번째 그래프를 로그로 변경하지만 나머지 척도는 선형으로 유지합니다. 'ScaleBox' 다음에 (2)를 (3)으로 변경하면 그룹의 두 번째 그래프는 로그로 변경되고 다른 그래프는 선형으로 유지됩니다. 'ScaleBox' 뒤의 (#)을 모두 제거하면 아무 것도 로그에 기록되지 않습니다. 또한 변수 영역에 'Left Y Log Scale (1)'을 삽입하려고 시도했지만 아무것도 삽입하지 않았습니다.
스크립트와 함께 실행할 데이터 세트를 첨부했습니다. 이에 대한 도움을 주시면 감사하겠습니다!
감사합니다,
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :Chemical Compound ), Y( :Data ), Page( :SampleID ) ),
Elements( Bar( X, Y, Legend( 10 ) ) ),
SendToReport(
Dispatch(
{},
"Data",
ScaleBox (2),
{Scale( "Log" ), Format( "Best", 10 ), Min( 0.01 ), Max( 80 ), Inc( 1 ),
Minor Ticks( 1 )}
),
Dispatch( {}, "400", LegendBox, {Set Title( "" )} ),
)
);Re: Y축을 로그 스케일로 스크립팅하기안녕하세요!
나는 로그 스케일 그래프 작성 요구 사항에 대해 이 솔루션을 사용해 왔습니다. 잘 작동합니다. 그러나 많은 수의 샘플(예: 50개 이상)을 그래프로 표시하려는 경우 오류가 발생합니다(아래 참조). 전에 이런 일을 겪은 사람이 있나요? 'wait();'를 추가해 보았습니다. 내 코드에 시간이 더 필요하다고 생각하기 전후와 다른 영역에서. 50개 미만의 샘플에서는 잘 작동하지만 그 이상에서는 오류가 발생합니다.
문서의 깊이가 너무 높습니다. 256 XML_PARSE_HUGE 옵션을 사용하세요.
'Xpath' 액세스 또는 평가 시 Xpath( "//ScaleBox[@charID='Rel TEQ']" ) /*###*/
여기 내 코드가 있습니다.
dtstacked3:Parameter3 << set property( "Row Order Levels", 1 );
dtstacked3:Sample ID << set property ("Row Order Levels",1);
gb3 = dtstacked3 << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :Parameter3 ), Y( :Rel TEQ ), Page( :Sample ID ), Color( :Rel TEQ 2 ) ),
Elements( Bar( X, Y, Legend( 6 ) ) ),
SendToReport(
Dispatch( {}, "400", ScaleBox, {Legend Model( 6, Properties( 0, {gradient(
{Color Theme(
{"Paired Copy 2 2502", 8193, {{254, 207, 132}, {254, 207,
132}, {254, 207, 132}, {254, 207, 132}, {254, 207, 132},
{254, 207, 132}, {114, 171, 187}, {114, 171, 187}, {114,
171, 187}, {114, 171, 187}, {114, 171, 187}}}
), Scale Values( [0 1] ), Width( 12 ), Discrete Colors( 1 )}
)}) )} ),
Dispatch( {}, "400", LegendBox, {Set Title( "" )} )
)
);
xx3 = gb3 << Xpath("//ScaleBox[@charID='Rel TEQ']");
xx3 << {Scale("Log"), Format("Best", 10), Min(0.1), Max(80), Inc(1), Minor Ticks(1)};
gb3 << on close( Close( dtstacked3, nosave ) );감사해요!
레이시
Re: Y축을 로그 스케일로 스크립팅하기이 솔루션을 제공해 주셔서 감사합니다! 좀 더 확인해 보겠습니다.
Re: Y축을 로그 스케일로 스크립팅하기나는 xpath가 이것에 사용될 수 있다는 것을 몰랐습니다.좋은 깨끗한 솔루션!
Re: Y축을 로그 스케일로 스크립팅하기저는 XPath()를 사용하는 것을 좋아합니다. 단일 메시지는 발견된 모든 개체에 적용됩니다. 아래 스크립트의 마지막 두 줄을 참조하세요.JSL Companion 2판 6장에는 Xpath() 및 Find()에 대한 섹션과 샘플 스크립트가 있습니다. 스크립팅 인덱스 > 표시 상자 > xpath 검색에서 간단한 예를 찾을 수 있습니다.XPath 구문 및 기능에 대해 자세히 알아보려면 여기
< https://www.tutorialspoint.com/xpath/xpath_quick_guide.htm >
gb = Graph Builder(
Show Control Panel( 0 ),
Variables( X( :Chemical Compound ), Y( :Data ), Page( :SampleID ) ),
Elements( Bar( X, Y, Legend( 10 ) ) ),
SendToReport(
// Dispatch(
// {},
// "Data",
// ScaleBox (2),
// {Scale( "Log" ), Format( "Best", 10 ), Min( 0.01 ), Max( 80 ), Inc( 1 ),
// Minor Ticks( 1 )}
// ),
Dispatch( {}, "400", LegendBox, {Set Title( "" )} ),
)
);
xx =gb << Xpath( "//ScaleBox[@charID='Data']");
xx << {Scale( "Log" ), Format( "Best", 10 ), Min( 0.01 ), Max( 80 ), Inc( 1 ), Minor Ticks(1) };
Re: Y축을 로그 스케일로 스크립팅하기안타깝게도 각 그래프 페이지에 로그 Y축 메시지를 보내야 합니다.이 코드는 작동하지만 로그에 오류를 표시합니다.누군가가 당신을 위해 더 깨끗한 솔루션을 갖기를 바랍니다.
2018년 4월 9일 편집 고유 값이 아닌 id_list를 반복했습니다.고정 코드는 다음과 같습니다.
Get_unique_values = Function( {in_list},
{Default Local},
tmp = [=> 0];
Insert Into( tmp, in_list );
tmp << get keys;
);
dt = data table("Test Data");
id_list = column(dt, "Sample ID") << get values;
unique_values = get_unique_values(id_list);
gb = dt << Graph Builder(
Size( 530, 1460 ),
Show Control Panel( 0 ),
Variables( X( :Chemical Compound ), Y( :Data ), Page( :Sample ID ) ),
Elements( Bar( X, Y, Legend( 10 ) ) ),
);
for (i = 1, i <= nitems(unique_values), i++,
gb << SendToReport(
Dispatch( {}, "Data", ScaleBox( i + 1 ),
{Scale( "Log" ), Format( "Best", 10 )}
)
);
);