2017-04-21 3 views
0

Ich habe das folgende Stück Code, aber es funktioniert nicht wie erwartet.Plot progressiv mit System Pause/Schlaf

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) 
} 

Ich kann die Schleife entfernen und plotten sie alle auf einmal. Stattdessen möchte ich die ersten drei Datenzeilen, dann vier Zeilen nach einer Lücke von 0,001s, dann 5 und so weiter darstellen. Es wird schließlich alle Datenpunkte plotten.

Ich möchte den Prozess erfassen, so dass ich ein Video oder GIF erstellen kann, das zeigt, wie sich die Addition jedes Punktes auf die Clusterisierung auswirkt. Aber dieser Plot zeichnet alles auf einmal auf, anstatt schrittweise, als ob die for-Schleife nicht existiert. Diese

+1

Wenn Sie animierte Diagramme zu erzeugen, Blick auf die 'animation' Paket: es könnte Sie benötigen, um Ihren Code ein wenig restrukturieren, sondern ein Video produziert an das Ende viel einfacher. – Marius

+0

0,001 Sekunden ist sehr kurz! Vielleicht erhöhen Sie das auf 0,1s –

+0

Ja, es funktioniert jetzt. Vielen Dank – vipin8169

Antwort

0

ist, wie es funktioniert:

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"))