[PYTHON] Dessinez un graphique avec PyQtGraph Partie 6 - Affichage d'une légende

Partie 6 Affichage de la légende

Je n'aime pas vraiment la légende PyQtGraph car elle est inflexible. ~~ Vous n'auriez pas dû être en mesure de changer la couleur d'arrière-plan. ~~ ↑ Vous l'avez souligné dans les commentaires. Il est possible de changer la couleur de fond elle-même en modifiant la bibliothèque (pyqtgraph \ graphicsItems \ LegendItem.py). Voir la section des commentaires pour plus de détails.

6.png

import sys
from PySide.QtCore import *
from PySide.QtGui import *
import pyqtgraph as pg


class GraphWindow(QMainWindow):

    def __init__(self, parent = None):
        
        super(GraphWindow, self).__init__(parent)
        
        pw = pg.PlotWidget(viewBox = pg.ViewBox(border = pg.mkPen(color='#000000'),
                                                invertX = False, invertY = False))

        self.setCentralWidget(pw)

        pw.setBackground("#FFFFFF00")

        pw.setMinimumSize(500, 400)
        pw.setMaximumSize(500, 400)

        p1 = pw.plotItem
        p2 = pg.ViewBox()
        p3 = pg.ViewBox()
        ax3 = pg.AxisItem(orientation = 'right')
        self.setGraphFrameFont(p1, p2, p3, ax3)
        self.setGraphMultipleAxis(p1, p2, p3, ax3)

        p1.setLabels(bottom = "Axe X", 
                     left = "Axe Y1", 
                     right = "Axe Y2")
        ax3.setLabel("Axe Y3")

        fontCss = {'font-family': "Times New Roman,Meilio", 'font-size': '10.5pt', "color": "black"}
        p1.getAxis('bottom').setLabel(**fontCss)
        fontCss["color"] = "red"
        p1.getAxis('left').setLabel(**fontCss)
        fontCss["color"] = "blue"
        p1.getAxis('right').setLabel(**fontCss)
        fontCss["color"] = "green"
        ax3.setLabel(**fontCss)

        p1.setRange(xRange = (-2, 6), yRange = (-2, 6), padding = 0)
        p2.setRange(yRange = (-1, 5), padding = 0)
        p3.setRange(yRange = (0, 4), padding = 0)

        p1.getAxis('bottom').setTickSpacing(major = 2.5, minor = 1)
        p1.getAxis('left').setTickSpacing(major = 2.5, minor = 1)
        p1.getAxis('right').setTickSpacing(major = 2.5, minor = 1)
        ax3.setTickSpacing(major = 2.5, minor = 1)
        
        p1.addItem(pg.PlotCurveItem(x = [0, 1, 2, 3 ,4], 
                                    y = [0, 1, 2, 3 ,4], 
                                    pen = pg.mkPen(color = "r", style = Qt.SolidLine), 
                                    name = "plot1", 
                                    antialias = True))
        p2.addItem(pg.ScatterPlotItem(x = [0, 1, 2, 3 ,4], 
                                      y = [4, 3, 2, 1, 0], 
                                      symbol = "x", 
                                      pen = pg.mkPen(None), 
                                      name = "plot2", 
                                      brush = pg.mkBrush("b"),
                                      size = 7.5,
                                      antialias = True))
        p3.addItem(pg.PlotCurveItem(x = [0, 1, 2, 3 ,4], 
                                    y = [0, 4, 0, 4, 0], 
                                    pen = pg.mkPen(color = "g", style = Qt.DashLine),
                                    name = "plot3", 
                                    antialias = True))

        ##6 Définir et afficher la légende
        legend = p1.addLegend(offset = (10, 10))
        fontCssLegend = '<style type="text/css"> p {font-family: Times New Roman,Meilio; font-size: 10.5pt; color: "#000000"} </style>'
        legend.addItem(pg.PlotCurveItem(pen = pg.mkPen(color = "r", style = Qt.SolidLine), antialias = True), 
                       name = fontCssLegend + '<p>plot1 (Plot 1)</p>')
        legend.addItem(pg.ScatterPlotItem(symbol = "x", pen = pg.mkPen(None), brush = pg.mkBrush("b"), size = 7.5, antialias = True), 
                       name = fontCssLegend + '<p>plot2 (Parcelle 2)</p>')
        legend.addItem(pg.PlotCurveItem(pen = pg.mkPen(color = "g", style = Qt.DashLine), antialias = True), 
                       name = fontCssLegend + '<p>plot3 (Parcelle 3)</p>')


    def setGraphFrameFont(self, p1, p2 = None, p3 = None, ax3 = None):
        font = QFont("Times New Roman", 7)

        p1.getAxis('bottom').setPen(pg.mkPen(color='#000000'))
        p1.getAxis('left').setPen(pg.mkPen(color='#000000'))
        p1.getAxis('bottom').setHeight(3.5 * 10.5)
        p1.getAxis('left').setWidth(4 * 10.5)

        #p1.getAxis('bottom').setLabel(**self.fontCss)
        p1.getAxis('bottom').tickFont = font
        #p1.getAxis('left').setLabel(**self.fontCss)
        p1.getAxis('left').tickFont = font

        if p2 != None:
            p1.getAxis('right').setPen(pg.mkPen(color='#000000'))
            p1.getAxis('right').setWidth(4 * 10.5)

            #p1.getAxis('right').setLabel(**self.fontCss)
            p1.getAxis('right').tickFont = font

        if p3 != None and ax3 != None:
            ax3.setPen(pg.mkPen(color='#000000'))
            ax3.setWidth(4 * 10.5)

            #ax3.setLabel(**self.fontCss)
            ax3.tickFont = font


    def setGraphMultipleAxis(self, p1, p2, p3 = None, ax3 = None):
        p1.showAxis('right')
        p1.scene().addItem(p2)
        p1.getAxis('right').linkToView(p2)
        p2.setXLink(p1)

        p2.sigRangeChanged.connect(lambda: p2.setGeometry(p1.vb.sceneBoundingRect()))
        
        if p3 != None and ax3 != None:
            spacer = QGraphicsWidget()
            spacer.setMaximumSize(15,15)
            p1.layout.addItem(spacer, 2, 3)

            p1.layout.addItem(ax3, 2, 4)
            p1.scene().addItem(p3)
            ax3.linkToView(p3)
            p3.setXLink(p1)
            
            p3.sigRangeChanged.connect(lambda: p3.setGeometry(p1.vb.sceneBoundingRect()))


