如何使用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表示聚类图?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 .qml 扩展名更改为 .ui 以在 pyqt5 应用程序中使用它
如何将变量从 PyQt5 UI 返回到 Main 函数 - Python