<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 が反転またはバウンスしているように見える場合は、一方向ループに前後に進むフレームがあることが原因です。上のループは 1 つの sin 波用です (見た目は 3 周期ではありません)。それでも、これは適度に大きいファイルです: 130K バイトに 19 フレーム。
以下は添付ファイルと同じである必要があります。スクリプトの最後の 1/3 のループで、データ テーブル内のデータを変更してグラフ ビルダーの出力を操作し、写真を撮る様子がわかります。中央の 1/3 はグラフ ビルダーを設定していますが、画像がフレーム内から取得され、軸とラベルが無視されているため、おそらくそれほど複雑にする必要はありません。最初のビットは、操作できるパラメータのセットです。最後の行はグラフを開こうとします。
// このスクリプトには、アニメーション GIF ファイルを保存できる Windows JMP 13 が必要です。
// 残念ながら、Mac バージョンの JMP はまだこの GIF 機能をサポートしていません。
nバー = 50; // アニメーション化するバーは何本ですか?
xsize=800; // 画像の寸法
ysize=100;
nフレーム = 19; // ループ内のフレーム数
フレームMS = 1000/24; // フレームの継続時間 (1/1000 秒) (1000/24 == 24 FPS)
期間=3; // アニメーション ループをスムーズにするには整数でなければなりません
targetFile = "$desktop/DeleteMeAnimated.gif";
// アニメーション用のデータテーブルテンプレートを作成します
dt = 新しいテーブル( "animate"、addrows(nBars)、新しい列( "ID"、formula(row()) )、新しい列( "値"、formula(sin(2*pi()*row()/ nBars)) ) );
dt<<実行式; dt:Value<<式を削除; // 数式を削除します。グラフビルダーには欠落していない初期データが必要です
// プレースホルダーグラフを作成します。注: インタラクティブなグラフ ビルダーを使用してグラフを作成し、
// スクリプトの保存を使用してこの JSL を作成します。後で小さな編集を行います。
gb = dt<<グラフビルダー(
サイズ( xsize, ysize )、コントロールパネルの表示( 0 )、凡例の表示( 0 )、フッターの表示( 0 )、スケールのロック( 1 )、
変数( X( :ID ), Y( :Value ), Color( :Value ) )、要素( Bar( X, Y, Legend( 9 ) ) )、
SendToReport( Dispatch( {}, "ID", ScaleBox,
{Min( 0 )、Max( nBars+1 )、Inc( 2 )、マイナー ティック( 1 )、ラベル行(
{自動フォント サイズ ( 0 )、自動目盛り ( 0 )、主ラベルの表示 ( 0 )、主目盛りの表示 ( 0 )、副目盛りの表示 ( 0 )}
)} )、
Dispatch( {}, "値", ScaleBox,
{最小( -1.092929 )、最大( 1.10606060606061 )、増分( 0.5 )、マイナーティック( 1 )、ラベル行(
{自動フォント サイズ ( 0 )、自動目盛り ( 0 )、主ラベルの表示 ( 0 )、主目盛りの表示 ( 0 )、副目盛りの表示 ( 0 )}
)} )、
Dispatch( {}, "400", ScaleBox, {凡例モデル( 9, Properties( 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( "" )} )
)
);
// フレーム ボックスを必要な正確なサイズにします。後で
// <
// 不要な境界線
(レポート(gb)[フレームボックス(1)])<<フレームサイズ(xsize+2,ysize+2);
待機(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 << 更新ウィンドウ;
img = (レポート(gb)[フレームボックス(1)])<
フルサイズ = img<<サイズ;
// 3 ピクセルの境界線と境界線をトリミングします。ちょっとした試行錯誤…。
img<
//newsize=img<
//show(フルサイズ,ニューサイズ); // パラメーター
if ( iFrame == 1,
最終画像 = 画像; // 最初の画像からアニメーション GIF を開始します
、 // それ以外
FinalImage<
FinalImage<
);
FinalImage<
);
gb<<ウィンドウを閉じる;
閉じる(dt,nosave);
FinalImage<
show(ファイルサイズ(ターゲットファイル));
オープン(ターゲットファイル); // ブラウザでのデモ、たぶん。