我們正在產生一個腳本,用於根據使用者選擇的 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 集成.