【问题标题】:How to display K means clustering plot in graphWidget of UI using pyqt5?如何使用pyqt5在UI的graphWidget中显示K表示聚类图?
【发布时间】:2020-05-15 22:38:23
【问题描述】:

我正在开发一个 UI,我想在其中显示数据集的 K-Means 聚类结果。为此,我在 pyqtgraph 中使用 plot 小部件。相同的代码如下:

    from sklearn.cluster import KMeans 

    clusters = 3

    kmeans = KMeans(n_clusters = clusters, init = 'k-means++') 
    kmeans.fit(Data4)
    y_means = kmeans.predict(Data4)

    self.plot(Data4[0], Data4[1])

    def plot(self, Sdata1, Sdata2):

    self.graphWidget1.plot(Sdata1, Sdata2, pen=None, symbol='o')

所以,这个东西给了我一个散点图,但没有用于不同集群的不同颜色约定。为了说明,我得到了这个

但我希望显示这个:

在此问题上的任何帮助将不胜感激

【问题讨论】:

    标签: python plot pyqt5 pyqtgraph


    【解决方案1】:

    一种方法是分别绘制每个点的集合,例如

    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)
    
            ...
    

    截图:

    【讨论】:

      猜你喜欢
      • 2016-05-01
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 2016-10-13
      • 2013-08-29
      • 2016-08-12
      • 2016-09-06
      相关资源
      最近更新 更多