快速学会绘制Pyqt5中的所有图(下)

Pyqt5相关文章:
快速掌握Pyqt5的三种主窗口
快速掌握Pyqt5的2种弹簧
快速掌握Pyqt5的5种布局
快速弄懂Pyqt5的5种项目视图(Item View)
快速弄懂Pyqt5的4种项目部件(Item Widget)
快速掌握Pyqt5的6种按钮
快速掌握Pyqt5的10种容器(Containers)
快速掌握Pyqt5的20种输入控件(Input Widgets)
快速掌握Pyqt5的9种显示控件
详细学习Pyqt5中的5种布局方式
详细学习Pyqt5中的6种按钮
详细学习Pyqt5中的2种弹簧
详细学习Pyqt5的5种项目视图(Item View)
详细学习Pyqt5的4种项目部件(Item Widget)
详细学习Pyqt5的20种输入控件(Input Widgets)
详细学习Pyqt5的9种显示控件
详细学习Pyqt5的10种容器(Containers)
详细学习PyQt5与数据库交互
详细学习PyQt5中的多线程
快速学习PyQt5的动画和图形效果
快速学习PyQt5的高级自定义控件
快速学会绘制Pyqt5中的所有图(上)
快速学会绘制Pyqt5中的所有图(下)
待续。。。

雷达图

在这里插入图片描述

PyQtGraph 并不直接支持雷达图(也称为蜘蛛网图或极坐标图),但您可以使用 PyQt 的绘图能力手动创建一个。要在 PyQt 中绘制雷达图,您需要使用 QPainter 类来在 QWidget 或类似对象上进行自定义绘图。

以下是一个使用 PyQt5 创建简单雷达图的示例:

编写代码绘制雷达图:

import sys  
import math  
from PyQt5.QtWidgets import QApplication, QWidget  
from PyQt5.QtGui import QPainter, QPolygon, QPen  
from PyQt5.QtCore import Qt, QPoint  
  
  
class RadarWidget(QWidget):  
    def __init__(self, data):  
        super().__init__()  
        self.data = data  
  
    def paintEvent(self, event):  
        painter = QPainter(self)  
        painter.setRenderHint(QPainter.Antialiasing)  
  
        # 雷达图的中心点  
        center = QPoint(int(self.width() / 2), int(self.height() / 2))  
        radius = min(int(self.width() / 2), int(self.height() / 2)) - 10  
  
  
        # 绘制雷达图的轴  
        num_axes = len(self.data)  
        for i in range(num_axes):  
            angle = 2 * math.pi * i / num_axes  
            x =int( center.x() + radius * math.cos(angle))  
            y =int( center.y() + radius * math.sin(angle))  
            painter.drawLine(center, QPoint(x, y))  
  
        # 绘制雷达图的数据多边形  
        polygon = QPolygon()  
        for i in range(num_axes):  
            angle = 2 * math.pi * i / num_axes  
            value = self.data[i]  
            x = int(center.x() + value * radius * math.cos(angle))  
            y = int(center.y() + value * radius * math.sin(angle))  
            polygon << QPoint(x, y)  
        painter.setPen(QPen(Qt.blue, 2))  
        painter.drawPolygon(polygon)  
  
  
# 创建一个 QApplication 实例  
app = QApplication(sys.argv)  
  
# 创建雷达图窗口  
radar_data = [0.7, 0.8, 0.5, 0.6, 0.9]  # 示例数据  
radarWidget = RadarWidget(radar_data)  
radarWidget.resize(400, 400)  
radarWidget.show()  
  
# 启动应用程序的事件循环  
sys.exit(app.exec_())

在这个例子中,我们创建了一个继承自 QWidgetRadarWidget 类来显示雷达图。数据以列表形式传递给 RadarWidget,每个元素表示雷达图上一个轴的值。

流程图

在这里插入图片描述

在 PyQtGraph 中绘制流程图需要使用图形和线条来手动创建图形元素。PyQtGraph 主要专注于数据可视化,并不直接支持流程图的绘制。但是,您可以使用 PyQt5 的图形视图框架(QGraphicsSceneQGraphicsView)来创建流程图。

以下是使用 PyQt5 创建简单流程图的示例代码:

