颜色代码前 5 名我想对我的表格进行颜色编码(以便我制作的所有图表和图形都遵循相同的规则)。 但我想让前 5 个为红色,中间 15 个为黄色,底部 27 个为绿色。 必须有一种简单的方法来做到这一点。
作为背景,我拥有 2014-2021 年需要跟踪的各种疾病的所有 CDC 发病率数据。 我需要能够将美国与任何一个州进行比较,并显示该州与其他州相比是否处于前 5 名、中间或垫底位置。 在完美的世界中,美国的一排总是会像基准一样显示为黑色。 我已附上下面的数据文件。 一种是列中的数据,另一种是堆叠的数据。
我正在使用 JMP 17。
数据探索和可视化分享和交流结果视窗回复:颜色代码前 5 位这是一个小脚本,给出了顶部、中间、底部以及美国分组
它每年都会单独执行此操作。如果这不是您想要的,那么可以通过删除年份引用来轻松更改脚本。

Names Default To Here( 1 );
dt = Data Table( "All Items 2014-2021 Stacked" );
dtSum =
// → Data Table( "SummaryData" )
Data Table( "All Items 2014-2021 Stacked" ) << Summary(
Group( :State, :Year ),
Mean( :Data ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 ),
output table name( "SummaryData" )
);
dtSum << delete rows( dtSum << get rows where( :state == "United States" ) );
// Sort data table
dtSum = Data Table( "SummaryData" ) << Sort(
By( :Year, :"Mean(Data)"n ),
Replace Table,
Order( Ascending, Ascending )
);
DtSum << New Column( "Color Group",
character,
set each value(
If(
Col Cumulative Sum( 1, :Year ) <= 5, "Top",
Col Cumulative Sum( 1, :Year ) <= 20, "Middle",
"Bottom"
)
)
);
Data Table( "All Items 2014-2021 Stacked" ) << Update(
With( Data Table( "SummaryData" ) ),
Match Columns( :State = :State, :Year = :Year )
);
dt:Color Group[dt << get rows where( :Color Group == "" )] = "U.S.";
dt << delete column( :"Mean(Data)"n );
dt:color group << set property( "value colors", {"Bottom" = 20, "Middle" = 41, "Top" = 19, "U.S." = 0} );
dt << Graph Builder(
Size( 534, 464 ),
Show Control Panel( 0 ),
Variables( X( :State ), Y( :Data ), Color( :Color Group ) ),
Elements( Points( X, Y, Legend( 7 ) ) )
);
回复:颜色代码前 5 名这很有帮助。 但是脚本的第一部分,它生成摘要数据。 N行是什么意思? 我需要知道每一种病毒是什么。
回复:颜色代码前 5 位N 行列显示主表中一组存在多少列。 在下面的屏幕截图中,汇总表告诉您 2014 年阿拉巴马州有 3 行,依此类推。 这确实混合了平均值(数据)列中的不同病毒。

回复:颜色代码前 5 位不幸的是,我需要将所有病毒分开。 将每种病毒作为自己的表会更好吗?
回复:颜色代码前 5 名将每种病毒分离到单独的数据表中是解决该问题的一种方法。然后为每个病毒数据表运行脚本。
也可以将病毒以及州和年份聚合一起添加到我提供的脚本中,并且它将针对每种病毒单独执行计算。
回复:颜色代码前 5 名所以现在我已经完美了。 我还有一个问题。 有没有办法将我的数据列和颜色组列组合起来,以便我看到数据列中的数据/数字,但该单元格中的颜色是颜色组的颜色?
回复:颜色代码前 5 名脚本索引提供了以下定义和示例全部大多数函数和消息都可以在 JSL 中使用。这里有一些简单的 JSL 可以满足您的需要,但是您需要熟悉脚本索引,以便您能够找到自己的答案。这对我们所有人来说都是一个持续的过程。
dt:color group << color cells("green", dt << get rows where(:color group =="Bottom"));
dt:color group << color cells("yellow", dt << get rows where(:color group =="Middle"));
dt:color group << color cells("red", dt << get rows where(:color group =="Top"));
dt:color group << color cells("black", dt << get rows where(:color group =="U.S."));回复:颜色代码前 5 名答案可能有点取决于您使用表格(和颜色)的目的。 有纯脚本选项,或者您可以交互式地执行此操作:当您的某一列中有值颜色时,选择该列并转到行/颜色或按列标记

然后按菜单中的“确定”。

这会将这些颜色设置为行状态

右键单击这些行并按行状态选择颜色

现在您拥有了具有这些颜色的所有行。

然后选择您不想使用该颜色的所有列,右键单击选定的单元格之一并将颜色设为白色

尽管使用此方法和单元格上的颜色,您最终会得到特定颜色作为行上的行状态(您使用白色来覆盖行状态颜色)

JMP 似乎也无法记录这些操作来为您提供脚本。
编辑:
一些脚本编写的思路可以从如何使用JSL通过数字列的值设置文本格式列的颜色渐变?但你的情况有点不同
编辑2:
这是使用脚本为单元格着色的更高级的方法
Names Default To Here(1);
dt = Open("$DOWNLOADS/All Items 2014-2021 Stacked.jmp");
color_property = Column(dt, "Color Group") << Get Property("Value Colors");
values = dt[0, "Color Group"];
For Each({color_prop}, color_property,
value = Arg(color_prop, 1);
color = Arg(color_prop, 2);
color_rows = dt << Get Rows Where(:Color Group == value);
:Data << color cells({color, color_rows});
);
回复:颜色代码前 5 名谢谢你!!! 我现在已经完美了!!!
回复:颜色代码前 5 位我很高兴看到您正在解决问题。通过执行以下操作,确保您完成任务:
- 不要只是将代码剪切并粘贴到您的应用程序中。确保您花时间研究提供的 JSL 并学习JSL 中的不同项目如何工作。
- 返回您收到的回复,并将为您解决问题的回复标记为解决方案,以便让未来的读者尽可能高效地获得答案。