matplotlibをpyqtに埋め込む方法の例


私の最終整理は参考にしてください。

# coding:utf-8
import matplotlib
#    matplotlib  FigureCanvas (    Qt5 Backends  FigureCanvas   QtWidgets.QWidget)
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.QtWidgets import QDialog, QPushButton, QVBoxLayout
import matplotlib.pyplot as plt
import numpy as np
import sys
"""  pyplot API      API  matplotlib     GUI   """
 
class Main_window(QDialog):
  def __init__(self):
    super().__init__()
    #    , Figure, Axes, FigureCanvas
    # 1         figure axes
    self.figure, (self.ax1, self.ax2) = plt.subplots(figsize=(13, 3), ncols=2)
 
    # 2    figure   axes
    # 2.1  plt.figure() / Figure()   figure,     
    self.figure = plt.figure(figsize=(5,3), facecolor='#FFD7C4')
    # self.figure = Figure(figsize=(5,3), facecolor='#FFD7C4')
    # 2.2  plt.subplots() / plt.add_subplot()   axes,     
    (self.ax1, self.ax2) = self.figure.subplots(1, 2)
    # ax1 = self.figure.add_subplot(121)
    # ax2 = self.figure.add_subplot(122)
 
    # 3   figure canvas 
    self.canvas = FigureCanvas(self.figure)
 
    self.button_draw = QPushButton("  ")
    self.button_draw.clicked.connect(self.Draw)
 
    #     
    layout = QVBoxLayout()
    layout.addWidget(self.canvas)
    layout.addWidget(self.button_draw)
    self.setLayout(layout)
 
  def Draw(self):
    AgeList = ['10', '21', '12', '14', '25']
    NameList = ['Tom', 'Jon', 'Alice', 'Mike', 'Mary']
    #  AgeList       int  
    AgeList = list(map(int, AgeList))
 
    #  x,y   numpy    ,  matplotlib   
    self.x = np.arange(len(NameList)) + 1
    self.y = np.array(AgeList)
 
    # tick_label   x    ,(    :color        ,width        )
    self.ax1.bar(range(len(NameList)), AgeList, tick_label=NameList, color='green', width=0.5)
    for a, b in zip(self.x, self.y):
      self.ax1.text(a-1, b, '%d' % b, ha='center', va='bottom')
    plt.title("Demo")
 
    pos = self.ax2.imshow(np.random.random((100, 100)), cmap=plt.cm.BuPu_r)
    self.figure.colorbar(pos, ax=self.ax2)   #      colorbar 
 
    self.canvas.draw()
 
 
#     
if __name__ == '__main__':
  app = QtWidgets.QApplication(sys.argv)
  main_window = Main_window()
  main_window.show()
  app.exec()
まとめとしては、特定の位置にmatiplotlibを配置するには、対象に向けたAPIを使用する必要がありますが、pylotを混合するAPIは、コードをより簡単にすることができます。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。