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

几乎所有历史不到 100 年的浏览器都支持动画 GIF。JMP 13 支持构建它们。附加的 JSL 显示了一种从图形框架(无轴、无标题)捕获位图并将其存储在动画 GIF 中的方法。
动画中的每一帧都可以有自己的持续时间;一般来说,所有帧应该具有相同的持续时间。可以指定循环次数。正如您所看到的,永远循环很烦人。循环只能朝一个方向播放。如果您看到 GIF 出现反转或弹跳,这是因为单向循环具有向前和向后的帧。上面的循环适用于单个正弦波(而不是看起来的三个周期)。即便如此,它仍然是一个相当大的文件:130K 字节中有 19 帧。
以下应与附件相同。您可以看到脚本最后 1/3 中的循环如何更改数据表中的数据以操作图形生成器输出,然后拍照。中间的 1/3 正在设置图形生成器,可能不需要那么复杂,因为图像是从框架内部获取的,并且忽略了轴和标签。第一个位是一组可以使用的参数。最后一行尝试打开图表。
// 此脚本需要 Windows JMP 13,它可以保存动画 gif 文件。
// 不幸的是,Mac 版本的 JMP 尚不支持此 GIF 功能。
nBars = 50; // 有多少个动画条?
x大小=800; // 图片尺寸
y 大小=100;
n 帧 = 19; // 循环有多少帧
帧 MS = 1000/24; // 帧的持续时间,以 1/1000 秒为单位 (1000/24 == 24 FPS)
周期=3; // 必须是一个整数才能平滑的动画循环
targetFile = "$desktop/DeleteMeAnimated.gif";
// 为动画制作数据表模板
dt = 新表( "animate", addrows(nBars), 新列( "ID", 公式(row()) ), 新列( "值", 公式(sin(2*pi()*row()/ nBars)) ) );
dt<<运行公式; dt:值<<删除公式; // 删除公式。图形生成器需要非缺失的初始数据
// 制作占位图。注意:使用交互式图形生成器来制作图形,并且
// 使用保存脚本来制作这个 JSL!稍后进行较小的编辑。
gb = dt<<图形生成器(
大小( xsize, ysize ), 显示控制面板( 0 ), 显示图例( 0 ), 显示页脚( 0 ), 锁定比例( 1 ),
变量( X( :ID )、Y( :值 )、颜色( :值 ) )、元素(条形图( X, Y, 图例( 9 ) ) ),
SendToReport( 调度( {}, "ID", ScaleBox,
{Min( 0 ), Max( nBars+1 ), Inc( 2 ), 小刻度( 1 ), 标签行(
{自动字体大小( 0 )、自动刻度线( 0 )、显示主要标签( 0 )、显示主要刻度( 0 )、显示次要刻度( 0 )}
)} ),
调度({},“值”,ScaleBox,
{最小值( -1.092929 ), 最大值( 1.10606060606061 ), Inc( 0.5 ), 小刻度( 1 ), 标签行(
{自动字体大小( 0 )、自动刻度线( 0 )、显示主要标签( 0 )、显示主要刻度( 0 )、显示次要刻度( 0 )}
)} ),
Dispatch( {}, "400", ScaleBox, {图例模型( 9, 属性( 0,
{渐变( {颜色主题( "绿到黑到红" ), 比例值( [-1 1] ), 标签格式( "固定十进制", 15, 1 ),
反向梯度( 1 ), N 个标签( 5 )}
)} ) )} ),
Dispatch( {}, "图表标题", TextEditBox, {设置文本( "" )} ),
Dispatch( {}, "X 标题", TextEditBox, {设置文本( "" )} ),
Dispatch( {}, "Y 标题", TextEditBox, {设置文本( "" )} )
)
);
// 使框架盒达到所需的确切尺寸;之后
// <
// 不需要的边框线
(报告(gb)[framebox(1)])<
等待(0); // 确保图表可见。不是必需的,但显示进度。
对于( iFrame = 1, iFrame <= nFrames, iFrame++,
FrameFraction = iFrame / (周期*nFrames);
// 使条形全部异相
对于( iPhase = 1, iPhase <= nBars, iPhase++,
相位分数 = iPhase / nBars;
dt:Value[iPhase] = Sin( 周期 * (frameFraction * 2 * Pi() + PhaseFraction * 2 * Pi()) );
);
// 条形有新的高度;拍张照片
gb << 更新窗口;
img = ( 报告(gb)[framebox( 1 )] )<
全尺寸 = img<< 尺寸;
// 裁剪 3 像素边框和边框线。一点点尝试和错误...
img<
//newsize=img<<大小; // 计算出尺寸和裁剪
//显示(全尺寸,新尺寸); // 参数
如果 ( iFrame == 1,
最终图像 = img; // 从第一张图像开始动画 gif
, // 别的
最终图像<
FinalImage<
);
FinalImage<
);
gb<<关闭窗口;
关闭(dt,nosave);
FinalImage<
显示(文件大小(目标文件));
打开(目标文件); // 也许可以在浏览器中演示。