データテーブルにヒートマップを作成し、スクリプトで色のグラデーションを更新するやあ、
データ テーブルからヒートマップとしてプロットしたいデータがたくさんあります。 サンプル データ テーブルの画像と、データ テーブルにヒートマップを作成する手順を下に添付しました。 次の手順に従います。
- tabulate を使用した後にデータテーブルを取得する
- すべての列を積み重ねます (「タイプ」を除く)。 次に、データセット全体を要約して、最小値、中央値、最大値を見つけます。
- ステップ 2 から最小値、中央値、最大値を取得し、それらをカラー グラデーション値に入れます。
これらの手順を実行した後のデータ テーブルの結果を以下に示します。 現在、ステップ 3 を手動で実行します。ここでは、Summary を取得した値をカラー グラデーション値に入力します。 スクリプトを使用してサマリー データ テーブルから値 (最小、中央値、最大) を取得し、それをカラー グラデーションに入力する方法はありますか?
サンプルデータセットも添付しました。


データ表スクリプティングRe: データテーブルでヒートマップを作成し、スクリプトで色のグラデーションを更新するすべての入力とヘルプに感謝します! スクリプティング インデックスを知らなかったので、とても助かりました。 以下に使用しているコードを最終バージョンとして投稿しました
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
)
);
);
);Re: データテーブルでヒートマップを作成し、スクリプトで色のグラデーションを更新する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 ドキュメント ライブラリ
また、[ヘルプ] プルダウン メニューからも利用できる Scripting Index をよく理解することをお勧めします。
Re: データテーブルでヒートマップを作成し、スクリプトで色のグラデーションを更新するありがとう、これは私が必要とするものに非常に近いです! 唯一の欠点は、ヒート マップが、データ テーブル全体ではなく、その列の最大値、最小値、および中間値に基づいて勾配を与えることです。 基本的に、以下のコードでは、セルに色を付けるために for ループに入る前に、max、min、および mid を見つけたいと考えています。 これを行うと、Maximum、Minimum、および Median 関数は、最大値を抽出するために渡される colList を認識しません。 get column names を実行しているときに、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
)
);
);Re: データテーブルでヒートマップを作成し、スクリプトで色のグラデーションを更新する私のエラー...スクリプトを書いているときに、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
)
);
);Re: データテーブルでヒートマップを作成し、スクリプトで色のグラデーションを更新するスクリプトをそのまま (大きなクラス データセットを使用して) 実行すると、スクリプトがクラッシュし、以下のメッセージが表示されます。
Name Unresolved: myMax in access or evaluation of 'myMax' , myMax/*###*/
at line 25 in Script 4.jsl
Re: データテーブルでヒートマップを作成し、スクリプトで色のグラデーションを更新する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
)
)
);Re: データテーブルでヒートマップを作成し、スクリプトで色のグラデーションを更新する入力していただきありがとうございます! 私はあなたのスクリプトを良い出発点として使用していますが、より動的にすることを望んでいました.
- そのため、スクリプトでは、最大値、最小値、および中間値を手動で値に設定し、画像のステップ 2 で出力サマリー テーブルによってそれらを設定する方法があります。 基本的に、この max、min、および mid は Group:0 test:AI の範囲内にあり、テーブル全体の範囲 max、min、および mid を取得します。
- 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
)
);Re: データテーブルでヒートマップを作成し、スクリプトで色のグラデーションを更新する色のグラデーションを設定する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
)
);