编写代码绘制流程图:

import sys  
import math  
from PyQt5.QtWidgets import QApplication, QGraphicsScene, QGraphicsView, QGraphicsRectItem, QGraphicsTextItem, QGraphicsLineItem,QGraphicsPolygonItem  
from PyQt5.QtCore import Qt, QRectF, QPointF, QLineF  
from PyQt5.QtGui import QPen, QBrush, QColor, QPolygonF  
  
  
class Arrow(QGraphicsLineItem):  
    def __init__(self, start_item, end_item, parent=None):  
        super().__init__(parent)  
  
        # 计算起始点和结束点  
        start_point = start_item.mapToScene(start_item.rect().bottomLeft() + QPointF(start_item.rect().width() / 2, 0))  
        end_point = end_item.mapToScene(end_item.rect().topLeft() + QPointF(end_item.rect().width() / 2, 0))  
  
        # 设置线条  
        line = QLineF(start_point, end_point)  
        self.setLine(line)  
        self.setPen(QPen(Qt.black, 2))  
  
        # 箭头头部尺寸  
        arrow_size = 9.0  
  
        # 计算箭头角度  
        angle = math.atan2(-line.dy(), line.dx())  
  
        # 创建箭头头部  
        arrow_head = QPolygonF()  
        arrow_head.append(line.p2())  
        arrow_head.append(line.p2() - QPointF(math.sin(angle + math.pi / 3) * arrow_size,  
                                              math.cos(angle + math.pi / 3) * arrow_size))  
        arrow_head.append(line.p2() - QPointF(math.sin(angle + math.pi - math.pi / 3) * arrow_size,  
                                              math.cos(angle + math.pi - math.pi / 3) * arrow_size))  
  
        # 添加箭头头部到场景  
        arrow_head_item = QGraphicsPolygonItem(arrow_head, self)  
        arrow_head_item.setBrush(Qt.black)  
        arrow_head_item.setPen(QPen(Qt.black, 2))  
  
  
class FlowChartNode(QGraphicsRectItem):  
    def __init__(self, text, x, y, width, height, parent=None):  
        super().__init__(x, y, width, height, parent)  
  
        self.setBrush(QBrush(QColor(200, 200, 255)))  
        self.setPen(QPen(Qt.black, 2))  
  
        # 添加文本标签  
        text_item = QGraphicsTextItem(text, self)  
        text_item.setPos(x + 10, y + 10)  
        text_item.setTextWidth(width - 20)  
  
  
app = QApplication(sys.argv)  
scene = QGraphicsScene()  
  
node1 = FlowChartNode("开始", 50, 50, 100, 50)  
node2 = FlowChartNode("步骤1", 50, 150, 100, 50)  
node3 = FlowChartNode("结束", 50, 250, 100, 50)  
  
scene.addItem(node1)  
scene.addItem(node2)  
scene.addItem(node3)  
  
arrow1 = Arrow(node1, node2)  
arrow2 = Arrow(node2, node3)  
  
scene.addItem(arrow1)  
scene.addItem(arrow2)  
  
view = QGraphicsView(scene)  
view.show()  
  
sys.exit(app.exec_())

在这个例子中,我们定义了一个 FlowChartNode 类来表示流程图中的节点,该类继承自 QGraphicsRectItem。然后,我们创建了一个 QGraphicsScene 来容纳这些节点,并使用 QGraphicsView 显示它们。

树状图

在这里插入图片描述

在 PyQtGraph 中创建树状图(或树形结构图)通常不是直接支持的,因为 PyQtGraph 主要用于数据可视化,如绘制折线图、散点图等。但是,您可以使用 PyQt5 的 QTreeViewQStandardItemModel 来创建一个树状图界面。

以下是使用 PyQt5 创建树状图的示例代码:

编写代码以创建树状图:

import sys  
from PyQt5.QtWidgets import QApplication, QTreeView  
from PyQt5.QtGui import QStandardItem, QStandardItemModel  
  
  
  
app = QApplication(sys.argv)  
  
# 创建标准项模型  
model = QStandardItemModel()  
rootNode = model.invisibleRootItem()  
  
