Ajouté matplotlib dans un canvas
Résolu
rasielblas
Messages postés
135
Date d'inscription
Statut
Membre
Dernière intervention
-
rasielblas Messages postés 135 Date d'inscription Statut Membre Dernière intervention -
rasielblas Messages postés 135 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai un code qui permet d'afficher le nombre d'enregistrement des personnage dans un graphe avec matplotlib:
Et j'aimerais intégrer ce code dans ma fenetre personnel à l'aide d'un canevas:
Ce que je veux c'est fusionner ce deux codes pouvez vous m'aider s'il vous plaît je suis un peu perdu!
Cordialement!
J'ai un code qui permet d'afficher le nombre d'enregistrement des personnage dans un graphe avec matplotlib:
import sqlite3 import matplotlib.pyplot as plt import numpy as np var_personnage = [] var_nombre_faute = [] with sqlite3.connect("base.db") as con: cur = con.cursor() cur.execute("create table if not exists matable(id integer,type string(25),personne integer)") cur.execute("insert into matable(id,type,personne) values(1,'Jean',1000)") cur.execute("insert into matable(id,type,personne) values(1,'Jean',1000)") cur.execute("insert into matable(id,type,personne) values(1,'Jean',1000)") cur.execute("insert into matable(id,type,personne) values(2,'Jacques',2000)") cur.execute("insert into matable(id,type,personne) values(2,'Jacques',2000)") cur.execute("insert into matable(id,type,personne) values(3,'Julien',3000)") cur.execute("insert into matable(id,type,personne) values(4,'Julien',4000)") cur.execute("select personne, count(*) from matable group by(personne)") for personne, nb in cur.fetchall(): var_personnage.append(personne) var_nombre_faute.append(nb) fig, ax = plt.subplots() people = var_personnage y = np.arange(len(people)) error=0 ax.barh(y, var_nombre_faute, xerr=error, align='center',color='red', edgecolor='green', height=0.5) ax.set_yticks(y) ax.set_yticklabels(people) ax.invert_yaxis() # labels read top-to-bottom ax.set_xlabel('Pourcentage') ax.set_title('Nombre enregistrement personne') plt.show()
Et j'aimerais intégrer ce code dans ma fenetre personnel à l'aide d'un canevas:
from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQt5.QtGui import * import sys import sqlite3 import matplotlib.pyplot as plt import matplotlib from matplotlib import figure from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar import numpy as np class MatplotlibFigure(QWidget): # constructor def __init__(self): super().__init__() #self.layout = QBoxLayout() self.figure = matplotlib.figure.Figure() self.canvas = FigureCanvas(self.figure) self.toolbar = NavigationToolbar(self.canvas, self) #self.layout.addWidget(self.canvas) super().__init__() # self.layout = QBoxLayout() self.figure = matplotlib.figure.Figure() self.canvas = FigureCanvas(self.figure) self.toolbar = NavigationToolbar(self.canvas, self) layout = QVBoxLayout(self) layout.addWidget(self.toolbar) layout.addWidget(self.canvas) class Fenetre(QMainWindow): def __init__(self): super(Fenetre, self).__init__() self.setWindowTitle("Mon fenetre") self.resize(500,300) self.figure = matplotlib.figure.Figure() self.canvas = FigureCanvas(self.figure) self.toolbar = NavigationToolbar(self.canvas, self) centraWidget=QWidget() layout=QVBoxLayout() layout.addWidget(self.toolbar) layout.addWidget(self.canvas) centraWidget.setLayout(layout) self.setCentralWidget(centraWidget) app=QApplication.instance() if not app: app=QApplication(sys.argv) fenetre=Fenetre() fenetre.show() app.exec_()
Ce que je veux c'est fusionner ce deux codes pouvez vous m'aider s'il vous plaît je suis un peu perdu!
Cordialement!
A voir également:
- Matplotlib canvas
- Canvas gratuit - Télécharger - Divers Photo & Graphisme
- Gemini canvas - Guide
- Project canvas - Télécharger - Études & Formations
- 3d canvas - Télécharger - 3D
- Chronomètre dans un canvas - Forum Javascript
2 réponses
Bonsoir,
Tu pourrais t'aider de cette page :
https://pythonspot.com/pyqt5-matplotlib/
Et il y a beaucoup d'autres articles concernant pyqt5 sur ce site.
J'ai rapidement testé à partir du code cette page en intégrant le graphique et réduisant le code au plus simple.
Comme je suppose que le but est d'ajouter d'autres widgets à ta fenêtre sinon aucun intérêt en l'état, il faudra je pense utiliser des layouts, comme tu as tenté de faire.
Tu pourrais t'aider de cette page :
https://pythonspot.com/pyqt5-matplotlib/
Et il y a beaucoup d'autres articles concernant pyqt5 sur ce site.
J'ai rapidement testé à partir du code cette page en intégrant le graphique et réduisant le code au plus simple.
import sys from PyQt5.QtWidgets import QApplication, QMainWindow from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar from matplotlib.figure import Figure class App(QMainWindow): def __init__(self): super().__init__() self.title = 'Title' self.initUI() def initUI(self): self.setWindowTitle(self.title) self.canvas = PlotCanvas(self) self.setGeometry(0, 0, self.canvas.width(), self.canvas.height()) self.show() class PlotCanvas(FigureCanvas): def __init__(self, parent): fig = Figure() self.axes = fig.subplots() FigureCanvas.__init__(self, fig) self.setParent(parent) self.toolbar = NavigationToolbar(self, self) height = self.toolbar.height() + self.height() fig.set_figheight(height) self.plot() def plot(self): import sqlite3 var_personnage = [] var_nombre_faute = [] with sqlite3.connect("base.db") as con: cur = con.cursor() cur.execute("select personne, count(*) from matable group by(personne)") for personne, nb in cur.fetchall(): var_personnage.append(personne) var_nombre_faute.append(nb) people = var_personnage y = range(len(people)) error=0 self.axes.barh(y, var_nombre_faute, xerr=error, align='center',color='red', edgecolor='green', height=0.5) self.axes.set_yticks(y) self.axes.set_yticklabels(people) self.axes.invert_yaxis() # labels read top-to-bottom self.axes.set_xlabel('Pourcentage') self.axes.set_title('Nombre enregistrement personne') if __name__ == '__main__': app = QApplication(sys.argv) ex = App() sys.exit(app.exec_())
Comme je suppose que le but est d'ajouter d'autres widgets à ta fenêtre sinon aucun intérêt en l'état, il faudra je pense utiliser des layouts, comme tu as tenté de faire.