如何在 JMP 中叠加直方图有两种方法可在 JMP 中叠加直方图:使用“分布”和“图形生成器”平台。 您可能需要叠加直方图来查看两个或多个变量的分布之间的相似性和/或差异。 叠加直方图可以让您以比单独查看分布更精确的方式比较分布。
使用分布叠加直方图
第一种方法使用分销平台。 以下是使用 Car Physical Data.jmp 示例数据表的示例。 除了叠加直方图之外,本例中还叠加了正态分布曲线。 如果您不希望图表中出现分布曲线,则只需忽略相关步骤即可。 Car Physical Data共有116行,结构如下:

从数据表中,转到分析 > 分布。 在 Y 列框中放置两个数字连续列(例如“位移”和“马力”),然后单击“确定”。
输出将如下所示(为了简单起见,我删除了一些默认输出部分,例如分位数和汇总统计):

如果您看到直方图并排而不是相互重叠,请单击“分布”旁边的红色小三角菜单,然后选择“堆栈”以查看它们,如上图所示。 如果直方图以垂直格式显示,请单击每个变量名称旁边的红色小三角菜单,然后选择显示选项 > 水平布局。 另一种选择是,在更改一个变量时按住 Ctrl 键,而不是单击每个单独的红色小三角菜单。 通过这样做,更改会广播到所有其他变量。
正如我上面提到的,我将为每个分布拟合一条正态曲线并覆盖这些元素。
要生成法线曲线,请按住 Ctrl 键并单击(在 Mac 上按住 Command 键并单击)“位移”旁边的红色小三角菜单。 然后,选择“连续拟合”>“正常”。 两个变量的输出中均显示拟合正态分布,如下所示。

现在,我将继续自定义每个图中元素的颜色,以便我们可以在最终结果中区分它们。 我将使用红色代表位移,蓝色代表马力。 在位移直方图中右键单击并选择自定义。 在出现的窗口的项目列表中,单击直方图。 将填充颜色更改为红色,将透明度更改为 0.5(这样我们可以更轻松地观察直方图重叠的位置)。 自定义图表窗口显示如下:

对于位移,法线曲线已经是红色的,所以我们不需要自定义该项目。 单击“确定”关闭窗口。
现在,重复前面的步骤,将马力直方图颜色更改为蓝色,并将透明度更改为 0.5。 我们还想将法线曲线更改为蓝色,因此单击“法线”线项目并将“线颜色”字段更改为蓝色。 单击“确定”。
我们的输出现在看起来像这样:

现在,我将把位移直方图和法线曲线复制到马力图上,使它们重叠。
为此,首先在位移直方图中右键单击,然后选择“编辑”>“复制帧内容”。 接下来,右键单击马力直方图并选择编辑 > 粘贴帧内容。 您可能需要调整视图中的轴范围才能看到两个完整的直方图。
结果是一张图中的直方图和正态曲线:

使用这种方法,没有自动图例,但您可以使用 Annotate添加文本和线条的工具为手动图例添加彩色线条元素的工具。
实施这些工具后,我的结果是这样的:

使用图形生成器叠加直方图
叠加直方图(和分布曲线)的第二种方法使用图形生成器平台。
此方法要求数据采用堆叠格式,以便所有连续值都在一列中。 要堆叠数据,请从原始汽车物理数据表转到“表”菜单,然后选择“堆叠”。 将“位移”和“马力”放入“堆栈列”框中。 单击“确定”。
新的堆叠数据表有一个名为“数据”的列,其中包含所有数据值,以及一个名为“标签”的列,该列指示该值是源自“位移”列还是“马力”列。
从堆叠数据表中,转到图形 > 图形生成器。 将 Data 拖至 X 角色,将 Label 拖至 Overlay 角色。 在图表中右键单击并选择点 > 更改为 > 直方图。
现在,我们需要确保绘图正确缩放。 我将返回“分布”平台中的叠加图,然后单击红色小三角菜单 > 直方图选项 > 密度轴。 该轴让我们了解图形生成器 Y 轴应该是什么。 直方图的右侧出现一个轴,我双击它以打开“轴设置”窗口。 本例中的最大值为 0.0117586。
现在,返回到图形生成器输出,将数据列拖动到 Y 并双击该轴以打开 Y 轴设置。 将最小值设置为 0,最大值设置为 0.0117586,以模拟分布平台中的密度轴。 我还将增量设置为 0.002,并将格式部分中的 Dec(十进制)字段设置为 3。
如果需要,您可以双击 X 轴以打开其“轴设置”对话框并自定义最小值、最大值和增量值。此时的结果是这样的:

