回复:如何將圖形腳本動態添加到具有多個框框的可變性圖表我不確定你到底在嘗試什麼,但這樣的事情會奏效嗎?
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
)
)
)
)
)數據混合和清理