将matplotlib绘图嵌入pyqt的方法示例

yipeiwu_com6年前Python基础

我的终极整理,供参考

# 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()

总结就是,想要在特定的位置放matplotlib绘图还是要用面向对象的API,但混合使用pyplot的API可以使代码更简单。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

Python使用贪婪算法解决问题

Python使用贪婪算法解决问题 集合覆盖问题 假设你办了个广播节目,要让全美50个州的听众都收听到。为此,你需要决定在哪些广播台播出。在每个广播台播出都需要支出费用,因此你力图在尽可...

Python变量和字符串详解

Python变量和字符串详解

几个月前,我开始学习个人形象管理,从发型、妆容、服饰到仪表仪态,都开始做全新改造,在塑造个人风格时,最基础的是先了解自己属于哪种风格,然后找到参考对象去模仿,可以是自己欣赏的人、明星或模...

pip安装Python库时遇到的问题及解决方法

pip安装Python库时遇到的问题及解决方法

笔者电脑系统是win7,同时安装了Python2.7和Python3.6,但是在通过命令行直接使用“pip install XXX”安装Python库时出现了以下的错误信息: Fatal...

浅谈机器学习需要的了解的十大算法

浅谈机器学习需要的了解的十大算法

毫无疑问,近些年机器学习和人工智能领域受到了越来越多的关注。随着大数据成为当下工业界最火爆的技术趋势,机器学习也借助大数据在预测和推荐方面取得了惊人的成绩。比较有名的机器学习案例包括Ne...

深入了解如何基于Python读写Kafka

这篇文章主要介绍了深入了解如何基于Python读写Kafka,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 本篇会给出如何使用pyth...