接下来,我将叠加法线曲线。 首先,我们需要记录分布平台中应用于位移和马力的拟合正态分布的平均值和标准偏差值。 请记住,这些值是在选择连续拟合 > 正态后在输出中给出的。
回想一下下面分布输出中的值(以红色标出):

记录这些值后,在图形生成器图中右键单击并选择自定义。 单击 + 图标添加自定义脚本。 我们将为每条正态曲线使用以下语法。 Pen Color 语句定义曲线的颜色,而 Y 函数则使用指定的 mu 和 sigma 参数(从每个变量的分布输出记录)绘制正态密度曲线。
Pen Color( "<COLOR>" );
Y Function( normal density(x, mu, sigma), x );</COLOR>
使用上面的语法以及应用于位移和马力的拟合正态分布的(四舍五入的)mu 和 sigma 值,我在自定义脚本窗口中输入以下文本。
//Horsepower
Pen Color( "blue" );
Y Function( Normal Density( x, 130.198, 39.8225 ), x );
//Displacement
Pen Color( "red" );
Y Function( Normal Density( x, 158.31, 60.4088 ), x );
单击“确定”。 结果是这样的:

现在,我将进行一些自定义,以根据我的喜好最终确定图表。 我更喜欢删除图形标签、Y 轴标签以及 X 轴标签。 我将双击每个字段并使用删除键删除文本。 另外,我不想在 Y 轴上显示任何刻度标签。 我双击该轴以打开“Y 轴设置”,并取消选中对话框“轴标签行”部分中主要刻度线的“标签”复选框。 另外,我想移动图表内的图例。 我单击图形生成器旁边的红色小三角菜单,然后选择图例位置 > 右侧内部。 最后,我将稍微扩展 x 轴的范围以获得更完整的图片。 我打开 X 轴设置并将最小值设置为 0,最大值设置为 400。
最后,我单击“完成”按钮,留下下图:

