2015-05-15 40 views
-1

是否有可能直接在R中創建動畫,如同在Matlab中一樣,而沒有真正保存圖形和使用外部軟件?只是執行一個腳本?R中的動畫沒有保存圖形,也沒有外部軟件

考慮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的「紙和筆」繪圖模型太糟糕了。沒有辦法解決這個問題嗎?

+4

在問這個問題之前你有搜索嗎? –

+0

我發現了動畫包,外部軟件,但沒有像我的問題那麼簡單。 – rappr

+1

你可能想要這樣的東西:http://en.wikipedia.org/wiki/R_%28programming_language%29#Example_2 – user1436187

回答

1

我並不是要試圖弄清楚所有的matlab繪圖在做什麼w/r/t美學。

此:

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 & y限制以避免圖形設備錯誤)。

當GUI被要求「停止」或當for循環完成時,所有三個都停止。

不完全「不成比例地複雜」。更像是「對matlab人不熟悉」。