JMP 画完图如何去除不想要的部分?
2024-10-19 本文已影响0人
赖皮姑娘爱吃蛋糕
背景
把值域很不同的一些变量的分布放在一张图里,很多分布都看不清楚了:
值域很不同的一些变量的分布(parallel merged)
通过把combine scale设置为parallel independent,每个变量使用独立的y轴,能够清晰的看到每个变量分布,因此也会显示每个变量的y轴信息,如下图红框中的内容:
值域很不同的一些变量的分布(parallel independent)
我不想要红框中的内容,因为我只想用这张图说明这些变量的分布没有很好的正态性,不需要具体的值域信息。
局限
搜遍了配置界面,没有找到在哪里可以关掉它,y轴的配置并不作用于每个变量单独的配置!
解决思路
借助JMP script实现没有可视化配置的操作。
- 用Show Tree Structure命令找到不想要的部分
gb = Graph Builder(
Size( 768, 500 ),
Variables(
... 可视化界面拖好图之后,这部分内容会自动生成
),
);
gb << Show Tree Structure;
不想要的内容在结构树中的位置
- 删掉不想要的部分
rep = gb << Report;
c = rep[Box(1)][OutlineBox(1)][ListBox(9)][PictureBox(1)][GraphBuilderBox(1)][1][1][1][1][1][1][ParallelScaleBox(1)][GraphBuilderContainerBox(1)][GraphBuilderComponentBox(17)][FrameBox(1)] << Find Seg(ParallelAxisSeg);
c << Show Tree Structure;
c << Delete;
成了!
干干净净的烂正太图
实现细节
思路简单,但是有一个巨大的坑!但也有可能是我第一次写JMP脚本还不够懂它。
在上面的路径中[GraphBuilderBox(1)][1][1][1][1][1][1][ParallelScaleBox(1)]这个部分和Show Tree Structure中的看到的路径其实并不匹配!
在Show Tree Structure中,GraphBuilderBox(1)和[ParallelScaleBox(1)]之间只隔了一个ScaleBox,但是实际上并不是!所以我请ChatGPT帮我写了一个函数把具体的结构打印出来。
// 这个函数有bug,只能打印第一个叶子的路径,并不会返回递归,不知道为啥,但目前将就够用了
print_hierarchy = Function( {box, indent},
Print( Repeat(" ", indent));
Show(box);
// Loop through the children of the current box (if it has any)
n_children = N Items( box );
For( i = 1, i <= n_children, i++,
// Recursively call the function on each child component
child_box = box[i];
print_hierarchy( child_box, indent + 1 ); // Increase indentation level for children
);
);
c = rep[Box(1)][OutlineBox(1)][ListBox(9)][PictureBox(1)][GraphBuilderBox(1)];
print_hierarchy(c, 0);
发现竟然有五个ScaleBox,不知道是为什么。
Show Tree Structure中一个ScaleBox竟然嵌套了五个ScaleBox
工具
JMP Script中Print输出在Log,在菜单栏Window中打开。
查看Print输出的内容
脚本函数定义文档
打开脚本函数定义文档
思路延展
能够找到一个部分,就应该能够增删改,那是不是对画图想怎么改就能怎么改了呢……
碎碎念
超级开心我的机灵又回来了。以前问过一个物理学家怎么学好数学,他说提问,然后解决它。那之后我就格外珍惜自己提出的问题。