上述示例展示了如何使用两种方法叠加直方图和正态曲线:JMP 中的分布平台和图形生成器平台。 如果需要,可以将此示例推广为覆盖两个以上的直方图和正态曲线,或将其他分布曲线拟合到您的数据。
本文演示了使用 Distribution 和 Graph Builder 叠加直方图(和分布曲线)的两种方法。
回复:如何在 JMP 中叠加直方图你好@DecileDromedary ,
这是 Big Class 的示例。 我采用了不同的方法(更多基于表,更少 JSL 脚本)。由于某种原因,我必须标准化数据,因为积分函数要花很长时间才能进行评估(显然导致 JMP 进入非终止过程,即(无响应))。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// New formula column: Standardize[height]
Data Table( "Big Class" ) << New Formula Column(
Operation( Category( "Distributional" ), "Standardize" ),
Columns( :height )
);
// New column: mean Std height by sex
Data Table( "Big Class" ) << New Column( "mean Std height by sex",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Col Mean( :"Standardize[height]"n, :sex ) )
);
// New column: stdev height by sex
Data Table( "Big Class" ) << New Column( "stdev Std height by sex",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Col Std Dev(:"Standardize[height]"n, :sex ) )
);
// → Data Table( "Big Class By (sex)" )
dt2 = Data Table( "Big Class" ) << Summary(
Group( :sex ),
Mean( :mean Std height by sex ),
Mean( :stdev Std height by sex ),
Freq( "None" ),
Weight( "None" ),
statistics column name format( "column" )
);
// Define curves and calculate overlap area
mean1 = dt2[1,3]; //female
stdev1 = dt2[1,4];
mean2 = dt2[2,3]; //male
stdev2 = dt2[2,4];
N1 = Expr(Normal Density(x, mean1, stdev1));
N2 = Expr(Normal Density(x, mean2, stdev2));
ovl = Integrate(Min(N1, N2), x, ., .);
Show(ovl);
//––––––––––
// Illustration
ym = xm = (-1000 :: 1000) / 100;
For(i = 1, i <= N Col(xm), i++,
ym[i] = Min(Normal Density(xm[i], mean1, stdev1), Normal Density(xm[i], mean2, stdev2))
);
New Window("Overlap Coefficient",
y = Graph Box(
Y Scale(0, 1),
X Scale(-5, 12),
Y Function(N1, x);
Y Function(N2, x);
Text({0, 0.6}, "OVL% = ", ovl*100);
Fill Color(1);
Polygon(xm, ym);
)
);
/*## ## ## */
// Close Data Table: Big Class By (sex)
Close( dt2, NoSave );
//hide Big Class
dt << Show Window(0);
希望能帮助到你!
聚苯乙烯 抱歉我错过了这个。 将来,为了确保您得到更及时的答复,请将您的问题发布到一般讨论论坛上,您可以在您的问题中添加指向此帖子的链接,我们的知识渊博且经验丰富的用户社区应该能够非常快速地为您提供指导(并且比我使用 JSL 更熟练)。此外,如果您是 JMP 授权用户,您还可以将您的问题提交至support@jmp.com -- 我们在许多情况下提供支持,包括像这样的问题。
干杯,
@帕特里克朱利亚诺(JMP 技术支持)
回复:如何在 JMP 中叠加直方图@帕特里克朱利亚诺:
我正在尝试部署 ovl 系数的脚本。 我在随机数据上尝试了一下,效果非常好! 谢谢。 但是,下一步我尝试将这些值自动获取到脚本中。
Names Default To Here(1);
// Define curves and calculate overlap area
mean1 = 5.28;
stdev1 = 0.91;
mean2 = 8.45;
stdev2 = 1.36;
N1 = Expr(Normal Density(x, mean1, stdev1));
N2 = Expr(Normal Density(x, mean2, stdev2));
ovl = Integrate(Min(N1, N2), x, ., .);
Show(ovl);
只是我需要脚本来读取mean1,Std dev 1和mean2,std。 dev 2 直接从列中输入,而不是每次都手动将其输入到脚本中。
我尝试了很多方法:
试验1:意思是=意思是(柱子( dt ,一个列)[ sel_rows ])
试验2: Col Mean(名称, <按变量, ...>)
如果有办法请告诉我。 谢谢!
回复:如何在 JMP 中叠加直方图你好@DecileDromedary不客气! 不幸的是,我认为这个工作流程不容易重现(在 JMP 生成的脚本中),即使使用 JMP 最近的增强型日志 (JMP 16) 和工作流程生成器 (JMP 17) 也是如此。当然,可能有办法从头开始在 JSL 中编写此脚本,但这会需要更多工作(超出了此处的范围)。
您能否在以下内容中添加有关您的请求的评论(与上述类似)愿望清单邮政?
https://community.jmp.com/t5/JMP-Wish-List/Support-for-overlaying-multiple-distributions/idi-p/359241
您的要求与那里的要求类似,请参阅那里的屏幕截图@shampton82 :

如果像上面这样的图内置到“分布”或“通过 X 拟合 Y”中,那么您可以将该脚本保存到数据表中,就像我在“图形生成器”中所示的那样。
这将帮助我们将您的请求视为 JMP 未来版本中图形生成器的功能增强。
回复:如何在 JMP 中叠加直方图@帕特里克朱利亚诺对于这样的事情:

谢谢!
回复:如何在 JMP 中叠加直方图@帕特里克朱利亚诺多谢!, 使用图形生成器也是个好主意。
,为了匹配我的问题陈述,我想保存我们在“分布”选项卡中生成的特征、直方图、正态曲线以及正态分位数图。 在这一步之后,我们使用复制框架内容并粘贴具有颜色差异的框架内容。
再次感谢!
回复:如何在 JMP 中叠加直方图你好@DecileDromedary当然! 使用 Graph Buidler 方法,完成所有自定义后,您可以转到红色小三角菜单并选择保存脚本 > 到数据表:

