아래 코드 조각의 목표는 Time 에 대해 Current 를 플롯하는 것입니다. Serial 로 구별되는 여러 장치가 있습니다.
GraphBuilder에서는 Serial을 "페이지"별로 그룹화합니다. 장치 수가 다양하기 때문에 페이지 수도 다양합니다.
배율을 설정할 때 페이지(장치) 수당 "디스패치" 라인이 있으므로 아래에는 각 장치에 대한 4개의 차트를 업데이트하는 4개의 디스패치 라인이 있습니다.
모든 GraphBuilder 페이지에서 동일한 척도 및 차트 설정을 구현하려면 어떻게 해야 합니까? 감사해요!
//t0 is minimum time
//tn is maximum time
Graph Builder(
Size(700, 5000),
Show Control Panel(0),
Variables(
X(:Column(Time)),
Y(:Column(Current)),
Page(:Serial)
),
Elements(
Points(X, Y(2), Legend(1)),
Points(X, Y(1), Legend(2))
),
SendToReport(
Dispatch({}, "Time (H)", ScaleBox(2),
{Min(t0), Max(tn), Inc(inc);}),
Dispatch({}, "Time (H)", ScaleBox(3),
{Min(t0), Max(tn), Inc(inc);}),
Dispatch({}, "Time (H)", ScaleBox(4),
{Min(t0), Max(tn), Inc(inc);}),
Dispatch({}, "Time (H)", ScaleBox(5),
{Min(t0), Max(tn), Inc(inc);})
);
);
Expr()과 함께 Eval(EvalExpr())을 사용할 가능성이 큽니다. Eval Insert, Eval Expr, Parse 및 Substitute를 사용하여 한 표현식을 다른 표현식에 삽입 , 그러나 이것은 더 유연하고 수정하기 쉽기 때문에 XPath(또는 XPath가 없는 유사한 방법)를 사용하여 이 문제를 가장 잘 해결하려고 합니다(제 생각에는).
다음은 페이지 열로 :age를 사용하고 x축(:weight) min, max 및 inc를 수정하는 Big Class 테이블의 예입니다. 또한 일부 디버그 인쇄가 있으며 어떤 이유로 7개의 스케일박스가 있지만 6개의 그룹만 있습니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(529, 2957),
Show Control Panel(0),
Variables(X(:weight), Y(:height), Page(:age)),
Elements(Points(X, Y, Legend(7)), Smoother(X, Y, Legend(8)))
);
Summarize(dt, uniq_groups = by(:age));
Show(N Items(uniq_groups));
rep = Report(gb);
//Show(rep << Get XML);
scale_boxes = rep << XPath("//ScaleBox[@charID='weight']");
Show(N Items(scale_boxes)); //this has one extra when compared to groups, not sure (yet) why
scale_boxes << Min(10);
scale_boxes << Max(200);
scale_boxes << Inc(5);