# 创建节点  
parent1 = QStandardItem('父节点1')  
child1 = QStandardItem('子节点1')  
child2 = QStandardItem('子节点2')  
parent1.appendRow(child1)  
parent1.appendRow(child2)  
  
parent2 = QStandardItem('父节点2')  
child3 = QStandardItem('子节点3')  
parent2.appendRow(child3)  
  
rootNode.appendRow(parent1)  
rootNode.appendRow(parent2)  
  
# 创建树视图并设置模型  
  
treeView = QTreeView()  
treeView.setHeaderHidden(True)  
  
treeView.setModel(model)  
treeView.expandAll()  # 展开所有节点  
  
# 显示树视图  
treeView.show()  
  
sys.exit(app.exec_())

在这个例子中,我们创建了一个 QStandardItemModel 来存储树形数据,然后向模型中添加了几个 QStandardItem 作为节点。QTreeView 用于展示这个模型。每个节点都可以有子节点,形成树形结构。

网络图

在这里插入图片描述

在 PyQtGraph 中直接绘制网络图(Graph Visualization)并不直接支持,因为 PyQtGraph 主要用于绘制二维和三维的数据可视化图形,如折线图、散点图等。但是,您可以结合使用 PyQt 和其他 Python 图形库,如 NetworkX,来创建和显示网络图。

以下是一个使用 PyQt5 和 NetworkX 创建网络图的示例:

编写代码以创建网络图:

    import sys
    import networkx as nx
    import matplotlib.pyplot as plt
    from PyQt5.QtWidgets import QApplication, QMainWindow, QSizePolicy, QWidget, QVBoxLayout
    from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas

    class NetworkGraph(QWidget):
        def __init__(self, parent=None):
            super(NetworkGraph, self).__init__(parent)

            self.figure, self.ax = plt.subplots()
            self.canvas = FigureCanvas(self.figure)
            self.canvas.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
            self.canvas.updateGeometry()

            layout = QVBoxLayout()
            layout.addWidget(self.canvas)
            self.setLayout(layout)

            self.draw_graph()

        def draw_graph(self):
            # 创建一个网络图
            G = nx.karate_club_graph()

            # 绘制网络图
            pos = nx.spring_layout(G)
            nx.draw(G, pos, ax=self.ax, with_labels=True, node_color='skyblue', edge_color='gray')

            # 更新画布
            self.canvas.draw()

    app = QApplication(sys.argv)
    mainWindow = QMainWindow()
    mainWindow.setCentralWidget(NetworkGraph())
    mainWindow.show()
    sys.exit(app.exec_())

在这个示例中,我们创建了一个名为 NetworkGraph 的自定义 QWidget,用于显示由 NetworkX 生成的网络图。使用 NetworkX 创建并配置图形,然后使用 Matplotlib 进行绘图。最后,将 Matplotlib 图形嵌入到 PyQt5 应用程序窗口中。

气泡图

在这里插入图片描述

在 PyQtGraph 中绘制气泡图可以通过使用 ScatterPlotItem 类并调整点的大小来实现。气泡图是散点图的一种变体,其中每个点的大小可以代表数据的一个额外维度。

以下是使用 PyQtGraph 创建气泡图的步骤和示例代码:

编写代码以绘制气泡图:

import sys  
import numpy as np  
from PyQt5 import QtWidgets  
import pyqtgraph as pg  
  
# 创建一个应用程序实例  
app = QtWidgets.QApplication(sys.argv)  
  
# 创建一个主窗口  
mainWindow = QtWidgets.QMainWindow()  
  
# 创建一个绘图控件  
plotWidget = pg.PlotWidget()  
plotWidget.setBackground("w")  
mainWindow.setCentralWidget(plotWidget)  
  
# 准备数据  
x = np.random.rand(100) * 10  
y = np.random.rand(100) * 10  
sizes = np.random.rand(100) * 50  # 气泡的大小  
  
# 创建散点图项目  
scatterPlotItem = pg.ScatterPlotItem(pen=pg.mkPen(None), brush="#dcbeff")  
  
# 现在使用 setData 设置点的坐标和大小  
scatterPlotItem.setData(x, y, size=sizes)  
  
# 将散点图添加到绘图控件  
plotWidget.addItem(scatterPlotItem)  
  
# 显示主窗口  
mainWindow.show()  
  
