基於公式結果的顏色單元格大家好,
我有一列(我們稱之為“指標”),其中包含一個返回 0 或 1 的公式。
現在我知道該怎麼做:
formulaResult = :Indicator << Get Values;
:Indicator << Color Cells( "red", Loc(formulaResult==1) );
但我真正想做的是讓數據表動態響應:如果我更改數據以使指示器切換到 0(假),我不希望單元格再突出顯示,並且如果我添加更多數據表格和公式計算,我希望1 突出顯示。
我不知道如何使用顏色單元來做到這一點。 我認為顏色漸變列屬性的奇怪實現可能會起作用,但在嘗試了一段時間後,我無法得到我想要的結果。 尋找一些想法。
邁克爾
回复:根據公式結果為單元格著色這是使用白色的相同方法別的條款。 這裡的隱藏列默認是數字,因此Then 和Else 都必須返回一些數字,例如缺失值。
dt = Open("$SAMPLE_DATA\Big Class.jmp");
dt << New Column("highlight cells",
Formula(If(100 < :weight < 135, :weight << color cells("Red", Row()); .,
:weight << color cells("White", Row()); .)),
Hide(1)
);
回复:根據公式結果為單元格著色這種方法對我來說很有效,除非你改變權重。 我想我可以簡單地添加一個請求來將 If() 語句中的 else 參數設置為 Color Cells("White",Row()) 但這似乎不起作用。
此外,它還需要為每個具有規格限制的參數創建一個新列,儘管我想我們可以編寫一個創造性的公式來迭代所有列,檢查規格限制列屬性,如果找到一個,則為相應的列著色? 至少隱藏了額外的列。
回复:根據公式結果為單元格著色也許並不明顯,但您可能會發現這種方法不那麼“笨拙”:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA\Big Class.jmp");
dt << New Column("highlight cells",
Formula(If(100 < :weight < 135, :weight << color cells("Red", Row()); ., .)),
Hide(1)
);回复:根據公式結果為單元格著色絕對同意。您絕對應該通過 support@jmp.com 提出功能請求。
回复:根據公式結果為單元格著色這很笨拙,在 JMP 中應該有一種更直接/明顯的方法來做到這一點,但這個解決方案可以工作。 謝謝。
回复:根據公式結果為單元格著色所以基本上我只是偽造一個在小窗口上漸變的顏色漸變。因此,對於只有兩種顏色的情況,您只需要 4 點。 0、一些非常接近 0 的數字、一些非常接近 1 的數字和 1。如果您想要 2 種以上的顏色,則必須在您想要的範圍內的每個點計算從 0 到 1 的值。例如,如果您想要 110,則必須在 10/35 和 10/35+.0000001 處添加兩個值
Names Default to Here(1);
dt = Open("$SAMPLE_DATA\Big Class.jmp");
Column(dt, "weight") << Set Property(
"Color Gradient" ,
{{"Something", 16387,
{{255, 0, 0}, {0, 255, 0}, {0, 255, 0}, {255, 0, 0}}, //list of colors
{0, .00000001, .9999999, 1}}, //corresponding locations from 0 to 1
Range( {100, 135, 117.5} ) //minimum, maximum and center. 0, 1, and .5 is another way to look at it
}
);
Column(dt, "weight") << Color Cell By Value(1);
回复:根據公式結果為單元格著色對不起。 該解決方案不允許我使用一種顏色(例如紅色)對超出感興趣範圍的值進行著色,並使用不同顏色(例如白色)對感興趣範圍內的值進行著色。 這個 col min、col Mean、col max 解決方案似乎是一種簡單地添加一些默認值來進行漸變的方法。 有什麼吸引人的地方@vince_faller的解決方案是,它創建一個自定義漸變,將兩種顏色(我認為)強制施加到列上。 對我來說還沒有吸引力的是,我不知道如何精確控制何時從“好”顏色切換到“壞”顏色。
回复:根據公式結果為單元格著色您可以使用 colmin、colmax 和 colmean 進行計算:
frr_min = col min(:FRR);
frr_max = col max(:FRR);
frr_avg = col mean(:FRR);
// Color FRR with a gradient
column(hlt_dt, "FRR") << Set Property( "Color Gradient", {"Light Spectral", Range(expr(frr_min), expr(frr_max), expr(frr_avg))});
column(hlt_dt, "FRR") << color cell by value(1);回复:根據公式結果為單元格著色這更接近了。 看來綠色範圍約為。本例為 92-127。 假設我的規格範圍是 100-135。 如何進行數學計算以找出輸入顏色漸變中範圍函數的端點? (然後我有一個痛點,就是必須在這裡向其他 JMP 用戶解釋為什麼他們需要將兩個數字(即 100 和 135)轉換為三個值來滿足 Range 函數。)
回复:根據公式結果為單元格著色為什麼顏色漸變不起作用?
Names Default to Here(1);
dt = Open("$SAMPLE_DATA\Big Class.jmp");
Column(dt, "weight") << Set Property(
"Color Gradient" ,
{{"Something", 16387, {{255, 0, 0}, {255, 0, 0}, {0, 255, 0}, {0, 255,
0}, {255, 0, 0}, {255, 0, 0}}, {0, 0.33333333, 0.33333334,
0.666666666666, 0.666666666667, 1}}, Range( {64, 172, 105} )
}
);
Column(dt, "weight") << Color Cell By Value(1);

