基于公式结果的颜色单元格大家好,
我有一列(我们称之为“指标”),其中包含一个返回 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);