PyQtGraph: muestra el texto como puntos en el gráfico de diagrama de dispersión

En este artículo, veremos cómo podemos crear un gráfico de diagrama de dispersión en el módulo PyQtGraph que muestra texto en lugar de símbolos como puntos. PyQtGraph es una biblioteca de interfaz de usuario y gráficos para Python que proporciona la funcionalidad comúnmente requerida en el diseño y las aplicaciones científicas. Sus objetivos principales son proporcionar gráficos rápidos e interactivos para mostrar datos (gráficos, videos, etc.). Un diagrama de dispersión (también conocido como gráfico de dispersión, gráfico de dispersión) usa puntos para representar valores para dos variables numéricas diferentes. Es un tipo de gráfico o diagrama matemático que utiliza coordenadas cartesianas para mostrar valores de normalmente dos variables para un conjunto de datos. La posición de cada punto en el eje horizontal y vertical indica valores para un punto de datos individual. El concepto principal de mostrar texto como puntos es que crearemos un texto que actuará como los puntos.

Podemos crear una ventana de trazado y crear un gráfico de dispersión en ella con la ayuda de los comandos que se indican a continuación.

# creating a pyqtgraph plot window
plt = pg.plot()

# creating a scatter plot graph of size = 10
scatter = pg.ScatterPlotItem(size=10)

Enfoque:
1. Importe los módulos pyqtgraph, pyqt5 y numpy 
2. Cree la clase de ventana principal 
3. Cree un objeto de ventana de trazado 
4. Cree un método para crear una etiqueta que devuelva el símbolo de texto denominado tupla 
5. Cree strings aleatorias usando numpy 
6. Cree una posición aleatoria usando numpy para trazar las strings 
7. Cree un elemento de diagrama de dispersión 
8. Cree puntos usando strings y posiciones aleatorias y agréguelos al diagrama de dispersión 
9. Agregue el gráfico de diagrama de dispersión a la ventana de diagrama 
10. Agregue la ventana de diagrama y más widget de etiqueta para el diseño de cuadrícula de la ventana principal

A continuación se muestra la implementación. 

Python3

# importing Qt widgets
from PyQt5.QtWidgets import *
 
# importing system
import sys
 
# importing numpy as np
import numpy as np
 
# importing pyqtgraph as pg
import pyqtgraph as pg
from PyQt5.QtGui import *
from PyQt5.QtCore import *
 
from collections import namedtuple
 
class Window(QMainWindow):
 
    def __init__(self):
        super().__init__()
 
        # setting title
        self.setWindowTitle("PyQtGraph")
 
        # setting geometry
        self.setGeometry(100, 100, 600, 500)
 
        # icon
        icon = QIcon("skin.png")
 
        # setting icon to the window
        self.setWindowIcon(icon)
 
        # calling method
        self.UiComponents()
 
        # showing all the widgets
        self.show()
 
    # method for components
    def UiComponents(self):
 
        # creating a widget object
        widget = QWidget()
 
        # creating a label
        label = QLabel("Geeksforgeeks Scatter Plot Graph with Text")
 
        # setting minimum width
        label.setMinimumWidth(130)
 
        # making label do word wrap
        label.setWordWrap(True)
 
        # setting configuration options
        pg.setConfigOptions(antialias=True)
 
        # creating a plot window
        plt = pg.plot()
 
        # text symbols
        TextSymbol = namedtuple("TextSymbol", "label symbol scale")
 
        # number of text
        n = 150
 
        # method for creating label
        def createLabel(label, angle):
 
            # QPainterPath
            symbol = QPainterPath()
 
            # creating QFont object
            f = QFont()
 
            # setting font size
            f.setPointSize(10)
 
            # adding text
            symbol.addText(0, 0, f, label)
 
            # getting bounding rectangle
            br = symbol.boundingRect()
 
            # getting scale
            scale = min(1. / br.width(), 1. / br.height())
 
            # getting transform object
            tr = QTransform()
 
            # setting scale to transform object
            tr.scale(scale, scale)
 
            # rotate the transform
            tr.rotate(angle)
 
            # translating
            tr.translate(-br.x() - br.width() / 2., -br.y() - br.height() / 2.)
 
            # returning text symbol
            return TextSymbol(label, tr.map(symbol), 0.1 / scale)
 
        # creating a random string
        def random_str(): return (
            ''.join([chr(np.random.randint(ord('A'), ord('z')))
                     for i in range(np.random.randint(1, 5))]),
            np.random.randint(0, 360))
 
        # plotting the scatter plot
        scatter = pg.ScatterPlotItem(size=10, pen=pg.mkPen('w'), pxMode=True)
 
        # getting random position
        pos = np.random.normal(size=(2, n), scale=1e-5)
 
        # creating spots
        spots = [{'pos': pos[:, i], 'data': 1, 'brush': pg.intColor(i, n), 'symbol': i % 5, 'size': 5 + i / 10.} for i
                 in range(n)]
 
        # adding spots to the scatter plot
        scatter.addPoints(spots)
 
        # spots
        spots = [{'pos': pos[:, i], 'data': 1, 'brush': pg.intColor(i, n), 'symbol': label[1],
                  'size': label[2] * (5 + i / 10.)} for (i, label) in
                 [(i, createLabel(*random_str())) for i in range(n)]]
 
        # adding points to the scatter plot
        scatter.addPoints(spots)
 
        # adding scatter plot to the plot window
        plt.addItem(scatter)
 
        # Creating a grid layout
        layout = QGridLayout()
 
        # minimum width value of the label
        label.setMinimumWidth(130)
 
        # setting this layout to the widget
        widget.setLayout(layout)
 
        # adding label in the layout
        layout.addWidget(label, 1, 0)
 
        # plot window goes on right side, spanning 3 rows
        layout.addWidget(plt, 0, 1, 3, 1)
 
        # setting this widget as central widget of the main window
        self.setCentralWidget(widget)
 
# create pyqt5 app
App = QApplication(sys.argv)
 
# create the instance of our Window
window = Window()
 
# start the app
sys.exit(App.exec())

Producción : 

Publicación traducida automáticamente

Artículo escrito por rakshitarora y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *