你好,
我有一个关于创建多图函数的问题。我正在编写一个函数,它使用特定的设置调用图形生成器来创建多图。这些图形类似,但使用的列数不同,格式也略有不同。该函数的唯一输入是包含数据的数据表。
该函数用于创建图表,我将每个图表保存为一个变量,最后将所有变量添加到一个列表中。之后,我想从列表中调用每个变量(图表),并将它们放在不同的窗口中。但是,这行不通,当我使用索引调用列表时,会出现一个空白。
我尝试将图表制作成报告,但这会使它们不具有交互性。
如果我在想要放置图形的位置调用该函数,它将一次放置所有 3 个图形,而不是一次放置一个。
如能提供任何有关如何解决此问题的帮助,我们将不胜感激。
您应该能够调用您希望获得图表的函数
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
create_plot = function({dt, colname}, {Default Local},
gb = dt << Graph Builder(
Variables(X(:age), Y(Eval(colname)), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
);
return(gb);
);
plots = {};
nw = new window("",
V List Box(
Insert Into(plots, create_plot(dt, "height")),
Insert Into(plots, create_plot(dt, "weight"))
)
);
如果你不需要列表来收集参考,你可以直接删除它
nw = new window("",
V List Box(
gb_height = create_plot(dt, "height"),
gb_weight = create_plot(dt, "weight")
)
);
或者只是
nw = new window("",
V List Box(
create_plot(dt, "height"),
create_plot(dt, "weight")
)
);
对于多个窗口来说,想法是类似的
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
create_plot = function({dt, colname}, {Default Local},
gb = dt << Graph Builder(
Variables(X(:age), Y(Eval(colname)), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
);
return(gb);
);
nw = new window("",
create_plot(dt, "height")
);
nw = new window("",
create_plot(dt, "weight")
);
或者有时你可能不需要新窗口
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
create_plot = function({dt, colname}, {Default Local},
gb = dt << Graph Builder(
Variables(X(:age), Y(Eval(colname)), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
);
return(gb);
);
gb1 = create_plot(dt, "height");
gb2 = create_plot(dt, "weight");
谢谢 Jarmo。
最后我做了类似的事情。我创建了一个 Match 子句,只需要选择要绘制三种图表中的哪一种,然后根据需要多次调用该函数,并选择生成单独的图表。我认为这和你最后做的差不多。我希望用同一个函数来绘制所有三种图表,因为它们在格式上都有些细微的差别,而不仅仅是像你的例子那样替换列名,而且我不想为每种类型创建三个不同的函数,那样也能正常工作。
除了“如何创建图表?”之外,还要考虑“如何组织图表?”。
也许使用单个窗口并将图形存储为选项卡?