# 启动应用程序的事件循环  
sys.exit(app.exec_())

在这个例子中,我们使用 ScatterPlotItem 创建了一个散点图,并通过改变每个点的大小(size 参数)来创建一个气泡图效果。xy 是数据点的坐标,sizes 数组决定了每个点的大小。

地图图表

在这里插入图片描述

在 PyQt 中绘制地图图表通常需要结合使用地理信息系统(GIS)相关的库,例如 GeoPandas、Folium 或 PyQGIS。这些库可以处理地理数据并生成地图,但是它们不是 PyQtGraph 的一部分。另一种选择是使用 QGIS,这是一个完整的地理信息系统平台,它可以与 PyQt 结合使用。

以下是一个使用 Python、PyQt5 和 Folium 创建交互式地图图表的基本示例:

编写代码以创建地图图表:

import sys  
import os  
import folium  
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget  
from PyQt5.QtWebEngineWidgets import QWebEngineView  
from PyQt5.QtCore import QUrl  
  
  
class MapWidget(QWidget):  
    def __init__(self, parent=None):  
        super().__init__(parent)  
        self.view = QWebEngineView(self)  
        self.init_ui()  
  
    def init_ui(self):  
        # 创建一个 Folium 地图,您可以调整 zoom_start 来设置初始缩放级别  
        m = folium.Map(location=[45.5236, -122.6750], zoom_start=13)  
  
        # 获取当前文件夹的绝对路径  
        dirname = os.path.abspath(os.path.dirname(__file__))  
        # 保存地图为 HTML 文件  
        map_path = os.path.join(dirname, 'map.html')  
        m.save(map_path)  
  
        # 在 QWebEngineView 中加载 HTML        self.view.load(QUrl.fromLocalFile(map_path))  
  
        # 设置 QWebEngineView 控件的最小尺寸  
        self.view.setMinimumSize(800, 600)  # 例如,设置为宽800像素,高600像素  
        self.view.show()  
  
  
app = QApplication(sys.argv)  
mainWindow = QMainWindow()  
mapWidget = MapWidget()  
  
# 设置主窗口的初始大小  
mainWindow.resize(800, 600)  # 可以根据需要调整这个尺寸  
  
mainWindow.setCentralWidget(mapWidget)  
mainWindow.show()  
sys.exit(app.exec_())

在这个示例中,我们使用 Folium 创建了一个简单的地图,并将其保存为一个 HTML 文件。然后我们使用 PyQt5 的 QWebEngineView 小部件加载并显示这个 HTML 文件,从而在 PyQt 应用程序中嵌入了地图。

桑基图

在这里插入图片描述

桑基图是一种特殊的流程图,它用于表示数据流和传输。在 PyQtGraph 中直接绘制桑基图并不支持,因为它主要用于绘制二维和三维的数据可视化图形,如折线图、散点图等。然而,您可以使用其他的Python库,如 matplotlib,来创建桑基图,并将其嵌入到 PyQt 应用程序中。

以下是一个使用 Python、PyQt5 和 Matplotlib 创建桑基图的基本示例:

编写代码以创建桑基图:

    import sys
    from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget
    from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
    import matplotlib.pyplot as plt
    from matplotlib.sankey import Sankey

    class SankeyWidget(QWidget):
        def __init__(self, parent=None):
            super(SankeyWidget, self).__init__(parent)
            self.figure, self.ax = plt.subplots()
            self.canvas = FigureCanvas(self.figure)

            layout = QVBoxLayout()
            layout.addWidget(self.canvas)
            self.setLayout(layout)

            self.draw_sankey()

        def draw_sankey(self):
            # 创建桑基图
            sankey = Sankey(ax=self.ax)
            sankey.add(flows=[1, -1, 0.5, -0.5], labels=['', '', '', ''], orientations=[0, 0, 1, -1])
            sankey.finish()

            # 更新画布
            self.canvas.draw()

    app = QApplication(sys.argv)
    mainWindow = QMainWindow()
    mainWindow.setCentralWidget(SankeyWidget())
    mainWindow.show()
    sys.exit(app.exec_())

在这个示例中,我们定义了一个 SankeyWidget 类来展示桑基图。使用 Matplotlib 创建桑基图,并将其嵌入到 PyQt5 应用程序中。

