你好,
我正在使用以下腳本郵政嘗試擴展從腳本建立的熱圖。 當前形式的腳本為所有列一起繪製了熱圖,但我想要每個列都有單獨的熱圖。 換句話說,我想找到某一列的最小值、中位數和最大值,然後只在該列上套用熱圖,然後對下一列執行相同的操作並繼續。
附上以下內容
1.sample_base_table.jmp:這是從中提取的樣本資料集。
2. extract_cols.jsl:這是總結用於熱圖腳本的資料的腳本
3. heatmap.jsl:此腳本對指定列進行熱圖
問題:
當我執行 extract_cols.jsl 時,我得到 4 個名為「Untitled X」的新資料表。 然後,當我執行 heatmap.jsl 時,它只能為最後建立的 Untitled X 表建立熱圖。 我不明白為什麼這是... 當我查看偵錯器程式碼時,它顯示“在‘列’的訪問或評估中找不到列”。 但是,我列印正在使用的列“Median(Values, Mango)”並且它顯示出來,所以我不確定發生了什麼(請參見下面的輸出圖片)。

改進/未來的工作:
理想情況下,在我弄清楚為什麼只更新最後創建的數據表後,我想將所有這 4 個水果熱圖列連接到一個數據表中,該數據表還包含國家和水果資訊。 換句話說,我正在產生 4 (32x3) 個表,我想產生 1 (6x32) 個表(4 個水果熱圖 + 國家列 + 位置列)。 目前我正在做的方法是使用 JMP 查詢產生器來進行列串聯。
如果您將滑鼠懸停在 trans:theList 上或如果您指定
show(trans:theList);
在您的腳本中,它將向您顯示清單中的內容。您將看到 5 個條目。第一個將是
Data Table( 'the name of your initial data table");
之後的每個項目將是指向資料表的指針,過濾器依序為 Apple、Banana、Mango、Orange。
它不包含數據,僅包含指向數據的指標。列名等是從實際資料表中檢索的。
您需要花時間閱讀 JMP 文件庫中「說明」下拉式選單下提供的腳本指南。
謝謝,修好了!
因此,當我運行熱圖腳本時,我收到以下訊息。 當我改變時
dt= trans:thelist[5]
它有效,但同樣僅適用於已建立的最後一個資料表。 這個命名空間概念對我來說也是新的。 讓我試著總結一下這是在做什麼,你能確認我的理解是否正確嗎? 因此,透過在腳本中使用命名空間,我們能夠將所有資料表名稱(更重要的是該資料表的列名稱和值)儲存到清單中,然後在熱圖腳本中呼叫該清單。

我的錯誤,改變
insert into(theList,dt);
到
insert into(trans:theList,dt);
theList 不存在......但 trans:theList 存在
感謝您的投入!
當我運行您提供的更新的 extract_cols 腳本時,我收到以下有關 L 值訪問的錯誤訊息...

您正在指定
Names Default To Here( 1 );
它為該特定腳本建立一個單獨的記憶體命名空間。也就是說,在您的 extract_cols 腳本中,有一個名為「fruit」的清單。如果您在熱圖腳本中指定了
myFruit = fruit[1];
您的熱圖腳本不會知道有關名為“水果”的變數的任何資訊。
在熱圖腳本中,您將變數“dt”設定為等於當前資料表。根據您的描述,您在執行 extract_cols 腳本後立即執行 headmap 腳本。在 JMP 中的任何給定時間,只有 1 個資料表是當前活動資料表。因此,當您指定
dt = Current Data Table();
heatmap 腳本取得目前活動資料表,這將是您在 extract_cols 腳本中建立的最後一個資料表
如果您需要將原始資料表參考傳遞給第二個腳本,並且可能還需要傳遞其他4 個資料表引用,執行此操作的一種方法是建立一個單獨的命名空間並將引用放入該命名空間中。這是對腳本的修改,建立名稱空間並將資料表參考放入其中。
Names Default To Here( 1 );
Clear Symbols();
dt = Current Data Table();
if(isnamespace("trans")==0, trans = new namespace("trans"));
trans:theList = {};
insert into(theList,dt);
fruit = {"Apple","Banana","Mango","Orange"};
For(i = 1, i <= N Items(fruit), i++,
obj = dt << Tabulate(
Set Format( Uniform Format( 10, 0 ) ),
Add Table(
Column Table(
Statistics( Median ),
Grouping Columns( :fruits ),
Analysis Columns( :Values )
),
Row Table( Grouping Columns( :Countries, :locations ) )
),
Local Data Filter(
Add Filter(
columns( :fruits),
Where( :fruits == fruit[i] ),
Display( :fruits, N Items( 14 ) )
)
)
);
trans:theList[i+1] = obj<< make into data table;
Current Report() << Close Window
);
然後,您可以在熱圖腳本中引用命名空間,以取得主表引用或儲存在命名空間中的任何資料表參考。
Names Default To Here( 1 );
Clear Symbols();
dt = trans:thelist[1];
dt << Begin Data Update;
///////////////////////////////////
// Setting Variables for script ///
//rev_scale = "Reverse Scale";
rev_scale =0;
mean_median = 1; //mean=0, median=1
print(mean_median);
///////////////////////////////////
//gets all columns that are continous and stores that in a list as strings.
colList = dt << get column names( continuous, string );
print(colList);
// Create a temporary subset where the columns are the column list, selects all rows,
// invisible makes it so you don't see the datatable on screen since it is temporary
dtsub = dt << subset(columns(colList), selected rows(0),invisible);
// Move the data into a matrix this will be used later to get min, max, median|mean
allData = dtsub << get as matrix;
// Close the no longer needed temporary data table
close(dtsub, nosave);
// Calculate the statistics across the full data matrix
myMax = Maximum(allData);
myMin = Minimum(allData);
if(mean_median == 0,
myMid = Mean(allData),
myMid = Median(allData)
);
print(myMax);
print(myMin);
print(myMid);
print(colList);
// Run for loop over data table with the min, max and median|mean calculated from above
// gradient color scheme needs to be set.
if(rev_scale == 1,
For( i = 1, i <= N Items( colList ), i++,
Eval(
Substitute(
Expr(
Column( __col__ ) <<
set property(
"color gradient",
{"Green Yellow Red",
Range( {__Max__, __Min__, __Mid__} ),"Reverse Scale"}
) << Color Cell by Value( 1 );
),
Expr( __col__ ), colList[i],
Expr( __Max__ ), myMax,
Expr( __Min__ ), myMin,
Expr( __Mid__ ), myMid
)
);
);
,
For( i = 1, i <= N Items( colList ), i++,
Eval(
Substitute(
Expr(
Column( __col__ ) <<
//Column( colList[i] ) <<
set property(
"color gradient",
{"Green Yellow Red",
Range( {__Max__, __Min__, __Mid__} )}
) << Color Cell by Value( 1 );
),
Expr( __col__ ), colList[i],
Expr( __Max__ ), myMax,
Expr( __Min__ ), myMin,
Expr( __Mid__ ), myMid
)
);
);
);