Один из способов - построить каждую коллекцию точек по отдельности, например,
from sklearn.cluster import KMeans
import pyqtgraph
from PyQt5 import QtWidgets, QtCore, QtGui
import numpy as np
class Widget(QtWidgets.QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
nclusters = 3
self.data = np.random.random((1000,2)) * 10
kmeans = KMeans(n_clusters=nclusters, init='k-means++')
kmeans.fit(self.data)
predict = np.array(kmeans.predict(self.data))
self.graph = pyqtgraph.PlotWidget(self, background='w')
for i in range(kmeans.n_clusters):
brush = QtGui.QBrush(pyqtgraph.intColor(i, 3, alpha = 150))
pen_color = QtGui.QColor(pyqtgraph.intColor(i, 3))
self.graph.scatterPlot(self.data[predict == i], symbolBrush = brush, pen = pen_color)
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(self.graph)
if __name__ == "__main__":
app = QtWidgets.QApplication([])
window = Widget()
window.show()
window.resize(400,400)
app.exec_()
В качестве альтернативы, вы можете построить все точки одновременно, но предоставить массив цветов и кистей пера, например,
class Widget(QtWidgets.QWidget):
def __init__(self, *args, **kwargs):
...
self.graph = pyqtgraph.PlotWidget(self, background='w')
colors = [pyqtgraph.intColor(i, 3, alpha=150) for i in self.predict]
pens = [QtGui.QPen(pyqtgraph.intColor(i, 3), 0) for i in self.predict]
self.graph.scatterPlot(self.data, pen=pens, symbolBrush=colors)
...
Снимок экрана: