x和y的大小必须相同错误-K-均值散点图

时间:2018-07-10 01:10:03

标签: python matplotlib jupyter-notebook data-visualization scatter-plot

我正在尝试绘制散点图,该散点图基于在数据集上运行的K-means算法显示质心和聚类。因此,它看起来应该像这样: Scatter Plot Example

但是,我的代码不断抛出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))

1 个答案:

答案 0 :(得分:0)

根据docplt.scatter的前两个参数应为点的x和y坐标。

在您的代码中,

plt.scatter(centroids, labels)

您正在告诉函数centroidslabels是x和y坐标。

您想做的应该是

plt.scatter(values[:,0], values[:,1], c=labels)       # Original points
plt.scatter(centroids[:,0], centroids[:,1], c=[0, 1]) # Clusters centroids