JMP 画完图如何去除不想要的部分?

2024-10-19  本文已影响0人  赖皮姑娘爱吃蛋糕

背景

把值域很不同的一些变量的分布放在一张图里,很多分布都看不清楚了:


值域很不同的一些变量的分布(parallel merged)

通过把combine scale设置为parallel independent,每个变量使用独立的y轴,能够清晰的看到每个变量分布,因此也会显示每个变量的y轴信息,如下图红框中的内容:


值域很不同的一些变量的分布(parallel independent)

我不想要红框中的内容,因为我只想用这张图说明这些变量的分布没有很好的正态性,不需要具体的值域信息。

局限

搜遍了配置界面,没有找到在哪里可以关掉它,y轴的配置并不作用于每个变量单独的配置!

解决思路

借助JMP script实现没有可视化配置的操作。

  1. 用Show Tree Structure命令找到不想要的部分
gb = Graph Builder(
    Size( 768, 500 ),
        Variables(
        ... 可视化界面拖好图之后,这部分内容会自动生成
        ),
);
gb << Show Tree Structure;
不想要的内容在结构树中的位置
  1. 删掉不想要的部分
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输出的内容

脚本函数定义文档


打开脚本函数定义文档

思路延展

能够找到一个部分,就应该能够增删改,那是不是对画图想怎么改就能怎么改了呢……

碎碎念

超级开心我的机灵又回来了。以前问过一个物理学家怎么学好数学,他说提问,然后解决它。那之后我就格外珍惜自己提出的问题。

上一篇 下一篇

猜你喜欢

热点阅读