使用系统暂停/睡眠逐步绘制

时间:2017-04-21 06:37:18

标签: r plot ggplot2 cluster-analysis

我有以下代码,但它没有按预期工作。

for(i in 3:nrow(pima_diabetes_kmean)){
  k.means.fit <- kmeans(pima_diabetes_kmean[1:i, c("Pregnancy", "Age")], 2)
  plot(
    pima_diabetes_kmean[1:i, c("Pregnancy", "Age")],
    col = alpha(k.means.fit$cluster, 0.2),
    pch = 20,
    cex = 3, main = "Clusters predicted by models"
  )
  points(
    k.means.fit$centers,
    pch = 4,
    cex = 4,
    lwd = 4,
    col = "blue"
  )
  Sys.sleep(0.001)
}

我可以删除循环并立即绘制所有内容。但相反,我想绘制前3行数据,然后绘制在0.001s之后的4行,然后是5,依此类推。它最终将绘制所有数据点。

我想捕获这个过程,以便我可以创建一个视频或gif,显示每个点的添加如何影响群集。但是这个情节正在同时绘制所有情节,而不是逐步绘制,就像for循环不存在一样。

1 个答案:

答案 0 :(得分:0)

这就是它的工作原理:

png(file="kMeanPlot%03d.png", width=719, height=539)
for(i in seq(3, nrow(pima_diabetes_kmean), by = 20)){
  k.means.fit <- kmeans(pima_diabetes_kmean[1:i, c("Pregnancy", "Age")], 2)
  plot(
    pima_diabetes_kmean[1:i, c("Pregnancy", "Age")],
    col = alpha(k.means.fit$cluster, 0.2),
    pch = 20,
    cex = 3, main = "Clusters predicted by models"
  )
  points(
    k.means.fit$centers,
    pch = 4,
    cex = 4,
    lwd = 4,
    col = "blue"
  )
}
dev.off()

# convert the .png files to one .gif file using ImageMagick. 
# The system()/shell() function executes the command as if it was done
# in the terminal. the -delay flag sets the time between showing
# the frames, i.e. the speed of the animation.
# You will need to install the imagemagick for this
# Following command for non-windows OS
# system("C:/Program Files/ImageMagick-7.0.5-Q16/convert -delay 80 *.png fucked.gif") 
# Following command for Windows OS
shell("convert -delay 40 *.png kMeanPlot.gif")

# to not leave the directory with the single png files I remove them.
file.remove(list.files(pattern="[kMeanPlot]*.png"))