Раскраска кластера.Kmeans - PullRequest
       12

Раскраска кластера.Kmeans

0 голосов
/ 05 декабря 2018

В настоящее время у меня есть код ниже:

Я также импортировал библиотеки numpy и matplotlib.

def colorTheCluster(data,centroidCoordinates):
index = AssignPointsToCluster(data,centroidCoordinates) #index contains an 1d array of size 1000 of values [0 1 2 1 3 0....]
indexList = list(index) # i wanted to make it into a list so i can use a for loop
colorMap = {0:'r', 1 : 'b', 2:"y", 3: 'p', 4 :'g'} 
for num in indexList: #[0,1,1,2,3,0,0...]
    for keys in colorMap.keys(): #{1, 2, 0 , 4}
        if keys == num:
            plt.scatter(data[:,0], data[:,1], marker = '+', c = colorMap[0])
        elif keys == num:
            plt.scatter(data[:,0], data[:,1], marker = '+', c = colorMap[1])
        elif keys == num:    
            plt.scatter(data[:,0], data[:,1], marker = '+', c = colorMap[2])
        elif keys == num:
            plt.scatter(data[:,0], data[:,1], marker = '+', c = colorMap[3])
        elif keys == num:
            plt.scatter(data[:,0], data[:,1], marker = '+', c = colorMap[4])
return plt.show()

print(colorTheCluster(data(), centroidCoordinates()))

data() - это функция, которая содержит массив 1000 x 2

centroidCoordinates() - это массив m x2 (в данном случае я использовал m = 4)

Я хочу, чтобы каждая точка в кластере, которой присвоен индекс, соответственно изменила цвет, но, похоже, неработа.

1 Ответ

0 голосов
/ 12 декабря 2018

Функция plt.scatter принимает параметр c - это может быть список / массив той же длины, что и ваши данные.

# make some fake data
data = np.random.random([1000,2])
index = np.random.choice([0,1,2,3], size=len(data))

# scatter plot the data, using `index` to indicate color
plt.scatter(data[:,0], data[:,1], c=index)
# or alternatively:
plt.scatter(*data.T, c=index)

Чтобы определить конкретные цвета, вы хотите создать цветовую карту:

import matplotlib.colors as mcols

# define a colormap using a list of custom colors
cmap = mcols.ListedColormap(['r','b','y','purple','g'])

# scatter plot the data using your new colormap
plt.scatter(*data.T, c=index, cmap=cmap)

Обратите внимание, что я заменил 'p', который не является цветовым кодом, который понимает matplotlib, на 'purple', то есть.

...