当 python 中的簇数为 2 时,我的绘图没有显示结果

My plot didn't show the result when the number of clusters is 2 in python

我想在一张图片中显示 7 个不同数量的簇,但它总是从簇 = 3 开始 当我没有使用for循环显示7个图时,它可以显示cluster = 2时的图片,我不知道这里有什么错误

import numpy as np
import resources as re
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn import metrics
from sklearn.model_selection import train_test_split
dataset , h, c = re.load_csv("CIELab_dataset.csv")
Train_data, Test_data = re.train_test_split(dataset, 0.75)
#plt.show()
plt.figure()
order_plot = 1
for i in range (2,9):

  y_pred = KMeans(n_clusters= i , random_state=0).fit_predict(dataset)
  #Calinski-Harabasz- evaluation critera
  scores = metrics.calinski_harabasz_score(dataset, y_pred)
  plt.scatter(dataset[:, 0], dataset[:, 1], dataset[:, 2], c=y_pred)

  plt.subplot(4, 2, i-1)

  print("the number of predicted clusters",i,"scores:",scores)

plt.show()

你可以看到 plot 中的第一张图是 clusters = 3(3 个不同颜色的簇),下一个 = 4.. 在 8 的末尾。但我认为它应该从 cluster = 2 开始,但为什么没有'显示

您正在绘制两个集群数据后创建第一个子图。 您需要用 plt.scatterplt.subplot

交换行

示例:

import numpy as np, matplotlib.pyplot as plt
colors = ['_', 'red', 'green', 'blue', 'purple', 'tomato', 'orange', 'darkslateblue', 'olive', 'orange', 'teal']

正确顺序:

for a in range(1,10):
    plt.subplot(3,3,a)
    plt.scatter(np.random.randint(0,10, 10), np.random.randint(0,10, 10), c=colors[a])

左上图是红色的,所以,这是列表中的元素 1。

顺序不正确:

for a in range(1,10):
    plt.scatter(np.random.randint(0,10, 10), np.random.randint(0,10, 10), c=colors[a])
    plt.subplot(3,3,a)

左上图为绿色,即元素 2。最后一个子图是空的。