回复:根據公式結果為單元格著色僅僅一周後,這個問題就再次出現在我身上。
新的應用程序是,我們在許多情況下想要標記超出規範的值。 顏色漸變和明度顏色都不能很好地做到這一點。 我們當然可以基於 0 vs 1 創建一個新的列和顏色,但是如果我有多個要強制執行的變量,我將必須為每個變量創建一個新列。 這很快就會變得難以處理! 我想要一個更好的解決方案。
回复:根據公式結果為單元格著色為了計算缺陷,我可以使用它。 有時我還需要使用連續變量,並且該解決方案在那裡不起作用,但也許顏色漸變在這種情況下可以正常工作。
回复:根據公式結果為單元格著色創建一個列表,按照您需要的方式定義值顏色,例如白色代表 0,紅色代表大於 0 的整數。 值顏色屬性似乎要求每個要著色的值都有自己的“分配”。 因此,“缺陷”的所有可能值必須包含在列表中。
例子:
// Make list that defines the Value Colors
n = 10; //set highest conceivable nr of defects
vc = {0 = 2}; // White cell color for no defects
For(i = 1, i <= n, i++,
Insert Into(vc, Eval Expr(Expr(i) = 19)) // red for defects 0
);
// Example table
dt = New Table("test",
Add Rows(50),
New Column("Defects", Formula(Random Integer(0, 3)), Set Property("Value Colors", vc), Color Cell by Value)
);
回复:根據公式結果為單元格著色標記,
當然。 我可以創建另一個指標列,這是有道理的。 唯一的問題是這會給指示器列中的單元格著色,而不是突出顯示缺陷數量,如下所示:

我更喜歡的是這樣的:

有任何想法嗎?
回复:根據公式結果為單元格著色您只需更改列公式中使用的邏輯,例如:data > 0。回复:根據公式結果為單元格著色驚人的! 我想我有點過於簡單化了我的問題。 讓我們嘗試一下這個概括。
現在我的指標是缺陷計數(0、1、2、3、4 等)。 如何用相同的顏色為所有 >=1 的內容著色,而不為零著色?
回复:根據公式結果為單元格著色嘗試“值顏色”屬性並選中“按值對單元格著色”。
例子:
// Example table
dt = New Table("test",
Add Rows(10),
New Column("data", Formula(Random Uniform())),
New Column("Indicator",
Set Property("Value Colors", {. = -12632256}),
Formula(:data < 0.5),
Color Cell by Value
)
);
// Test if dynamic
Wait(1);
:data << eval formula;
Wait(1);
dt << add rows(10);