组合图在这里插入图片描述

在 PyQtGraph 中创建组合图(例如,将折线图和柱状图组合在一起)可以通过在同一个绘图控件(PlotWidget)中添加多个图表元素来实现。这样,您可以在同一个坐标轴上或在相互关联的坐标轴上展示不同类型的数据。

以下是一个示例,展示如何在 PyQtGraph 中创建一个组合了折线图和柱状图的组合图:

编写代码以创建组合图:

import sys
import numpy as np
from PyQt5 import QtWidgets
import pyqtgraph as pg

# 创建一个应用程序实例
app = QtWidgets.QApplication(sys.argv)

# 创建一个主窗口
mainWindow = QtWidgets.QMainWindow()

# 创建一个绘图控件
plotWidget = pg.PlotWidget()
plotWidget.setBackground('w')
mainWindow.setCentralWidget(plotWidget)

# 准备数据
x = np.arange(10)
y1 = np.random.randint(1, 20, size=10)  # 柱状图的数据
y2 = np.random.randint(1, 20, size=10)  # 折线图的数据

# 创建柱状图项目
barGraphItem = pg.BarGraphItem(x=x, height=y1, width=0.6, brush='#fffac8')
plotWidget.addItem(barGraphItem)

# 创建折线图项目
plotWidget.plot(x, y2, pen=pg.mkPen(color='#dcbeff', width=2))

# 显示主窗口
mainWindow.show()

# 启动应用程序的事件循环
sys.exit(app.exec_())

在这个示例中,我们首先创建了一个包含柱状图和折线图的 PlotWidgetBarGraphItem 用于柱状图,而 plot 方法用于折线图。通过将它们添加到同一个 PlotWidget 中,我们可以将两种图表组合在一起显示。

股票图

在这里插入图片描述

在 PyQtGraph 中绘制股票图(通常指蜡烛图或OHLC图)需要一些额外的步骤,因为这需要特殊的图表来表示股票的开盘价、最高价、最低价和收盘价。PyQtGraph 提供了 CandlestickItem 类来创建这种类型的图表。

以下是使用 PyQtGraph 创建股票图的步骤和示例代码:

编写代码以绘制股票图:

import sys  
import numpy as np  
from PyQt5 import QtWidgets  
import pyqtgraph as pg  
  
  
class CandlestickItem(pg.GraphicsObject):  
    def __init__(self, data):  
        pg.GraphicsObject.__init__(self)  
        self.data = data  # data应该是一个包含(open, high, low, close)的列表  
        self.generatePicture()  
  
    def generatePicture(self):  
        self.picture = pg.QtGui.QPicture()  
        p = pg.QtGui.QPainter(self.picture)  
        p.setPen(pg.mkPen('b'))  # 设置蜡烛图的颜色  
        w = 0.3  
        for (t, open, high, low, close) in self.data:  
            p.drawLine(pg.QtCore.QPointF(t, low), pg.QtCore.QPointF(t, high))  
            if open > close:  
                p.setBrush(pg.mkBrush('g'))  
            else:  
                p.setBrush(pg.mkBrush('r'))  
            p.drawRect(pg.QtCore.QRectF(t - w, open, w * 2, close - open))  
        p.end()  
  
    def paint(self, p, *args):  
        p.drawPicture(0, 0, self.picture)  
  
    def boundingRect(self):  
        return pg.QtCore.QRectF(self.picture.boundingRect())  
  
  
# 创建一个应用程序实例  
app = QtWidgets.QApplication(sys.argv)  
  
# 创建一个主窗口  
mainWindow = QtWidgets.QMainWindow()  
  
# 创建一个绘图控件  
plotWidget = pg.PlotWidget()  
plotWidget.setBackground("w")  
mainWindow.setCentralWidget(plotWidget)  
  
# 准备数据  
data = [  # 示例数据:(时间, 开盘价, 最高价, 最低价, 收盘价)  
    (1, 10, 15, 5, 13),  
    (2, 13, 20, 10, 15),  
    (3, 15, 17, 13, 16),  
    (4, 16, 19, 14, 10),  
    # ...  
]  
  
