我正在尝试绘制散点图,该散点图基于在数据集上运行的K-means算法显示质心和聚类。因此,它看起来应该像这样:
但是,我的代码不断抛出x和y必须为相同的大小错误。这是我正在使用的功能:
tmp_IPS.txt
我正在使用的数据或“值”如下所示:
import numpy as np
import matplotlib.pyplot as plt
def thefunction(filedata, centroids, labels, cmap_name='seaice_2'):
df = pd.read_table('filedata',sep=' ', index_col= 0, skiprows = 6).iloc[:, 0:].dropna()
values = df.values.reshape((len(df),2))
centroids,labels = vq.kmeans2(values, 3, minit='points')
plt.plot()
plt.xlim([0, 10])
plt.ylim([0, 10])
plt.title('Dataset')
plt.scatter(centroids, labels)
plt.show()
# create new plot and data
plt.plot()
X = np.array(list(zip(centroids, labels))).reshape(len(centroids), 2)
colors = ['b', 'g', 'r']
markers = ['o', 'v', 's']
# KMeans algorithm
K = 3
kmeans_model = KMeans(n_clusters=K).fit(X)
plt.plot()
for i, l in enumerate(kmeans_model.labels_):
plt.plot(centroids[i], labels(df1)[i], color=colors[l], marker=markers[l],ls='None')
plt.xlim([0, 10])
plt.ylim([0, 10])
plt.show()
在数据上运行的kmeans算法返回如下内容:
array([[20., 20.],
[30., 30.],
[ 40., 40.],
[50., 50.],
[60., 60.],
[70., 70.]
堆栈跟踪:
centroids,labels = vq.kmeans2(values, 2, minit='points')
centroids, labels
(array([[10.123, 20.232 ],
[27.526, 18895]]),
array([1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0,
1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1,
0, 0, 1], dtype=int32))
答案 0 :(得分:0)
根据doc,plt.scatter
的前两个参数应为点的x和y坐标。
在您的代码中,
plt.scatter(centroids, labels)
您正在告诉函数centroids
和labels
是x和y坐标。
您想做的应该是
plt.scatter(values[:,0], values[:,1], c=labels) # Original points
plt.scatter(centroids[:,0], centroids[:,1], c=[0, 1]) # Clusters centroids