回复:如何将图形脚本动态添加到具有多个框框的可变性图表我不确定你到底在尝试什么,但这样的事情会奏效吗?
Names default to here( 1 );
dt = open("$SAMPLE_DATA\Big Class.jmp");
var_chart = dt << Variability Chart( Y( :height ), X( :sex ), By( :age ), stddevchart(0) );
summarize(dt, ages = by(:age));
var_rpt = var_chart << Report(); // this should just give a list of outlineboxes
for(i=1, i<=nitems(var_rpt), i++,
olb = var_rpt[i];
framebox = olb[FrameBox(1)];
framebox << Add Graphics Script(
Transparency( 0.5 );
Pen Color( "blue" );
Line([0,100], [62.5, 62.5]);
);
);回复:如何将图形脚本动态添加到具有多个框框的可变性图表我通常不在图形脚本中使用变量,除非它们完全在框架框内部生成。 这是我的方法的一个例子。
Names Default To Here( 1 );
// open example
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
// launch variability chart
var_chart = dt << Variability Chart( Y( :height ), X( :sex ), By( :age ), stddevchart( 0 ) );
// get summary in same order as By groups
Summarize( dt, age = by( :age ), avg = Mean( :height ) );
var_rpt = var_chart << Report;
// iterate over list and add script using H Line() with literal argument
For( i = 1, i <= N Items( age ), i++,
Eval(
Substitute(
Expr(
var_rpt[i][FrameBox(1)] << Add Graphics Script(
Pen Color( "Red" ); H Line( aaa );
);
),
Expr( aaa ), avg[i]
)
)
);回复:如何将图形脚本动态添加到具有多个框框的可变性图表您可以遍历原始的返回结果变异性图表(按(...))命令:
names default to here(1);
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Cars.jmp" );
rpt = dt << Variability Chart(
Y( :Head IC),
X( :Make, :Model ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Show Cell Means( 0 ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
By( :NAME("D/P"), :Protection ),
);
//find groupings:
subt = dt << Summary( Group( :"D/P"n, :Protection ), Link to Original Data Table( 0 ) );
dps = subt:"D/P"n << Get Values;
protections = subt:protection << Get Values;
Close( subt, No Save );
For( t = 1, t <= N Items( dps ), t++,
Eval( eval Expr(
rows = dt << Get Rows Where( :NAME("D/P") == Expr( dps[t] ) & :Protection == Expr( protections[t] ) );
) );
subt = dt << Subset( Rows( rows ), Columns( :Make, :Model, :Wt ), Not Linked, Private );
sumt = subt << Summary( Group( :Make, Model ), Mean( :Wt ), Statistics Column Name Format( "Column" ), Link to Original Data Table( 0 ), Private );
Close( subt, No Save );
subt = sumt << Summary( Group( :Make ), Mean( :Wt ), Statistics Column Name Format( "Column" ), Link to Original Data Table( 0 ), Private );
Close( sumt, No Save );
category number = [=>];
category average = [=>];
For Each Row( subt,
category number[:Make] = :N Rows; // each least-significant category in a VariabilityPlot is exactly X=1 width on the hidden x-axis, starting at zero
category average[:Make] = :Wt
);
Close( subt, No Save );
tree = rpt[t] << Report;
Eval( Eval Expr(
tree[FrameBox( 1 )] << Add Graphics Script(
Local( {values = Expr( category average ), numbers = Expr( category number ), i, items, sum = 0},
items = numbers << Get Keys;
Pen Size( 2 );
Pen Color( "Blue" );
Summation( i = 1, N Items( items ),
Line( Eval List( {sum, values[items[i]]} ), Eval List( {sum += numbers[items[i]], values[items[i]]} ) );
0
)
)
)
) )
);回复:如何将图形脚本动态添加到具有多个框框的可变性图表嗨,马克,感谢您的回复! 我想知道“aaa”在 H Line() 和 Expr() 中的传递值是什么,我没有看到它被分配到任何地方所以我很好奇它的作用是什么? 谢谢你!
回复:如何将图形脚本动态添加到具有多个框框的可变性图表嗨文斯,
感谢您的回复,我看到您对 62.5 进行了硬编码,但是您知道如何将其调整为动态值以成为 :wt 中的值吗?
回复:如何将图形脚本动态添加到具有多个框框的可变性图表第一个表达式只是一个模板。 表达式 'aaa' 是替换的占位符。 它永远不会被评估。 Substitute() 查找 Expr( aaa ) 并替换该值。
回复:如何将图形脚本动态添加到具有多个框框的可变性图表我明白了,谢谢你的解释。 出于好奇, jmp 是否不首先评估函数内部的值。 过去我遇到过这个问题,但一直无法弄清楚要搜索什么来理解来自 python 背景的行为。 在我的脑海中,H 线应该只得到 avg[i] 而不是必须替换其中的值,但我得到了一个错误。
“在访问或评估 'avg[/*###*/i]'、avg[/*###*/i] 时无效的下标(必须是数字或数字列表)”
For( i = 1, i <= N Items( age ), i++,
Eval(
Expr(
var_rpt[i][FrameBox(1)] << Add Graphics Script(
Pen Color( "Red" ); H Line( avg[i] );
);
),
)
);感谢您的帮助和任何解释,谢谢!
回复:如何将图形脚本动态添加到具有多个框框的可变性图表表达式是 JMP 脚本语言中的一项强大功能。 我建议阅读文档更加熟悉它们的工作原理和使用方法。
这是使用最后一种方法的正确方法:
Names Default To Here( 1 );
// open example
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
// launch variability chart
var_chart = dt << Variability Chart( Y( :height ), X( :sex ), By( :age ), stddevchart( 0 ) );
// get summary in same order as By groups
Summarize( dt, age = by( :age ), avg = Mean( :height ) );
var_rpt = var_chart << Report;
// iterate over the list and add script using H Line() with the literal argument
For( i = 1, i <= N Items( age ), i++,
Eval(
Eval Expr(
var_rpt[i][FrameBox(1)] << Add Graphics Script(
Pen Color( "Red" ); H Line( Expr( avg[i] ) );
);
);
)
);
如何将图形脚本动态添加到具有多个框架框的变异性图表中大家好,
所以我有一个由“BY”分组分割的变异性图表,我在中问了这个问题https://community.jmp.com/t5/Discussions/How-to-add-Dynamic-horizontal-line-by-shared-y-axis-among/mp/622722其中我了解图形脚本如何根据数据表中的值添加相应的行。 我试图使这种方法适应具有更多框架框的变异性图表,但我无法弄清楚如何做到这一点。 我现在的猜测是将每个 By 放入 for 循环中,并迭代地将图形添加到相应的框架盒中,但我对如何做到这一点感到困惑,因为我不确定如何迭代访问框架盒。 任何帮助,将不胜感激。 谢谢!
请使用下面的 rpt 并可能添加一个 for 循环,以便
//Potential for loop?<BR /><BR />rpt = dt << Variability Chart(
Y( :Head IC),
X( :Make, :Model ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Show Cell Means( 0 ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
BY(:Name("D/P"))
);
<BR />//Subset data table by "By" condition to add the correct lines based on the condition.<BR />
tree = rpt << Report;
Eval( Eval Expr(
tree[FrameBox( 1 )] << Add Graphics Script(
Local( {values = Expr( category average ), numbers = Expr( category number ), i, items, sum = 0},
items = numbers << Get Keys;
Pen Size( 2 );
Pen Color( "Blue" );
Summation( i = 1, N Items( items ),
Line( Eval List( {sum, values[items[i]]} ), Eval List( {sum += numbers[items[i]], values[items[i]]} ) );
0
)
)
)
)
)数据混合和清理