JSL:如何遍歷列、生成 Graph Builder 報告並將每個報告保存為 JPG 文件你好,
我有一個包含 41 個變量的數據集。 我需要繪製前 40 個中的每一個與最後一個,例如,製作 40 個箱線圖或抖動圖。
通過創建圖形菜單創建一個漂亮的全功能圖,這很容易,甚至很有趣。 我知道如何保存我所做的腳本,但我不知道的是如何編寫一個循環,使每次迭代都使用另一個變量並將其替換為我的原始圖形代碼。 換句話說,如果我有 20 行代碼,我想要一個循環來一遍又一遍地運行相同的代碼,並且只會改變我定義因變量的地方。 此外,我需要一種顯示結果的好方法(40 個窗口不切實際),所以我想也許可以將每個窗口保存為 JPG,然後再進行下一次迭代。 這可能與 JMP 嗎?
謝謝 !
回复:JSL 循環以下示例演示如何獲取列名列表作為字符串。For 循環從列表中的第二列開始生成一個不可見的 Graph Builder,因為第一列用作 X。(原始帖子需要調整這些以從列表中的第一列開始並在列表中的最後一列之前停止。)每個 Graph Builder 報告都保存為 JPG 文件,其中列名包含在文件名中。最後關閉數據表和不可見報表。
/* Open a sample data table */
dt = Open( "$SAMPLE_DATA\Fitness.jmp" );
/* Obtain a list of numeric/continuous column names as strings */
colList = dt << Get Column Names( Continuous, String );
/* Loop through the list to generate the desired Graph Builder
and save the report as a JPEG file */
For( i = 2, i <= Nitems( colList ), i++,
gb = dt << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables(
X( :Age ),
Y( Column( dt, colList[i] ) ),
Color( :Age )
),
Elements(
Points(
X,
Y,
Legend( 3 ),
Summary Statistic( "Mean" ),
Error Bars( "Confidence Interval" )
)
),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Marker Size( 5 )}
)
),
Invisible
);
gb << Save Picture( "E:\Trash\Graph Builder_" || colList[i] ||".jpg", JPEG );
);
/* Close table and all invisible reports */
Close( dt, No Save );
希望有幫助!
JSL循環你好,
感謝您提供幫助。 不幸的是,我對 JSL 仍然不夠熟悉(當我下班休息時,我會深入研究它),而且我在括號和所有這些方面遇到了麻煩,所以你的建議沒有用,我可能在錯誤的地方有一個標誌。
我的原始代碼是:
Graph Builder(
Size( 880, 750 ),
Show Control Panel( 0 ),
Variables(
X( :Cutoff, Size( 0, 21 ) ),
Y( :S1, Size( 0, 22 ) ),
Color( :Cutoff )
),
Elements(
Points( X, Y, Color, Legend( 1 ), Jitter( 1 ) ),
Line(
X,
Y,
Color,
Legend( 2 ),
Row order( 0 ),
Error Bars( "Confidence Interval" ),
Summary Statistic( "Mean" )
)
),
SendToReport( Dispatch( {}, "Graph Builder", FrameBox, {Marker Size( 5 )} ) )
);
你能幫我用環把它包起來嗎?
乾杯!
JSL循環你好!你想做的事相當簡單。
首先,在您的腳本中,您需要定義當前數據表:
cd = Current Data Table();
現在,獲取列名列表:
column_names = cd << Get Column Names;
現在,有多種方法可以完成下一部分,但我發現這是最簡單的。您需要開始我們最終將解析和評估的文本字符串。第一部分是創建一個新窗口。
nw = "New Window(\"Graphs\",
randomname = V List Box(";
現在我們可以編寫循環,只需稍作改動即可插入您的自定義代碼。我假設您知道如何使用 JMP“for”循環——我將遍歷表中除最後一列以外的所有列。
for(i=1,i<=length(column_names)-1,i++,
nw = nw || "PUT YOUR CUSTOM CODE HERE*" || ",";
);
*在您定義因變量的自定義代碼中,將其刪除並替換為
:Name(\"" || column_name || "\")
這將做的是粘貼您在編寫的自定義腳本中擁有的每個因變量的文本名稱。
最後,我們需要完成我們之前啟動的新窗口:第一行完成編寫新窗口的代碼,第二行首先解析文本使其成為代碼,然後評估 nw 中包含的代碼。
nw = nw || "));";
eval(parse(nw));
應該這樣做 - 如果您有任何問題或需要具體幫助,請告訴我!