<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />在 JMP 11 中,我正在编写一个绘图应用程序,允许用户通过选择定义行状态的分组列来自定义图例。 这需要删除旧图例(通过删除父边框框)并添加新图例。但是我发现,如果在双变量或可变性平台上设置自动重新计算(我没有测试其他平台),这将导致除了新图例之外,旧图例的副本也会重新出现,当新图例出现时一个是使用 FrameBox<
我还考虑过使用数据表上的 <回复:自动重新计算(1)会导致删除父边框框后旧图例重新出现。
哦,我最终做的是使用 dt<回复:自动重新计算(1)会导致删除父边框框后旧图例重新出现。
所以我一直在尝试它,最终我能够重新创建这种行为,甚至使用内置数据集之一。以下代码将导致某种内存泄漏,从而导致 JMP 崩溃。
以下是重现错误的方法:
(1) 在窗口内创建一个平台,将自动重新计算设置为 1
(2)添加一些图例
(3) 排除一些行
(4) 添加另一个图例..即使删除一个或两个原始图例,JMP 也会冻结
该错误表现为 jmp 在遇到无限内存泄漏时逐渐增加内存使用量(~10 MB/s)。
可以通过将表中所有行的排除状态设置为 0 来避免此错误(即 对于每一行(排除(RowState())= 0)。
自动重新计算带来的另一个怪癖是,除非在创建图例后在删除图例之前存在强制时间延迟,否则图例不会删除。如果自动重新计算设置为 0,则删除不会出现问题。
//崩溃的代码
名称默认为此处( 1 );
尝试(关闭(dt,nosave));
dt = Open( "$SAMPLE_DATA/Big Class.jmp",invisible );
dt<<清除行状态;
obj = NewWindow("test",biv_container = HListbox(biv = Bivariate( Y( :weight ), X( :height ),自动重新计算(1))));
/*
data_filter_container = ScrollBox(Size(200,500),data_filter = dt << 数据过滤器( 添加过滤器( columns( :性别, :年龄, :姓名, :身高, :体重 ) )));
data_filter<<模式( 选择( 1 ), 显示( 1 ), 包含( 1 ) );
obj[OutlineBox("体重与身高的二元拟合")]<
obj[OutlineBox("体重与身高的二元拟合")][FrameBox(1)]<
obj[OutlineBox("体重与身高的二元拟合")][FrameBox(1)]<
obj[OutlineBox("体重与身高的二元拟合")][FrameBox(1)]<<标记大小(6);
dt<<选择其中(:性别==“F”)<<排除;
//显示(对于每一行(排除(RowState()) = 0));
//dt<<选择Where(:sex == "F")<<取消排除;
wait(0.1);//删除颜色图例所需的强制时间延迟
obj[OutlineBox("体重与身高的二元拟合")][BorderBox(2)]<
obj[OutlineBox("重量与高度的二元拟合")][FrameBox(1)]<回复:自动重新计算(1)会导致删除父边框框后旧图例重新出现。
好吧,我想出了一个简单的解决方法:我关闭了相关平台对象上的自动重新计算(通过在所选表上使用 <