R中的动画无需保存数字且无需外部软件

时间:2015-05-15 07:29:02

标签: r matlab animation plot figure

是否可以直接在R中创建动画,如在Matlab中,而不实际保存数字和使用外部软件?只是执行一个脚本?

在Matlab中考虑以下示例。

t = (1:360) / 180 * pi;    % 360 angles in radians from 1 to 360 degrees
n = length(t);    % Length of vector
x = cos(t);    % Cosines
y = sin(t);    % Sines
f = figure;    % Create figure and its handle
hh = plot(2, 2, 'or', 'MarkerFaceColor', 'r', 'MarkerSize', 10);    % Create plot and its handle
set(gca, 'XLim', [-1 1]);    % Set x axis limits
set(gca, 'YLim', [-1 1]);    % Set y axis limits
axis square; axis off;    % Set more properties for axes

while ishandle(f)    % Until the user closes the figure
  try    % Try this loop, if encouter an error just break the loop
    for ii = 1:n    % For all angles
      set(hh, 'XData', x(ii))    % Change point x coordinate
      set(hh, 'YData', y(ii))    % Change point y coordinate
      pause(0.01)    % Make a little pause
    end
  end
end

hrbrmstr 的回答之后,我试过了这个:

t <- (1:360) / 180 * pi
n <- length(t)
x <- cos(t)
y <- sin(t)

while(TRUE) {
  for (i in 1:n) {
    plot(x[i], y[i], ann=FALSE, pch=20, axes=FALSE, xlim=c(-1, 1), ylim=c(-1, 1), col="red", cex=4, asp=1)
    Sys.sleep(0.01)
  }
}

它似乎在做这项工作。谢谢!

我也试过这个:

t <- (1:360) / 180 * pi
n <- length(t)
x <- cos(t)
y <- sin(t)

while(TRUE) {
  for (i in 1:n) {
    plot.new()
    usr<-par("usr")
    par(usr=c(-1.1, 1.1, -1.1, 1.1))
    lines(x, y, col="green")
    points(x[i], y[i], pch=20, col="red", cex=4, asp=1)
    Sys.sleep(0.01)
  }
}

这更接近我最初的想法。然而,我发现R的“纸和笔”绘图模型非常糟糕。是不是有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

我不打算弄清楚所有matlab绘图都在做什么,而不是美学。

此:

while(TRUE) {
  barplot(sample(1:1000, 10))
  Sys.sleep(0.5)
}

“动画”随机条形图显示IMO和:

t <- (1:360) / 180 * pi
n <- length(t)
x <- cos(t)
y <- sin(t)

for (i in 1:n) {
  plot(x[1:i], y[1:i], type="p")
  Sys.sleep(0.15)
}

以一种方式完成点的“动画”的一个基本位,并且:

for (i in 1:n) {
  plot.new()
  points(x[1:i], y[1:i])
  Sys.sleep(0.15)
}

在另一个(虽然需要一些工作设置x&amp; y限制以避免图形设备错误)。

当GUI要求“停止”或for循环完成时,所有三个停止。

不完全“不成比例地复杂”。更像是“对matlab人不熟悉”。