# 创建蜡烛图项目  
item = CandlestickItem(data)  
plotWidget.addItem(item)  
  
# 显示主窗口  
mainWindow.show()  
  
# 启动应用程序的事件循环  
sys.exit(app.exec_())

在这个示例中,我们首先定义了一个 CandlestickItem 类来创建股票图。该类继承自 GraphicsObject,并且重写了绘图方法来绘制蜡烛图。数据格式是一个元组列表,每个元组代表一个时间点上的开盘价、最高价、最低价和收盘价。

甘特图

![[Pasted image 20231207235825.png]]

在 PyQtGraph 中创建甘特图需要一些额外的工作,因为它主要用于绘制二维和三维的数据可视化图形,如折线图、散点图等,而不直接支持甘特图。但是,您可以使用 PyQt 的基本图形功能来手动绘制甘特图。

以下是使用 PyQt5 创建简单甘特图的示例代码:

编写代码以创建甘特图:

import sys  
from PyQt5.QtWidgets import QApplication, QGraphicsScene, QGraphicsView, QGraphicsRectItem, QGraphicsTextItem  
from PyQt5.QtGui import QColor, QPen, QFont  
from PyQt5.QtCore import QRectF  
  
class GanttChartItem(QGraphicsRectItem):  
    def __init__(self, text, start, duration, row, color, parent=None):  
        super(GanttChartItem, self).__init__(parent)  
        # 设置矩形的尺寸和位置  
        self.setRect(QRectF(start, row * 50, duration, 30))  
        self.setBrush(QColor(color))  
        self.setPen(QPen(QColor('black'), 2))  # 添加边框  
  
        # 添加文本标签  
        text_item = QGraphicsTextItem(text, self)  
        text_item.setFont(QFont('Arial', 10))  
        text_item.setDefaultTextColor(QColor('black'))  
        text_item.setPos(start + 2, row * 50 + 5)  
  
app = QApplication(sys.argv)  
  
# 创建场景  
scene = QGraphicsScene()  
  
# 创建甘特图条目  
ganttItem1 = GanttChartItem("项目1", 0, 100, 0, '#78C0A8')  
ganttItem2 = GanttChartItem("项目2", 50, 150, 1, '#F4D35E')  
ganttItem3 = GanttChartItem("项目3", 120, 100, 2, '#EE964B')  
  
# 将条目添加到场景  
scene.addItem(ganttItem1)  
scene.addItem(ganttItem2)  
scene.addItem(ganttItem3)  
  
# 创建视图  
view = QGraphicsView(scene)  
  
# 设置合适的视图尺寸  
view.setSceneRect(0, 0, 400, 200)  
view.setMinimumSize(600, 400)  
  
# 设置窗口标题  
view.setWindowTitle("python")  
  
# 显示视图窗口  
view.show()  
  
sys.exit(app.exec_())

在这个示例中,我们定义了一个 GanttChartItem 类来表示甘特图中的单个任务。每个任务在水平方向上表示其持续时间,在垂直方向上表示不同的任务行。QGraphicsScene 用于容纳这些任务,而 QGraphicsView 用于显示它们。

平行坐标图

![[Pasted image 20231207235854.png]]

在 PyQtGraph 中直接绘制平行坐标图(Parallel Coordinates)并不直接支持,因为 PyQtGraph 主要用于绘制二维和三维的数据可视化图形,如折线图、散点图等。然而,您可以使用其他的Python库,如 matplotlibpandas,来创建平行坐标图,并将其嵌入到 PyQt 应用程序中。

以下是一个使用 Python、PyQt5 和 Matplotlib 创建平行坐标图的基本示例:

