如何使用pyqt5在UI的graphWidget中显示K表示聚类图?

Posted

技术标签:

【中文标题】如何使用pyqt5在UI的graphWidget中显示K表示聚类图?【英文标题】:How to display K means clustering plot in graphWidget of UI using pyqt5? 【发布时间】: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')

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

但我希望显示这个:

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

【问题讨论】:

【参考方案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)

        ...

截图:

【讨论】:

以上是关于如何使用pyqt5在UI的graphWidget中显示K表示聚类图?的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5如何在主UI中实例化多个UI

如何将 .qml 扩展名更改为 .ui 以在 pyqt5 应用程序中使用它

如何在 Pyqt5 .ui 文件中获取子菜单?

如何将变量从 PyQt5 UI 返回到 Main 函数 - Python

如何使用 PyQt5 和 python 3.6 将 .ui 文件转换为 .py 文件

PyQt5 不能在单独的 ui 文件中使用预定义的小部件