if __name__ == '__main__':
    #Créer une application Qt
    app = QApplication(sys.argv)
    #Créer et afficher un formulaire
    mainWin = GraphWindow()
    mainWin.show()
    #Démarrez la boucle principale de Qt
    sys.exit(app.exec_())

Recommended Posts

Dessinez un graphique avec PyQtGraph Partie 6 - Affichage d'une légende
Dessinez un graphique avec PyQtGraph Part 1-Drawing
Dessinez un graphique avec les paramètres PyQtGraph Partie 3-PlotWidget
Dessinez un graphique avec les paramètres PyQtGraph Part 4-PlotItem
Tracez un graphe avec Julia + PyQtGraph (2)
Tracez un graphique avec Julia + PyQtGraph (1)
Dessinez un graphique avec Julia + PyQtGraph (3)
Dessinez un graphique avec PyQtGraph Partie 5-Augmentez l'axe Y
Dessinez un graphique avec PyQtGraph Partie 2 - Paramètres de tracé détaillés
Dessinez un graphique avec networkx
Dessinez un graphique lâche avec matplotlib
Dessinez un graphique avec des pandas + XlsxWriter
Dessinez un graphique avec l'interface graphique PySimple
Dessinez une surface plane avec un graphique 3D matplotlib
Dessinez un graphique avec des étiquettes japonaises dans Jupyter
Dessinez un graphique en traitant avec Pandas groupby
[Python] Dessinez un graphe orienté avec Dash Cytoscape
[Python] Comment dessiner un graphique linéaire avec Matplotlib
Étudier les mathématiques avec Python: dessiner un graphe sympy (scipy) avec matplotlib
[Visualisation] Je veux dessiner un beau graphique avec Plotly
Jouez avec une tortue avec des graphiques de tortue (partie 1)
Dessinez un beau cercle avec numpy
Faisons un graphe avec python! !!
Faire un joli graphique avec plotly
Dessinez facilement une carte avec matplotlib.basemap
[PyQt] Afficher des graphiques multi-axes avec QtChart
Comment dessiner un graphique avec Matplotlib
(Matplotlib) Je veux dessiner un graphique avec une taille spécifiée en pixels
Dessinez un cœur en rubis avec PyCall
Dessiner un cœur avec Python Partie 2 (SymPy Edition)
Dessinez un ensemble de Mandelbrot avec Brainf * ck
Comment dessiner un graphique à barres qui résume plusieurs séries avec matplotlib
Dessinez simplement un graphique en spécifiant un fichier
Créer un graphique avec des bordures supprimées avec matplotlib
Dessiner un graphique d'une fonction quadratique en Python
Tweet les prévisions météo avec le bot Partie 2
Dessinez une "courbe de seins" dans un graphique 3D (1)
Mémo qui a fait un graphique pour animer avec intrigue
[Python] Dessinez un Mickey Mouse avec une tortue [Débutant]
Dessinez une "courbe de seins" dans un graphique 3D (2)
J'ai fait un graphique de nombres aléatoires avec Numpy
Dessinez plusieurs photos de plusieurs dossiers sur un graphique
Dessine un graphique avec Julia ... j'ai essayé une petite analyse
Comment faire un jeu de tir avec toio (partie 1)
Visualisez les données d'itinéraires ferroviaires sous forme de graphique avec Cytoscape 2
"My Graph Generation Application" par Python (PySide + PyQtGraph) Partie 2
Dessinez de force quelque chose comme un organigramme avec Python, matplotlib
Je souhaite créer manuellement une légende avec matplotlib
Créer une visionneuse de modèle 3D avec PyQt5 et PyQtGraph
"My Graph Generation Application" par Python (PySide + PyQtGraph) Partie 1
[Python] Comment dessiner un diagramme de dispersion avec Matplotlib
Visualisation des données avec Python - La méthode de dessin simultané de graphes basés sur les attributs avec "Facet" est trop pratique