plt.散射():由于“c”参数,ValueError

2024-04-27 07:27:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在绘制星团的散点图。
与sklearn.cluster.KMeans方法我得到一个和我的2D矩阵X一样长的列表。。。你知道吗

跑步

k = 5
df = pd.read_csv('data_latlong.csv')
lat = df['Lat'].values
long = df['Long'].values

X = np.matrix(list(zip(lat, long)))
kmeans = KMeans(n_clusters=k).fit(X)

plt.figure(figsize=(10, 10))
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_)
plt.title("n = 5")
plt.show()

提供以下值错误:
ValueError:“c”参数有3909个元素,不能与大小为3909的“x”和大小为3909的“y”一起使用。

有什么建议吗?
谢谢!你知道吗

溶液-正确制备X:
而不是
X = np.matrix(list(zip(lat, long)))
我用过
X = np.array([lat, long]).T

.T用于转置(而不是使用zip())-然后我得到了X[:, 0]X[:, 1]的正确形状!你知道吗


Tags: csvdfnp绘制pltsklearnzipmatrix
1条回答
网友
1楼 · 发布于 2024-04-27 07:27:07

TL;DR:试试c=kmeans.labels_.reshape(kmeans.labels_.shape[0])。这将把标签从(3909,1)数组转换为(3909,1)向量。你知道吗

你在sklearn“iris”数据集上所做的一切对我很有用:

from sklearn import datasets
from sklearn.cluster import KMeans
from matplotlib import pyplot as plt

irises = datasets.load_iris()
X = irises['data']
clust = KMeans(n_clusters=3).fit(X)

plt.figure(figsize=(10, 10))
plt.scatter(X[:, 0], X[:, 1], c=clust.labels_)

print(X.shape)             # (150, 4)
print(clust.labels_.shape) # (150,)

enter image description here

注意,我的clust.labels_是一个(150,)向量。相反,如果我将其重塑为a(150,1)并尝试传递它,我会得到与您相同的错误:

c_bad = clust.labels_.reshape((150,1))
plt.scatter(X[:, 0], X[:, 1], c=c_bad) # fails

所以我想我们有不同版本的sklearn,我的标签放在向量中,而你的标签放在数组中。解决方法是反其道而行之,并尝试将标签从数组重塑为向量:

plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_.reshape(3909))

另请参见

相关问题 更多 >