编写代码以创建平行坐标图:

    import sys
    import pandas as pd
    import matplotlib.pyplot as plt
    from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget
    from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
    from pandas.plotting import parallel_coordinates

    class ParallelCoordinatesWidget(QWidget):
        def __init__(self, parent=None):
            super(ParallelCoordinatesWidget, self).__init__(parent)
            self.figure, self.ax = plt.subplots()
            self.canvas = FigureCanvas(self.figure)

            layout = QVBoxLayout()
            layout.addWidget(self.canvas)
            self.setLayout(layout)

            self.draw_parallel_coordinates()

        def draw_parallel_coordinates(self):
            # 创建数据
            data = pd.DataFrame({
                'A': [1, 2, 3, 4],
                'B': [4, 3, 2, 1],
                'C': [2, 3, 4, 1],
                'D': [4, 1, 3, 2]
            })

            # 绘制平行坐标图
            parallel_coordinates(data, 'A', ax=self.ax)

            # 更新画布
            self.canvas.draw()

    app = QApplication(sys.argv)
    mainWindow = QMainWindow()
    mainWindow.setCentralWidget(ParallelCoordinatesWidget())
    mainWindow.show()
    sys.exit(app.exec_())

在这个示例中,我们定义了一个 ParallelCoordinatesWidget 类来展示平行坐标图。使用 Pandas 和 Matplotlib 创建平行坐标图,并将其嵌入到 PyQt5 应用程序中。

通过本系列教程,我们了解了如何使用PyQt5结合PyQtGraph和其他库来创建一系列不同的图表,从而使数据更加生动且易于理解。从基础的图表到复杂的GIS表示,PyQt5提供了广泛的功能,以帮助开发者在Python中构建专业的数据可视化解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/230103.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Go自学版】02-goroutine

利用时间片分割进程&#xff0c;致使宏观上A,B,C同时执行&#xff08;并发&#xff09; CPU利用率包含了执行和切换&#xff0c;进程/线程的数量越多&#xff0c;切换成本也会增大 最大并行数&#xff1a;GOMAXPROCS work stealing: 偷其他队列的G hand off: 当前G1阻塞&#…

【Pytorch】Fizz Buzz

文章目录 1 数据编码2 网络搭建3 网络配置&#xff0c;训练4 结果预测5 翻车现场 学习参考来自&#xff1a; Fizz Buzz in Tensorflowhttps://github.com/wmn7/ML_Practice/tree/master/2019_06_10Fizz Buzz in Pytorch I need you to print the numbers from 1 to 100, excep…

数字化转型怎么才能做成功?_光点科技

数字化转型对于现代企业来说是一场必要的革命。它不仅仅是技术的更迭&#xff0c;更是企业战略、文化和运营方式全面升级的体现。一个成功的数字化转型能够使企业更具竞争力、更灵活应对市场变化&#xff0c;并最终实现业务增长和效率提升。那么&#xff0c;数字化转型怎么才能…

JVM常见垃圾回收器

串行垃圾回收器 Serial和Serial Old串行垃圾回收器&#xff0c;是指使用单线程进行垃圾回收&#xff0c;堆内存较小&#xff0c;适合个人电脑 Serial作用于新生代&#xff0c;采用复制算法 Serial Old作用于老年代&#xff0c;采用标记-整理算法 垃圾回收时&#xff0c;只有…

Navicat 技术指引 | 适用于 GaussDB 分布式的数据生成功能

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结…

物联网后端个人第十四周总结

物联网方面进度 1.登陆超时是因为后端运行的端口和前端监听的接口不一样&#xff0c;所以后端也没有报错&#xff0c;将二者修改一致即可 2.登录之后会进行平台的初始化&#xff0c;但是初始化的时候会卡住,此时只需要将路径的IP端口后边的内容去掉即可 3.阅读并完成了jetlinks…

log4j(日志的配置)

日志一般配置在resources的config下面的&#xff0c;并且Util当中的initLogRecord中的initLog&#xff08;&#xff09;方法就是加载这个log4j.properties的. 首先先看log4j.properties的配置文件 log4j.rootLoggerdebug, stdout, Rlog4j.appender.stdoutorg.apache.log4j.Co…

【UE 材质】任务目标点效果

效果 步骤 1. 新建一个工程&#xff0c;创建一个Basic关卡 2. 新建一个材质&#xff0c;这里命名为“M_GoalPoint” 打开“M_GoalPoint”&#xff0c;设置混合模式为“半透明”&#xff0c;勾选“双面” 在材质图表中添加如下节点 此时预览效果如下 继续添加如下节点 此时效果…

iPaaS架构深入探讨

