如何根据数据范围本身自动调整分布中的 bin 宽度?当我使用分发平台时,默认情况下,bin 宽度总是很大,并且无助于更好地理解分发。 我必须处理的数据按马级(兆、毫、单位等)变化,因此所有直方图的固定箱不起作用。 另外,在我需要处理的实际情况下,我有数百个测试,因此逐一调整图也是不可行的。 有没有办法使每个单独图的箱宽度由数据范围确定? 例如,我想简单地获取范围并将其分成 100 个等份或 50 等。因此,无论单位如何,所有绘图的外观都会有些统一,而无需单独调整它们。 附件是 3 个图示例,我希望默认情况下将 bin 宽度设置为数据范围的 1/100。
谢谢!
数据探索和可视化回复:如何根据数据范围本身自动调整分布中的箱宽度?我能够使用上面提供的部分代码并使用 Eval/Parse 表达式来设置 bin。
谢谢。
dt = currentdatatable();
col = dt << get column names();
nc = N Items( col );
colList = {};
bin_width={};
For( i = 1, i <= nc, i++,
If(Contains (col[i],"::"),
Insert Into( colList, col[i] ))
);
For(i = 1, i <= N Items(colList), i++,
Insert Into(bin_width,0.0);
bin_width[i] = Col Max(Column(dt, colList[i])) - Col Min(Column(dt, colList[i]));
bin_width[i] = bin_width[i]/10;
);
theExpr = "dis = dt << Distribution(Stack( 1 ),
Continuous Distribution( column( column(dt,colList[1])), Set Bin Width(bin_width[1]), Label Row( Label Orientation( \!"Perpendicular\!" ) ))
";
For( i = 2, i < N Items( colList ), i++,
theExpr = theExpr || ", Continuous Distribution( column( column(dt, colList[" || Char( i ) || "])), Set Bin Width(bin_width[i]))"
);
theExpr = theExpr || ");";
Eval( Parse( theExpr ) );回复:如何根据数据范围本身自动调整分布中的箱宽度?谢谢@ron_horne和@jthi对于代码片段。 我会尝试一下。
回复:如何根据数据范围本身自动调整分布中的箱宽度?很可能是对我之前的代码的改进,其中包含 Set Bin Width() @ron_horne 。
循环很可能可以通过更聪明的方式进行:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Students.jmp");
colList = {"height", "weight"};
dist = dt << Distribution(
Continuous Distribution(Column(:height)),
Continuous Distribution(Column(:weight))
);
wait(1);
For(i = 1, i <= N Items(colList), i++,
newInc = Col Max(Column(dt, colList[i])) - Col Min(Column(dt, colList[i]));
newInc = newInc/10;
dist[i] << Set Bin Width(newInc);
);回复:如何根据数据范围本身自动调整分布中的箱宽度?你好@布雷诺
作为开发的基础如何:
Open( "$SAMPLE_DATA/Big Class.jmp" );
Distribution(
Continuous Distribution( Column( :height ), Set Bin Width( (colmax(:height)-colmin(:height))/50 ) ),
Continuous Distribution( Column( :weight ), Set Bin Width( (colmax(:weight)-colmin(:weight))/100 ) )
);
回复:如何根据数据范围本身自动调整分布中的箱宽度?你可以尝试编写脚本。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Students.jmp");
colList = {"height", "weight"};
dist = dt << Distribution(
Continuous Distribution(Column(:height)),
Continuous Distribution(Column(:weight))
);
wait(2);
rep_layer = Report(dist);
axisbox = rep_layer[axis box(1)];
For Each({val}, colList,
//some calculation for inc
newInc = Col Max(Column(dt, val)) - Col Min(Column(dt, val));
newInc = newInc/10;
cur_rep = rep_layer[OutlineBox(val)];
axisbox = cur_rep[axis box(1)];
axisbox << Inc(newInc);
);还有 Bin Span() 但我不确定在构建发行版后是否可以修改它。
回复:如何根据数据范围本身自动调整分布中的箱宽度?你好罗恩:
感谢您的建议。 不幸的是,它不喜欢大量的测试,我尝试添加 ~ 30 个要绘制的测试,并给出错误“无法添加项目:列表已包含最大数量的项目”。
我希望有一个通用设置来调整 bin 宽度,因为大多数发行版都带有宽条,因此这必须是一个关于如何确定它们有多宽的全局设置。
回复:如何根据数据范围本身自动调整分布中的箱宽度?你好@布雷诺,
从这里开始:
https://community.jmp.com/t5/JMP-Add-Ins/2D-Histograms/ta-p/377945
如果有帮助请告诉我们。