使用系统 pause/sleep 逐步绘制
Plot progressively using system pause/sleep
我有以下代码,但它没有按预期工作。
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 循环不存在一样。
这是它的工作原理:
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"))
我有以下代码,但它没有按预期工作。
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 循环不存在一样。
这是它的工作原理:
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"))