JMP 将生成一个脚本(在我的示例中,名为“数据与数据”)并将其写入数据表,您可以通过单击脚本名称旁边的绿色播放按钮在左上角访问它:

保存的数据表脚本可能如下所示(我在 JMP 17.1 中生成了此脚本):
Graph Builder(
Variables( X( :Data ), Y( :Data ), Overlay( :Label ) ),
Elements( Histogram( X, Y, Legend( 4 ), Response Scale( "Fill" ) ) ),
SendToReport(
Dispatch(
{},
"Data",
ScaleBox,
{Format( "Best", 12 ), Min( 4.68939393939394 ), Max( 365.833333333333 ),
Inc( 100 ), Minor Ticks( 1 )}
),
Dispatch(
{},
"Data",
ScaleBox( 2 ),
{Format( "Fixed Dec", 12, 3 ), Min( 0 ), Max( 0.0107369299221357 ),
Inc( 0.002 ), Minor Ticks( 1 ), Label Row(
{Automatic Font Size( 0 ), Automatic Tick Marks( 0 ),
Label Orientation( "Horizontal" )}
)}
),
Dispatch(
{},
"Graph Builder",
FrameBox,
{Add Graphics Script(
5,
Description( "" ), //Horsepower
Pen Color( "blue" );
Y Function( Normal Density( x, 130.198, 39.8225 ), x );
//Displacement
Pen Color( "red" );
Y Function( Normal Density( x, 158.31, 60.4088 ), x );
), DispatchSeg( Hist Seg( 1 ), Bin Span( 4, 0 ) ),
DispatchSeg( Hist Seg( 2 ), Bin Span( 4, 0 ) )}
)
)
)
回复:如何在 JMP 中叠加直方图谢谢!将两个正态分布相互叠加(具有颜色差异)效果非常好!
如果有机会,我想将具有这些功能的脚本保存在数据表中。
是否可以?
回复:如何在 JMP 中叠加直方图你好@XanGregg格雷格,谢谢你的提醒JMP 愿望清单,我会添加到那里!
总结一下要求,基本上是这样的:
1. 以与 JMP 执行单变量分析并使用“分析”>“分布”显示直方图/汇总统计数据非常相似的方式,在图形生成器平台中启用 JMP,以覆盖至少两个分布,分别将正态分布曲线拟合到每个分布, 和自动计算两个分布之间的面积重叠比例。请参阅附图:

