グラフィックスクリプトのトラブルシューティングに関するヘルプが必要です:「グラフィックスクリプトがログにエラーを報告しました」グラフィックスクリプト内からフレームボックスの軸を参照する方法を理解するのに助けが必要です。
現在の状況は以下のとおりです。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
ob_group = Outline Box( "Testing Handles: " || (dt << Get Name) );
nw = New Window( (dt << get name), ob_group );
GB_wHandle = Function( {dt, X_parameter, Y_Parameter, groupByColumnString},
groupByColumn = Column( dt, groupByColumnString );
cb = Context Box(
box:exx = 60;
box:exy = 60;
box:gb = Graph Builder(
Size( 450, 350 ),
Ignore Platform Preferences( 1 ),
Show Control Panel( 0 ),
Variables( X( Column( X_Parameter ) ), Y( Column( Y_Parameter ) ), Overlay( groupByColumn ) ),
Elements( Points( X, Y ), Smoother( X, Y ) )
);
box:rgb = box:gb << Report;
box:framebox = box:rgb << XPATH( "//FrameBox" );
box:axis = box:rgb << XPATH( "//AxisBox" );
box:axisMax = box:axis << Get Max;
box:axisMin = box:axis << Get Min;
{box:exx, box:exy} = box:axisMin + 10;
box:framebox << Add Graphics Script(
"Front",
Description( "Handle" ),
//Script start
{Handle(
box:exx,
box:exy,
box:exx = x;
box:exy = y;
) ;
box:axisMax = box:axis << Get Max;
box:axisMin = box:axis << Get Min;
Pen Color( "Red" ) ; Line( box:axisMin, {box:exx, box:exy} ) ; }
);
);
Return( cb );
);
ob_group << Append( GB_wHandle( dt, "height", "weight", "sex" ) );
同じウィンドウ内に複数のGB(ギガバイト)があり、それぞれ独立したハンドルを持っているため、コンテキストボックスが必要です。
グラフ上の点や表の行を選択して除外するまでは、すべて正常に動作します。
するとグラフィックが消え、「Graphic script reported errors in log」と「Send Expects Scriptable Object in access or evaluation of 'List' , {/*###*/DisplayBox[], DisplayBox[]}」がログに表示されます。
エラーが発生する原因は以下の行です。
box:axisMax = box:axis << Get Max;
box:axisMin = box:axis << Get Min;
それらをコメントアウトするとエラーは発生しませんが、ユーザーが軸のスケールを変更した場合に更新された軸の最小値/最大値を取得できなくなります。
どうすれば直せますか?
自動化とスクリプト作成件名:グラフィックスクリプトのトラブルシューティングに関するヘルプが必要です:「グラフィックスクリプトがログにエラーを報告しました」これは問題をはるかに単純な方法で示しています
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
ob_group = Outline Box("Testing Handles: " || (dt << Get Name));
gb = dt << Graph Builder(
Size(450, 350),
Ignore Platform Preferences(1),
Show Control Panel(0),
Variables(X(Column("height")), Y(Column("weight")), Overlay("sex")),
Elements(Points(X, Y), Smoother(X, Y))
);
fbs = Report(gb) << XPATH("//FrameBox");
abs = Report(gb) << XPATH("//AxisBox");
show(fbs, abs);
dt << Select Rows(1) << Hide and Exclude(1) << Clear Select;
wait(1);
show(fbs, abs);
行を除外すると、グラフビルダーが再計算され、参照が削除されます。
件名:グラフィックスクリプトのトラブルシューティングに関するヘルプが必要です:「グラフィックスクリプトがログにエラーを報告しました」これを解決する一つの方法は、
box:axis = box:rgb << XPATH("//AxisBox");
グラフィックスクリプトへ
件名:グラフィックスクリプトのトラブルシューティングに関するヘルプが必要です:「グラフィックスクリプトがログにエラーを報告しました」ええ、再描画だとは思っていましたが、どうやって参照すればいいのか分からなかったんです。
件名:グラフィックスクリプトのトラブルシューティングに関するヘルプが必要です:「グラフィックスクリプトがログにエラーを報告しました」はい、うまくいきました。なぜか、スクリプト内からレポートを参照できないと思い込んでいました。
件名:グラフィックスクリプトのトラブルシューティングに関するヘルプが必要です:「グラフィックスクリプトがログにエラーを報告しました」@jthi さん、もう一つ質問があります。
例えば、グラフィックを追加するスクリプトを関数にラップして、そのスクリプトをグラフビルダーに追加するとします。
この関数は、ディスプレイボックスへの参照を受け取り、対応するフレームボックスを見つけてスクリプトを追加するだけでよい。
現在、私の関数では、Graph BuilderをContext Boxでラップする必要があります。そうすることで、このスクリプトを使用して作成(具体的にはハンドル)する要素が、同じウィンドウ内の他のGraph Builderにある要素から独立するようにしています。
質問 - 分離されたコンテキストを保存するために、関数にどのような表示ボックスを指定すればよいでしょうか? XML には EvalContextBox がありますが、これは「Context Box」によって生成されたものでしょうか?
関数内の構文はどうなりますか?関数にはコンテキストボックスがないため、「box」名前空間を削除する必要があります。この場合、コンテキストをどのように制限すればよいでしょうか?
件名:グラフィックスクリプトのトラブルシューティングに関するヘルプが必要です:「グラフィックスクリプトがログにエラーを報告しました」関数に渡したいものが何なのか、少し混乱しています。グラフビルダーへの参照だけでしょうか?グラフビルダーはコンテキストボックス内に保持されるのでしょうか?
件名:グラフィックスクリプトのトラブルシューティングに関するヘルプが必要です:「グラフィックスクリプトがログにエラーを報告しました」それが私の疑問の一つです。関数に何を渡すべきか、そしてこの場合、コンテキストボックスはまだ必要なのか。
現在、私のスクリプトは次のような構造になっています。
//Preparing display boxes structure and window
lub = Lineup Box( N );
ob_group = Outline Box( "Report: " || (dt << Get Name) );
ob_group << Append( lub );
nw = New Window( (dt << get name), Window View("Invisible"), ob_group );
次に、データテーブルを使用してプロットしたい項目などを選択し、この関数を使用して内部にグラフビルダーを含むコンテキストボックスを作成し、コンテキストボックスを返します。
GB_func = Function( {dt, X_parameter, Y_Parameter...},
cb = Context Box(
gb = Graph Builder(...
//
<GRAPH builder="" code="">
); box:rgb = gb << Report; //Doing some other stuff //Adding Graphics Script box:framebox = box:rgb << XPATH( "//FrameBox" ); box:framebox << Add Graphics Script(...) Return( cb ); );
</GRAPH>
次に、プロットする必要のある列を選択し、それぞれの列に対して、内部にグラフビルダープラットフォームを備えたコンテキストボックスを作成します。
For Each( {Y_Parameter, index}, Y_Parameters,
lub << Append( GB_func( dt, X_Parameter, Y_Parameter));
);
私が求めているのは、各グラフビルダーに必要な表示ボックスや参照を渡すと、他のグラフビルダーとは独立して、現在と同じように動作するグラフィックスクリプトを追加する関数です。
最終目標は、グラフビルダーのコンテキストメニューからプロット上の追加グラフィックの表示/非表示を切り替えられるようにすることです。グラフィックありとグラフィックなしの両方のユースケースが存在します。グラフィックスクリプトの削除は問題ないはずですが、このケースでどのように追加すればよいかを検討中です。
件名:グラフィックスクリプトのトラブルシューティングに関するヘルプが必要です:「グラフィックスクリプトがログにエラーを報告しました」コンテキストボックスを渡すのが最も簡単な方法でしょう。また、「グローバル」な値をボックス以外の名前空間(ここでは、window、global、named、anonymousなど)に格納することもできます。その場合は、コンテキストボックスを省略して、グラフビルダーの参照を渡すことができます。
件名:グラフィックスクリプトのトラブルシューティングに関するヘルプが必要です:「グラフィックスクリプトがログにエラーを報告しました」Context Box が作成する Display Box とは何ですか? EvalContextBox でしょうか? グラフィック スクリプト内の変数が、その EvalContextBox の範囲内でのみ有効になるように指定するにはどうすればよいですか?単に box 名前空間を使用すればよいのでしょうか? それとも、EvalContextBox に関連付けられた名前空間参照を取得する方法があるのでしょうか?
件名:グラフィックスクリプトのトラブルシューティングに関するヘルプが必要です:「グラフィックスクリプトがログにエラーを報告しました」Namespace() を使用できます
Names Default To Here(1);
nw = New Window("",
Context Box(
box:var = "",
box:tb = Text Edit Box("AA", <
<SET function=""></SET>
<P>テキスト編集ボックスの値を変更して、最後の行をもう一度実行してください。</P>