在資料表上建立熱圖並使用腳本更新色彩漸變你好,
我有很多數據,我喜歡將數據表中的數據繪製為熱圖。 我在下面附上了範例資料表圖像的圖像以及在資料表上建立熱圖的步驟。 它遵循以下步驟:
- 使用tabulate後取得資料表
- 堆疊所有列(“類型”除外)。 然後對整個資料集進行匯總,找出最小值、中位數和最大值。
- 取出步驟2中的最小值、中位數和最大值,並將它們放入顏色梯度值中。
執行這些步驟後的資料表結果如下所示。 目前,我手動執行步驟 3,其中無論我在摘要後得到什麼值,我都會輸入顏色漸變值。 有沒有辦法使用腳本從摘要資料表中取得值(最小值、中位數、最大值)並將其輸入到色彩漸層中?
我還附上了範例資料集。


大規模客製化回覆:在資料表上建立熱圖並使用腳本更新色彩漸變感謝您的所有意見和幫助! 我不知道腳本索引它有很大幫助。 我發布了下面使用的程式碼作為我的最終版本
Names Default To Here( 1 );
Clear Symbols();
dt = Current Data Table();
///////////////////////////////////
// Setting Variables for script ///
rev_scale =1;
mean_median = 0; //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 );
// 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);
// 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__ ) <<
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
)
);
);
);回覆:在資料表上建立熱圖並使用腳本更新色彩漸變Maximum、Minimum 和 Median 函數不會對列列表執行累積計算。我發現執行此操作的最簡單方法是將引用的列轉換為矩陣,然後計算統計數據,因為最大值、最小值和中值函數將在矩陣中工作。
這是一個執行該計算的簡單腳本
Names Default To Here( 1 );
Clear Symbols();
dt = Open( "$SAMPLE_DATA/big class.jmp" );
colList = dt << get column names( continuous, string );
// Create a temporary subset to calculate the required overall statistics
dtsub = dt << subset(columns(colList), selected rows(0),invisible);
// Move the data into amatrix
allData = dtsub << get as matrix;
// Close the no longer needed temporary daa table
close(dtsub, nosave);
// Calculate the statistics across the full data matrix
myMax = Maximum(allData);
myMin = Minimum(allData);
myMid = Median(allData);
我強烈建議您花時間閱讀腳本指南,它可以在
幫助=>JMP 文件庫
我還建議您熟悉腳本索引,它也可以在“幫助”下拉選單下找到。
回覆:在資料表上建立熱圖並使用腳本更新色彩漸變謝謝,這非常接近我所需要的! 唯一的問題是熱圖根據該列的最大值、最小值和中位數給出梯度,而不是根據整個數據表。 基本上在下面的程式碼中,我想在進入 for 迴圈為單元格著色之前找到最大值、最小值和中值。 當我執行此操作時,函數 Maximum、Minimum 和 Median 無法識別傳遞來提取最大值的 colList。 jsl 有沒有辦法在執行取得列名稱時根據清單尋找最大值、最小值和中位數? 或者這需要進入for循環嗎?
Names Default To Here( 1 );
Clear Symbols();
//dt = Open( "$SAMPLE_DATA/big class.jmp" );
dt = Current Data Table();
colList = dt << get column names( continuous, string );
myMax = Maximum(colList);
myMin = Minimum(colList);
myMid = Median(colList);
print(myMax);
print(myMin);
print(myMid);
print(colList);
For( i = 1, i <= N Items( colList ), i++,
/*
Eval(
Substitute(
Expr(
Summarize(
dt,
myMax = Max( __col__ ),
myMin = Min( __col__ ),
myMid = Mean( __col__ )
)
),
Expr( __col__ ), colList[i]
)
);
*/
Eval(
Substitute(
Expr(
Column( __col__ ) <<
set property(
"color gradient",
{"Green Yellow Red",
//Range( {__Max__, __Min__, __Mid__} ),"Reverse Scale"}
Range( {__Max__, __Min__, __Mid__} )}
) << Color Cell by Value( 1 );
),
Expr( __col__ ), colList[i],
Expr( __Max__ ), myMax,
Expr( __Min__ ), myMin,
Expr( __Mid__ ), myMid
)
);
);回覆:在資料表上建立熱圖並使用腳本更新色彩漸變我的錯誤...... myMax 等的初始值是在我編寫腳本時從先前的執行中繼承的。下面是一個修復
Names Default To Here( 1 );
Clear Symbols();
dt = Open( "$SAMPLE_DATA/big class.jmp" );
colList = dt << get column names( continuous, string );
For( i = 1, i <= N Items( colList ), i++,
Eval(
Substitute(
Expr(
Summarize(
dt,
myMax = Max( __col__ ),
myMin = Min( __col__ ),
myMid = Mean( __col__ )
)
),
Expr( __col__ ), 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
)
);
);回覆:在資料表上建立熱圖並使用腳本更新色彩漸變當我按原樣運行您的腳本(使用大類資料集)時,它崩潰了,我收到以下訊息:
Name Unresolved: myMax in access or evaluation of 'myMax' , myMax/*###*/
at line 25 in Script 4.jsl
回覆:在資料表上建立熱圖並使用腳本更新色彩漸變以下是一個自動對 Big Class 範例資料表的欄位進行著色的範例。您應該能夠從此腳本分支以使其能夠處理您的數據
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
colList = dt << get column names( continuous, string );
For( i = 1, i <= N Items( colList ), i++,
Eval(
Substitute(
Expr(
Summarize(
dt,
myMax = Max( As Column( __col__ ) ),
myMin = Min( As Column( __col__ ) ),
myMid = Mean( As Column( __col__ ) )
);
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
)
)
);回覆:在資料表上建立熱圖並使用腳本更新色彩漸變感謝您的投入! 我使用你的腳本作為一個很好的起點,但我希望使它更動態。
- 因此,在腳本中,您手動將最大值、最小值和中位數設為值,有什麼方法可以透過影像中步驟2中的輸出總表來設定它們。 基本上這個最大值、最小值和中位數都在 Group:0 測試的範圍內:AI 希望得到整個表的最大值、最小值和中位數範圍。
- 我必須將 Color Cell by Value(1) 添加到我的腳本中,並且我也一直在嘗試設定反向比例,並且一直收到錯誤訊息,知道如何執行此操作嗎?
- 另外,可以安全地假設要在所有列上運行顏色漸變,我需要在您發送的程式碼之外進行 for 循環嗎? 或者有其他方法可以做到這一點嗎?
names default to here(1);
dt=current data table();
dt:"Group:0, test:A" << set property("color gradient",{"Green Yellow Red", Range(
{-142.439058836207, -42.6065023706896, -97.9221899694684}
)});
Max = -142.439058836207;
Min = -42.6065023706896;
Mid = -97.9221899694684;
Eval(
Substitute(
Expr(
dt:"Group:0, test:A"n << set property(
"color gradient",
{"Green Yellow Red", Range( {__Max__, __Min__, __Mid__} )},
)
:dt << Color Cell by Value( 1 );
),
Expr( __Max__ ), Max,
Expr( __Min__ ), Min,
Expr( __Mid__ ), Mid
)
);回覆:在資料表上建立熱圖並使用腳本更新色彩漸變這是設定顏色漸層的 JSL
names default to here(1);
dt=current data table();
dt:"Group:0, test:A"n << set property("color gradient",{"Green Yellow Red", Range(
{-142.439058836207, -42.6065023706896, -97.9221899694684}
)});
我發現將值插入所需列表的最簡單方法是使用類似於下面的程式碼:
Max = -142.439058836207;
Min = -42.6065023706896;
Mid = -97.9221899694684;<BR />
Eval(
Substitute(
Expr(
dt:"Group:0, test:A"n << set property(
"color gradient",
{"Green Yellow Red", Range( {__Max__, __Min__, __Mid__} )}
);
),
Expr( __Max__ ), Max,
Expr( __Min__ ), Min,
Expr( __Mid__ ), Mid
)
);