我们正在生成一个脚本,用于根据用户选择的 3D 图形方向自动生成 2D XY 坐标列。该脚本将调用 R 代码来执行计算,但需要向 R 提供 XYZ 列数据和旋转设置。
从保存的散点图 3D 脚本中,我们可以看到 XYZ 列名 (zue1...) 和旋转设置 (-8....)。我们需要 jsl 代码来选择这些列并导出 csv 文件。以及用于选择和导出旋转设置值的代码。
任何建议都将不胜感激。
Scatterplot 3D(
Y( :zue1, :zue2, :zue3 ),
Frame3D(
Set Grab Handles( 0 ),
Set Rotation( -8.15592033195416, 47.3040538060599, 75.4291344975828 )
)
);
请花时间再次查看我提供的 JSL。这是一个示例,运行一个 3D 散点图,您可以在其中将旋转更改为您想要的任何位置,然后在关闭窗口时,它会提取该示例的脚本,并从刚刚运行的示例中删除变量和旋转值.然后它创建一个 csv 文件并将其保存到磁盘。如果您不想要我提供的完整代码,您可以轻松地看到我用来去除变量和旋转值的代码,将它们放入名为 varsList 和 rotationList 的 JMP 列表中。
谢谢你们俩。我们将按照您的建议将值直接传递给 R。然而......我们的基本问题(在制定我们的总体目标时丢失了)是......我们如何让 jsl 脚本选择旋转值 (-8...)和要传递给 R 的列数据(在此示例中为 zue1,...)。我们希望用户制作所需的 3D 投影,根据需要对其进行定向,然后让脚本从该方向生成 2D 投影。我们需要从(或在其中看到的)保存的 3D 散点图脚本访问和选择旋转值。我们还希望我们制作的脚本或插件自动选择(导出到 R)所使用的列数据,因此选择用于原始 3D 绘图的 XYZ 列数据。
这是 3D 散点图脚本....
谢谢!
Scatterplot 3D(
Y( :zue1, :zue2, :zue3 ),
Frame3D(
Set Grab Handles( 0 ),
Set Rotation( -8.15592033195416, 47.3040538060599, 75.4291344975828 )
)
);
@ian_jmp从 JMP 调用 R 例程的建议可能真的是解决问题的好方法。
如果您确实需要使用 csv 传递数据表,这里是一个完成 csv 文件创建方法的简单示例
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\big class.jmp" );
sp = Scatterplot 3D(
Y( :age, :height, :weight ),
Frame3D( Set Grab Handles( 0 ), Set Rotation( -54, 0, 38 ) )
);
sp << on close(
theScript = Char( (Report( sp ) << get scriptable object) << get script );
varsList = {};
Insert Into( varsList, Word( 2, Substr( theScript, Contains( theScript, "Y(" ) ), ":," ) );
Insert Into( varsList, Word( 4, Substr( theScript, Contains( theScript, "Y(" ) ), ":," ) );
Insert Into( varsList, Word( 6, Substr( theScript, Contains( theScript, "Y(" ) ), ":,)" ) );
rotationList = {};
Insert Into( rotationList, Word( 2, Substr( theScript, Contains( theScript, "Rotation(" ) ), "()," ) );
Insert Into( rotationList, Word( 3, Substr( theScript, Contains( theScript, "Rotation(" ) ), "()," ) );
Insert Into( rotationList, Word( 4, Substr( theScript, Contains( theScript, "Rotation(" ) ), "()," ) );
dtSub = dt << subset( columns( Eval( varsList ) ), selected rows( 0 ) );
dtSub << New Column( "_Vars_", character, set values( varsList ) );
dtSub << New Column( "_Rotation_", character, set values( rotationList ) );
dtSub << Save( "$TEMP/passvalues.csv" );
close( dtSub, nosave );
);
// This line opens the csv back into JMP
//open("$TEMP/passvalues.csv");与其使用 CSV 文件作为中介,您可能更愿意查看JMP 和 R 集成.