<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />JMP 13 の詳細: JMP 13 のプレビュー | JMPとJMP 13 の発表、Discovery Summit から生中継 | JMP
ジョン・ポンテWindows 上の JMP 13 にいくつかのアニメーション GIF 機能を追加しました。
バブル プロット アニメーションをアニメーション GIF として保存する
データ フィルター アニメーションをアニメーション GIF として保存する
別の例を次に示します。

100 年未満のほぼすべてのブラウザーが、アニメーション GIF をサポートしています。JMP 13 はそれらのビルドをサポートしています。添付の JSL は、グラフのフレーム (軸なし、タイトルなし) からビットマップをキャプチャし、アニメーション GIF に格納する 1 つの方法を示しています。
アニメーションの各フレームには独自の継続時間があります。通常、すべてのフレームは同じ持続時間を持つ必要があります。ループ回数を指定できます。ご覧のとおり、永遠にループするのは面倒です。ループは一方向にしか再生できません。GIF が反転またはバウンスするように見える場合は、一方向ループに前後に移動するフレームがあるためです。上記のループは、単一の正弦波用です (3 周期と思われるものではありません)。それでも、130K バイトで 19 フレームの適度に大きなファイルです。
以下は、添付ファイルと同じである必要があります。スクリプトの最後の 1/3 のループが、データ テーブルのデータを変更してグラフ ビルダーの出力を操作し、写真を撮っている様子を見ることができます。中央の 1/3 はグラフ ビルダーを設定していますが、画像はフレームの内側から取得され、軸とラベルは無視されるため、おそらくそれほど複雑にする必要はありませんでした。最初のビットは、操作できるパラメーターのセットです。最後の行は、グラフを開こうとします。
// このスクリプトには、アニメーション GIF ファイルを保存できる Windows JMP 13 が必要です。
// 残念ながら、JMP の Mac 版はこの GIF 機能をまだサポートしていません。
nBars = 50; // アニメーション バーの数は?
xsize=800; // 画像の寸法
ysize=100;
nFrames = 19; // ループ内のフレーム数
フレームMS = 1000/24; // 1/1000 秒単位のフレームの長さ (1000/24 == 24 FPS)
ピリオド=3; // スムーズなアニメーション ループのためには整数でなければなりません
targetFile = "$desktop/DeleteMeAnimated.gif";
// アニメーション用のデータ テーブル テンプレートを作成します
dt = New Table( "animate", addrows(nBars), New Column( "ID", formula(row()) ), New Column( "Value", formula(sin(2*pi()*row()/)) nBars)) ) );
dt<<実行式; dt:Value<
// プレースホルダー グラフを作成します。注: インタラクティブなグラフ ビルダーを使用してグラフを作成します。
// Save Script を使用してこの JSL を作成します!後でマイナーな編集を行います。
gb = dt<<グラフビルダー(
サイズ ( xsize, ysize )、コントロール パネルの表示 ( 0 )、凡例の表示 ( 0 )、フッターの表示 ( 0 )、スケールのロック ( 1 )、
Variables( X( :ID ), Y( :Value ), Color( :Value ) ), Elements( Bar( X, Y, Legend( 9 ) ) ),
SendToReport( Dispatch( {}, "ID", ScaleBox,
{Min( 0 ), Max( nBars+1 ), Inc( 2 ), Minor Ticks( 1 ), Label Row(
{自動フォント サイズ( 0 )、自動目盛り( 0 )、主ラベルの表示( 0 )、主目盛りの表示( 0 )、副目盛りの表示( 0 )}
)} )、
Dispatch( {}, "値", ScaleBox,
{Min( -1.092929 ), Max( 1.10606060606061 ), Inc( 0.5 ), Minor Ticks( 1 ), Label Row(
{自動フォント サイズ( 0 )、自動目盛り( 0 )、主ラベルの表示( 0 )、主目盛りの表示( 0 )、副目盛りの表示( 0 )}
)} )、
Dispatch( {}, "400", ScaleBox, {凡例モデル( 9, プロパティ( 0,
{gradient( {Color Theme( "Green to Black to Red" ), Scale Values( [-1 1] ), Label Format( "Fixed Dec", 15, 1 ),
逆勾配(1)、N個のラベル(5)}
)} ) )} ),
Dispatch( {}, "グラフのタイトル", TextEditBox, {Set Text( "" )} ),
Dispatch( {}, "X タイトル", TextEditBox, {Set Text( "" )} ),
Dispatch( {}, "Y タイトル", TextEditBox, {Set Text( "" )} )
)
);
// フレーム ボックスを必要な正確なサイズにします。後で
// <
// 不要な境界線
(report(gb)[framebox(1)])<
待ちます(0); // グラフが表示されていることを確認します。必須ではありませんが、進行状況を示します。
For( iFrame = 1, iFrame <= nFrames, iFrame++,
frameFraction = iFrame / (期間*nFrames);
// バーの位相をすべてずらします
For( iPhase = 1, iPhase <= nBars, iPhase++,
PhaseFraction = iPhase / nBars;
dt:Value[iPhase] = Sin( 期間 * (frameFraction * 2 * Pi() + PhaseFraction * 2 * Pi()) );
);
// バーの高さが新しくなりました。写真を撮る
gb << updatewindow;
img = ( report(gb)[framebox( 1 )] )<
fullsize = img<<サイズ;
// 3 ピクセルの境界線と境界線をトリミングします。ちょっと試行錯誤…
img<
//newsize=画像<<サイズ; // サイズとクロップを計算する
//show(フルサイズ、ニュースサイズ); // パラメーター
if ( iFrame == 1,
finalImage = img; // 最初の画像からアニメーション gif を開始します
、 // それ以外
finalImage<
finalImage<
);
finalImage<
);
gb<
閉じる (dt、nosave);
finalImage<
表示 (ファイルサイズ (ターゲットファイル));
オープン (対象ファイル); // ブラウザでのデモ、たぶん。