以下のスニペットの目的は、 CurrentとTimeをプロットすることです。 Serialで区別される複数のデバイスがあります。
GraphBuilder では、シリアルを「ページ」ごとにグループ化します。デバイスの数は可変なので、ページ数も可変です。
スケールを設定する際に、ページ数 (デバイス) ごとに「ディスパッチ」ラインを用意します。そのため、下にはデバイスごとに 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)の最小値、最大値、およびインクを変更するビッグクラステーブルの例です。 また、いくつかのデバッグプリントがあり、何らかの理由で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);