<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />有关 JMP 13 的更多信息:预览 JMP 13 | JMP和宣布 JMP 13,在探索峰会现场直播 | JMP
约翰庞特在 Windows 上为 JMP 13 添加了一些动画 GIF 功能,
将气泡图动画保存为动画 GIF
将数据过滤器动画另存为动画 GIF
这是另一个例子。

几乎所有不到 100 年历史的浏览器都支持 GIF 动画。JMP 13 支持构建它们。附加的 JSL 显示了一种从图形框架(无轴、无标题)捕获位图并将它们存储在动画 GIF 中的方法。
动画中的每一帧都可以有自己的持续时间;通常,所有帧都应具有相同的持续时间。可以指定循环数。如您所见,永远循环很烦人。循环只能在一个方向上播放。如果您看到一个 GIF 图像似乎反转或跳动,那是因为单向循环中有帧向前和向后移动。上面的循环是针对单个正弦波的(不是它看起来的三个周期)。尽管如此,它还是一个中等大小的文件:19 帧,130K 字节。
以下应与附件相同。您可以看到脚本最后 1/3 的循环如何更改数据表中的数据以操纵图形构建器输出,然后拍照。中间的 1/3 是设置图形生成器,可能不需要那么复杂,因为图像是从框架内部拍摄的,忽略了轴和标签。第一位是您可以使用的一组参数。最后一行尝试打开图形。
// 此脚本需要 Windows JMP 13,它可以保存动画 gif 文件。
// 遗憾的是,JMP 的 Mac 版本尚不支持此 GIF 功能。
n 条 = 50; // 有多少个动画条?
x大小=800; // 图片尺寸
尺寸=100;
n 帧 = 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", 公式(sin(2*pi()*row()/ nBars)) ) );
dt<<运行公式; dt:值<<删除公式; // 删除公式。图形生成器需要非缺失的初始数据
// 制作一个占位图。注意:使用交互式 Graph Builder 制作图表,并且
// 使用保存脚本制作这个 JSL!稍后做小的修改。
gb = dt<<图形生成器(
大小(xsize,ysize),显示控制面板(0),显示图例(0),显示页脚(0),锁定比例(1),
变量( X( :ID ), Y( :Value ), 颜色( :Value ) ), 元素( Bar( X, Y, Legend( 9 ) ) ),
SendToReport( 调度( {}, "ID", ScaleBox,
{Min( 0 ), Max( nBars+1 ), Inc( 2 ), Minor Ticks( 1 ), Label Row(
{自动字体大小(0),自动刻度线(0),显示主要标签(0),显示主要刻度(0),显示次要刻度(0)}
)}),
调度({},“值”,ScaleBox,
{Min( -1.092929 ), Max( 1.10606060606061 ), Inc( 0.5 ), Minor Ticks( 1 ), Label Row(
{自动字体大小(0),自动刻度线(0),显示主要标签(0),显示主要刻度(0),显示次要刻度(0)}
)}),
调度({},“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 title", TextEditBox, {Set Text( "" )} ),
Dispatch({}, "Y title", TextEditBox, {Set Text( "" )} )
)
);
// 使框架框达到所需的确切大小;之后
// <
//不需要的边框线
(报告(gb)[framebox(1)])<
等待(0); // 确保图形可见。不需要,但显示进度。
对于( iFrame = 1, iFrame <= nFrames, iFrame++,
frameFraction = iFrame / (periods*nFrames);
// 使条形图全部异相
对于 ( iPhase = 1, iPhase <= nBars, iPhase++,
phaseFraction = iPhase / nBars;
dt:Value[iPhase] = Sin( periods * (frameFraction * 2 * Pi() + phaseFraction * 2 * Pi()) );
);
// 条形有新的高度;拍照
gb << 更新窗口;
img = ( report(gb)[framebox( 1 )] )<
全尺寸 = img<<尺寸;
// 裁剪 3 像素边框和边框线。一点点试错……
img<
//新闻大小=img<<大小; // 确定大小和裁剪
//显示(全尺寸,新闻尺寸); // 参数
如果 ( iFrame == 1,
最终图像= img; // 从第一张图片开始动画 gif
, // 别的
最终图像<<添加帧; // 为后续图像添加帧并设置新帧的
finalImage<
);
finalImage<
);
gb<<关闭窗口;
关闭(dt,不保存);
finalImage<
显示(文件大小(目标文件));
打开(目标文件); // 也许在浏览器中演示。