在数字化时代全面来临之际&#xff0c;企业正面临着前所未有的挑战与机遇。技术的迅猛发展与数字化转型正在彻底颠覆各行各业的格局&#xff0c;不断推动着企业迈向新的前程。然而&#xff0c;这一数字化时代亦衍生出一系列复杂而深奥的难题&#xff1a;各异系统之间数据孤岛、…

3D材质编辑:制作被火烧的木头

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…

使用STM32定时器实现精确的时间测量和延时

✅作者简介&#xff1a;热爱科研的嵌入式开发者&#xff0c;修心和技术同步精进&#xff0c; 代码获取、问题探讨及文章转载可私信。 ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。 &#x1f34e;获取更多嵌入式资料可点击链接进群领取&#xff0c;谢谢支持&#xff01;…

3DCAT+上汽奥迪:打造新零售汽车配置器实时云渲染解决方案

在 5G、云计算等技术飞速发展的加持下&#xff0c;云渲染技术迎来了突飞猛进的发展。在这样的背景下&#xff0c;3DCAT应运而生&#xff0c;成为了业内知名的实时云渲染服务商之一。 交互式3D实时云看车作为云渲染技术的一种使用场景&#xff0c;也逐步成为一种新的看车方式&a…

AWS Remote Control ( Wi-Fi ) on i.MX RT1060 EVK - 3 “编译 NXP i.MX RT1060”( 完 )

此章节叙述如何修改、建构 i.MX RT1060 的 Sample Code“aws_remote_control_wifi_nxp” 1. 点击“Import SDK example(s)” 2. 选择“MIMXRT1062xxxxA”>“evkmimxrt1060”&#xff0c;并确认 SDK 版本后&#xff0c;点击“Next>” 3. 选择“aws_examples”>“aw…

项目优化(异步化)

项目优化&#xff08;异步化&#xff09; 1. 认识异步化 1.1 同步与异步 同步&#xff1a;一件事情做完&#xff0c;再做另外一件事情&#xff0c;不能同时进行其他的任务。异步&#xff1a;不用等一件事故完&#xff0c;就可以做另外一件事情。等第一件事完成时&#xff0c…

处理哈希冲突的常见方法(五种)

1、开放地址法&#xff08;Open Addressing&#xff09;&#xff1a; 线性探测&#xff08;Linear Probing&#xff09;&#xff1a; 当发生冲突时&#xff0c;顺序地查找下一个可用的槽位&#xff0c;直到找到空槽或者整个表被搜索一遍。这个方法的缺点是可能出现“聚簇”&am…

webpack该如何打包

1.我们先创建一个空的大文件夹 2.打开该文件夹的终端 输入npm init -y 2.1.打开该文件夹的终端 2.2在该终端运行 npm init -y 3.安装webpack 3.1打开webpack网址 点击“中文文档” 3.2点击“指南”在点击“起步” 3.3复制基本安装图片画线的代码 4.在一开始的文件夹下在创建一…

【性能测试】Jmeter 配置元件(一):计数器

Jmeter 配置元件&#xff08;一&#xff09;&#xff1a;计数器 在 Jmeter 中&#xff0c;通过函数 ${__counter(,)} 可以实现每次加 1 1 1 的计数效果。但如果步长不为 1 1 1&#xff0c;则要利用到我们的计数器。 函数作用${__counter(,)}计数器&#xff0c;每次加 1${__d…

int 和 Integer 有什么区别,还有 Integer 缓存的实现

✨前言✨   Java本文主要介绍Java int 和 Integer的区别以及Integer 缓存的实现 &#x1f352;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f352;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评论区留言 文章目…

AI别墅设计

这两年我致力于研发别墅AI自动化设计&#xff0c;包括设计别墅各层的平面图以及导出三维效果图。目的是可以快速生成大量别墅的设计图和效果图让自建房用户可以第一时间挑选自己需要的房型并看到房屋建成后效果&#xff0c;大大提高建筑施工和设计人员的工作效率。 别墅设计包括…

记一次测试环境git翻车经历

本来想拉一个功能分支进行新的功能开发&#xff0c;合并代码发现没有冲突居然有文件被修改了&#xff0c;贸然选择最近的一次回滚提交&#xff0c;没想到不假思索的push -f 导致一部分dev主干的代码不见了。 事故记录 开发分支origin/dev&#xff0c;功能分支file 合并之后发…