frames = []
for k in list_k[1:-2]:
km = KMeans(n_clusters=k, max_iter=100, n_init=2)
km = km.fit(df1)
frames.append(go.Frame(
data=[go.Scatter(x=df1[:,0], y=df1[:,1], mode='markers',
marker=dict(color=km.labels_, size=7),
name=f'K: {k}'),
go.Scatter(
x=km.cluster_centers_[:,0],
y=km.cluster_centers_[:,1],
name="Centroid", mode="markers",
marker=dict(color='black', size=10, symbol='star'))],
name=f'{k}'))
km = KMeans(n_clusters=2, max_iter=100, n_init=2)
km = km.fit(df1)
# Plotting
fig_km2 = go.Figure(
data=[go.Scatter(x=df1[:,0], y=df1[:,1], mode='markers',
marker=dict(color=km.labels_, size=7)),
go.Scatter(
x=km.cluster_centers_[:,0],
y=km.cluster_centers_[:,1],
name="Centroid", mode="markers",
marker=dict(color='black', size=15, symbol='star'))],
layout=go.Layout(
title="KMeans iteration",
xaxis=dict(title="X1", range=[-15, 7]),
yaxis=dict(title="X2", range=[-15, 17]),
updatemenus=[{
"buttons": [
{
"args": [None, {"frame": {"duration": 1000, "redraw": True}, "fromcurrent": True, "mode": "immediate"}],
"label": "Play",
"method": "animate"
},
{
"args": [[None], {"frame": {"duration": 0, "redraw": False}, "mode": "immediate"}],
"label": "Stop",
"method": "animate"
}
],
"type": "buttons",
"showactive": False,
"x": 0,
"y": 1.25,
"pad": {"r": 10, "t": 50}
}],
sliders=[{
"active": 0,
"currentvalue": {"prefix": "K: "},
"pad": {"t": 50},
"steps": [{"label": f"{i}",
"method": "animate",
"args": [[f'{i}'], {"frame": {"duration": 1000, "redraw": True}, "mode": "immediate",
"transition": {"duration": 10}}]}
for i in list_k[1:-2]]
}]
),
frames=frames)
# Update layout
fig_km2.update_layout(
width=450, height=450,
title="KMeans Algorithm with different K")
fig_km2.show()