Как сделать точечный график для кластеризации в Python
Я выполняю кластеризацию и пытаюсь построить результат. Фиктивный набор данных:
данные
import numpy as np
X = np.random.randn(10)
Y = np.random.randn(10)
Cluster = np.array([0, 1, 1, 1, 3, 2, 2, 3, 0, 2]) # Labels of cluster 0 to 3
кластерный центр
centers = np.random.randn(4, 2) # 4 centers, each center is a 2D point
Вопрос
Я хочу сделать точечный график, чтобы показать точки в data
и раскрасьте точки на основе меток кластера.
Тогда я хочу наложить center
точки на том же графике рассеяния, в другой форме (например, "X") и пятом цвете (так как имеется 4 кластера).
Комментарий
- Я перешел на seaborn 0.6.0, но не нашел API для выполнения этой задачи.
- ggplot от yhat может сделать диаграмму рассеяния хорошей, но второй заменит первый.
- Я запутался
color
а такжеcmap
в matplotlib, поэтому мне интересно, смогу ли я использовать seaborn или ggplot для этого.
2 ответа
Первая часть вашего вопроса может быть выполнена с помощью colorbar
и указав цвета, которые будут Cluster
массив. Я смутно понял вторую часть вашего вопроса, но я верю, что это то, что вы ищете.
import numpy as np
import matplotlib.pyplot as plt
x = np.random.randn(10)
y = np.random.randn(10)
Cluster = np.array([0, 1, 1, 1, 3, 2, 2, 3, 0, 2]) # Labels of cluster 0 to 3
centers = np.random.randn(4, 2)
fig = plt.figure()
ax = fig.add_subplot(111)
scatter = ax.scatter(x,y,c=Cluster,s=50)
for i,j in centers:
ax.scatter(i,j,s=50,c='red',marker='+')
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.colorbar(scatter)
fig.show()
что приводит к:
где ваши "центры" были показаны с помощью +
маркер. Вы можете указать любые цвета, которые хотите, чтобы они были такими же, как для x and y
Часть этого была дана ответ здесь. Схема
plt.scatter(x, y, c=color)
Цитирую документацию по matplotlib:
c: цвет или последовательность цветов, необязательно, по умолчанию [...] Обратите внимание, что c не должен быть единственной числовой последовательностью RGB или RGBA, поскольку она неотличима от массива значений, которые должны быть сопоставлены по цвету. c может быть двумерным массивом, в котором строки представляют собой RGB или RGBA.
Таким образом, в вашем случае вам нужен цвет для каждого кластера, а затем заполните массив цветов в соответствии с назначением кластера для каждой точки.
red = [1, 0, 0]
green = [0, 1, 0]
blue = [0, 0, 1]
colors = [red, red, green, blue, green]