cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
The Discovery Summit 2025 Call for Content is open! Submit an abstract today to present at our premier analytics conference.

Get the free JMP Student Edition for qualified students and instructors at degree granting institutions.

Choose Language Hide Translation Bar
View Original Published Thread

Y 軸を対数スケールにするスクリプト

Lharbicht
Level III

こんにちは、

 

積み重ねられたデータを使用して複数のヒストグラムを作成するスクリプトがあります。 ヒストグラムで使用される Y 軸は積み上げデータ列 :Data で、ヒストグラムで使用される X 軸は積み上げデータ列ラベル :Chemical Compound です。 次に、ページ (:サンプル ID) を使用して、グラフをサンプルごとに 1 つのグラフに分割します。 スクリプトを使用しているデータセットに応じて、サンプルが 2 つである場合もあれば、100 個のサンプルがある場合もあります。 グラフは正常に機能しますが、Y 軸を対数スケールにしたいと考えています。 これを行うためにコードを挿入する複数の方法を試しましたが、うまく機能するようになったのは対数スケールの 1 つのグラフで、他のグラフはすべて線形です。 コードを添付しました。 ある程度機能している部分は「ScaleBox (2)」です。最初のグラフがログに変更されますが、残りのスケールは線形のままになります。 「ScaleBox」の後に (2) を (3) に変更すると、グループ内の 2 番目のグラフがログに変わりますが、他のグラフは線形のままです。 「ScaleBox」の後の (#) を完全に削除すると、何もログに記録されなくなります。 また、「Left Y Log Scale (1)」を変数領域に挿入しようとしましたが、何も起こりませんでした。

 

スクリプトで実行するデータセットを添付しました。 これに関する助けをいただければ幸いです。

 

ありがとう、

 

 

Graph Builder(
        Show Control Panel( 0 ),
 Variables( X( :Chemical Compound ), Y( :Data ), Page( :SampleID ) ),
 Elements( Bar( X, Y, Legend( 10 ) ) ),
 SendToReport(
   Dispatch(
   {},
   "Data",
   ScaleBox (2),
   {Scale( "Log" ), Format( "Best", 10 ), Min( 0.01 ), Max( 80 ), Inc( 1 ),
   Minor Ticks( 1 )}
  ),
  Dispatch( {}, "400", LegendBox, {Set Title( "" )} ),
 )
);

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

1 ACCEPTED SOLUTION

Accepted Solutions
gzmorgan0
Super User (Alumni)

Re: Y 軸を対数スケールにするスクリプト

私は XPath() を使用するのが好きです。 1 つのメッセージが、見つかったすべてのオブジェクトに適用されます。 以下のスクリプトの最後の 2 行を参照してください。JSL Companion の第 2 版の第 6 章には、Xpath() と Find() のセクションとサンプル スクリプトがあります。 簡単な例は、[スクリプト インデックス] > [表示ボックス] > [xpath の検索] で見つけることができます。XPath の構文と関数の詳細については、ここをクリックしてください。ここ

< https://www.tutorialspoint.com/xpath/xpath_quick_guide.htm >

 

gb = Graph Builder(
        Show Control Panel( 0 ),
 Variables( X( :Chemical Compound ), Y( :Data ), Page( :SampleID ) ),
 Elements( Bar( X, Y, Legend( 10 ) ) ),
 SendToReport(
//   Dispatch(
//   {},
//   "Data",
//   ScaleBox (2),
//   {Scale( "Log" ), Format( "Best", 10 ), Min( 0.01 ), Max( 80 ), Inc( 1 ),
//   Minor Ticks( 1 )}
//  ),
  Dispatch( {}, "400", LegendBox, {Set Title( "" )} ),
 )
);

xx =gb << Xpath( "//ScaleBox[@charID='Data']");

xx << {Scale( "Log" ), Format( "Best", 10 ), Min( 0.01 ), Max( 80 ), Inc( 1 ), Minor Ticks(1) };

 

5 REPLIES 5
pmroz
Super User

Re: Y 軸を対数スケールにするスクリプト

残念ながら、ログ Y 軸メッセージを各グラフ ページに送信する必要があります。このコードは機能しますが、ログにエラーが表示されます。誰かがあなたのためにもっときれいな解決策を見つけてくれることを願っています。

編集 2018 年 4 月 9 日 私は unique_values ではなく id_list をループしていました。修正されたコードは以下です。

Get_unique_values = Function( {in_list},
      {Default Local}, 
      tmp = [=> 0]; 
      Insert Into( tmp, in_list ); 
      tmp << get keys; 
); 

dt = data table("Test Data");

id_list = column(dt, "Sample ID") << get values;
unique_values = get_unique_values(id_list);

gb = dt << Graph Builder(
 Size( 530, 1460 ),
 Show Control Panel( 0 ),
 Variables( X( :Chemical Compound ), Y( :Data ), Page( :Sample ID ) ),
 Elements( Bar( X, Y, Legend( 10 ) ) ),
);

for (i = 1, i <= nitems(unique_values), i++,
 gb << SendToReport(
  Dispatch( {}, "Data", ScaleBox( i + 1 ),
   {Scale( "Log" ), Format( "Best", 10 )}
  )
 );
);

 

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

gzmorgan0
Super User (Alumni)

Re: Y 軸を対数スケールにするスクリプト

私は XPath() を使用するのが好きです。 1 つのメッセージが、見つかったすべてのオブジェクトに適用されます。 以下のスクリプトの最後の 2 行を参照してください。JSL Companion の第 2 版の第 6 章には、Xpath() と Find() のセクションとサンプル スクリプトがあります。 簡単な例は、[スクリプト インデックス] > [表示ボックス] > [xpath の検索] で見つけることができます。XPath の構文と関数の詳細については、ここをクリックしてください。ここ

< https://www.tutorialspoint.com/xpath/xpath_quick_guide.htm >

 

gb = Graph Builder(
        Show Control Panel( 0 ),
 Variables( X( :Chemical Compound ), Y( :Data ), Page( :SampleID ) ),
 Elements( Bar( X, Y, Legend( 10 ) ) ),
 SendToReport(
//   Dispatch(
//   {},
//   "Data",
//   ScaleBox (2),
//   {Scale( "Log" ), Format( "Best", 10 ), Min( 0.01 ), Max( 80 ), Inc( 1 ),
//   Minor Ticks( 1 )}
//  ),
  Dispatch( {}, "400", LegendBox, {Set Title( "" )} ),
 )
);

xx =gb << Xpath( "//ScaleBox[@charID='Data']");

xx << {Scale( "Log" ), Format( "Best", 10 ), Min( 0.01 ), Max( 80 ), Inc( 1 ), Minor Ticks(1) };

 

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

pmroz
Super User

Re: Y 軸を対数スケールにするスクリプト

xpath がこれに使用できるとは知りませんでした。素敵なクリーンなソリューションです!

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

Lharbicht
Level III

Re: Y 軸を対数スケールにするスクリプト

この解決策をありがとう! これについてはもう少し調べてみます。

 

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

Lharbicht
Level III

Re: Y 軸を対数スケールにするスクリプト

こんにちは!

 

私は対数スケールのグラフ作成のニーズにこのソリューションを使用してきました。 とてもうまくいきます。 ただし、多数のサンプル (たとえば > 50) をグラフにしたい場合は、エラーが発生します (以下を参照)。 これまでにこれに遭遇した人はいますか? 「wait();」を追加してみました。前後、さまざまな分野で、私のコードにはもっと時間が必要だと考えていました。 サンプル数が 50 未満の場合は正常に動作しますが、それ以上の場合はエラーが発生します。

ドキュメントの深さが深すぎる: 256 XML_PARSE_HUGE オプションを使用する

'Xpath' のアクセスまたは評価では、Xpath( "//ScaleBox[@charID='Rel TEQ']" ) /*###*/

 

これが私のコードです。

dtstacked3:Parameter3 << set property( "Row Order Levels", 1 );
dtstacked3:Sample ID << set property ("Row Order Levels",1);
gb3 = dtstacked3 << Graph Builder(
 Show Control Panel( 0 ),
 Variables( X( :Parameter3 ), Y( :Rel TEQ ), Page( :Sample ID ), Color( :Rel TEQ 2 ) ),
 Elements( Bar( X, Y, Legend( 6 ) ) ),
 SendToReport(
  Dispatch( {}, "400", ScaleBox, {Legend Model( 6, Properties( 0, {gradient(
      {Color Theme(
       {"Paired Copy 2 2502", 8193, {{254, 207, 132}, {254, 207,
       132}, {254, 207, 132}, {254, 207, 132}, {254, 207, 132},
       {254, 207, 132}, {114, 171, 187}, {114, 171, 187}, {114,
       171, 187}, {114, 171, 187}, {114, 171, 187}}}
      ), Scale Values( [0 1] ), Width( 12 ), Discrete Colors( 1 )}
     )}) )} ),
  Dispatch( {}, "400", LegendBox, {Set Title( "" )} )
 )
);

xx3 = gb3 << Xpath("//ScaleBox[@charID='Rel TEQ']");
xx3 << {Scale("Log"), Format("Best", 10), Min(0.1), Max(80), Inc(1), Minor Ticks(1)};

gb3 << on close( Close( dtstacked3, nosave ) );

ありがとう!

 

レイシー

Recommended Articles

No recommendations found