2.请注意,用户社区做出了各种良好的贡献除了这篇精彩的文章之外,在这个方向上@塞利格曼- 此礼遇@多发性硬化症, https://community.jmp.com/t5/Discussions/is-there-a-way-to-find-the-area-common-to-two- different-normal/mp/86379/highlight/true#M38500他们创建了自己的 JSL 来执行此操作。
为了方便起见,我将脚本附在此处:最后,最想要的脚本将是我上面所描述的内容,以及正在使用下面的 JSL 示意性地计算和说明的内容。
Names Default To Here(1);
// Define curves and calculate overlap area
mean1 = 5.28;
stdev1 = 0.91;
mean2 = 8.45;
stdev2 = 1.36;
N1 = Expr(Normal Density(x, mean1, stdev1));
N2 = Expr(Normal Density(x, mean2, stdev2));
ovl = Integrate(Min(N1, N2), x, ., .);
Show(ovl);
//––––––––––
// Illustration
ym = xm = (-1000 :: 1000) / 100;
For(i = 1, i <= N Col(xm), i++,
ym[i] = Min(Normal Density(xm[i], mean1, stdev1), Normal Density(xm[i], mean2, stdev2))
);
New Window("Overlap Coefficient",
y = Graph Box(
Y Scale(0, 1),
X Scale(-5, 12),
Y Function(N1, x);
Y Function(N2, x);
Text({0, 0.6}, "OVL% = ", ovl*100);
Fill Color(1);
Polygon(xm, ym);
)
);@史蒂文我希望这也能为您充分捕捉到它?
回复:如何在 JMP 中叠加直方图嘿帕特里克,
是的JMP 愿望清单这是一个好方法,这样其他人就可以参与进来。
由于我刚刚赶上这个线程,您能总结一下请求是什么吗? 我看到了对分布中重叠直方图的请求以及对图形生成器中更多诊断/摘要数字的选项的请求。
回复:如何在 JMP 中叠加直方图@史蒂文我完全同意你的观点……也许如果我们对其进行足够多的投票,它就会被合并?JMP 迫切需要的另一项基本功能是能够自动将分布平台中直方图的比例更改为垂直(与水平),以便您实际上可以清楚地读取数字。我认为 Graph Builder 是一个拥有您/我们正在谈论的功能的好地方。与分析回归关系并可以选择使用复选框打开 r 平方、方程等(或另一个示例是带有箱线图的 4 数汇总)时类似,这可以是图形中的类似功能建设者。事实上,一般来说,在图形生成器中绘制直方图可以得到极大的改进,以更接近地模仿分发平台的视觉友好性。我发现自己经常使用 hte Grabber 工具来调整我的分布图的大小,如果/当我努力在图形生成器中制作它们时。
@XanGregg我在这里复制你的内容!很高兴今天在 2019 年 JMP 图森发现峰会上见到您!(2019 年 10 月 18 日)
回复:如何在 JMP 中叠加直方图我也希望 JMP 能够自动比较多个分布。这是按晶圆或组装批次对半导体 IC 测试结果进行的核心比较,我相信许多其他人也有类似的需求。Quantix 使这成为一个简单的拖放过程,甚至允许多个上限和下限。当我点击并点击进行比较时,大厅另一边的同事嘲笑我。
回复:如何在 JMP 中叠加直方图@塞利格曼这很棒!感谢您分享这一切。我确实认为这是统计发现的核心,JMP 应该在 JMP 的未来版本中以更自动化的方式集成它(作为分发平台的一部分或作为图形构建器平台的一部分)。Minitab 等其他软件将允许您通过点击几下鼠标来叠加直方图并比较密度。
过去我曾多次在图形生成器中做过类似的事情,但总是遇到一些困难和多次鼠标点击。 我真的很喜欢您的自定义脚本实现和“复制粘贴框架内容”的想法。
回复:如何在 JMP 中叠加直方图不客气,利普萨! 您的站点代表确实能够协助您进行升级。 如果您的站点尚未处理 v14 订单,站点代表可以通过以下地址请求升级: www.jmp.com/upgrade 。
回复:如何在 JMP 中叠加直方图非常感谢您的回复,并确认我不仅仅是错过了一些愚蠢的细节。我确实有网站许可证。我会先询问我的现场人员是否可以升级到 ver14.2。谢谢你!
回复:如何在 JMP 中叠加直方图嗨,利尔普萨,
谢谢你让我们注意到这一点。 您是对的 - JMP 11 图形生成器中的叠加角色不会区分直方图元素的颜色。 如果您有站点许可证,可以通过技术支持 (support@jmp.com) 联系我们,我们可以帮助您升级到当前版本 JMP 14.2。 如果您拥有 JMP 11 的单用户许可证,则这不包括主要版本升级。 在这种情况下,请随时联系我们的 JMP 销售部门:877-594-6567。
回复:如何在 JMP 中叠加直方图这“正是”我想要做的,但不幸的是“图形生成器”选项的说明不起作用。
我已经提取了示例数据集,按照指示堆叠了列,然后完全按照指示进行操作,直到我看到将“标签”列拖到“覆盖”角色中的说明为止,它工作得很好。当我这样做时,图表中没有任何变化。我仍然看到直方图,但所有数据都集中在一起,而不是像作者的插图那样分为 2 个重叠的颜色分组。这里发生了什么?我正在运行 JMP 11.2.0。
这是窗口的屏幕截图:

谢谢你!