【matplotlib】Python在PyQt5中使用matplotlib无法重复画图的问题

问题描述

应用情景:有一个绘图区,两个按钮,点击按钮在绘图区显示不同的图像。
遇到问题:点击按钮后并没有进行绘图(初始化可以显示)。

解决办法

图像显示完成之后刷新画布,顺利解决问题。

关键代码

初始化画布

import matplotlib.pyplot as plt
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas

self.fig, self.ax = plt.subplots()

self.canvas = FigureCanvas(self.fig)

self.layoutName。addWidget(self.canvas)

显示图像并刷新

self.ax.imshow(img, aspect="auto")

self.canvas.draw()
self.canvas.flush_events()

补充内容

画图方式

在matplotlib中,有两种画图方式:

  • plt.figure(): plt.***系列。通过plt.xxx来画图。这是通过matplotlib提供的一个api,这个plt提供了很多基本的function可以让你很快的画出图来,但是如果你想要更细致的精调,就要使用另外一种方法。第一种方式的代码来看,先生成了一个 Figure画布,然后在这个画布上隐式生成一个画图区域进行画图。
  • fig, ax = plt.subplots(): 正统的稍微复杂一点。指定 figureaxes,然后对axes单独操作。
    第二种方式同时生成了 Figureaxes两个对象,然后用 ax对象在其区域内进行绘图。
    如果从面向对象编程(对理解Matplotlib绘图很重要)的角度来看,显然第二种方式更加易于解释,生成的 figax分别对画布 Figure和绘图区域 Axes进行控制,第一种方式反而显得不是很直观,如果涉及到子图零部件的设置,用第一种绘图方式会很难受。
    在实际绘图时,也更推荐使用第二种方式。

名词解释

【matplotlib】Python在PyQt5中使用matplotlib无法重复画图的问题
  • Figure fig = plt.figure(): 可以解释为画布。
    画图的第一件事,就是创建一个画布figure,然后在这个画布上加各种元素。
  • Axes ax = fig.add_subplot(1,1,1): 不想定义,没法定义,就叫他axes!
    首先,这个不是你画图的xy坐标抽!
    可以把axes理解为你要放到画布上的各个物体。比如你要画一个太阳,一个房子,一个车在画布上,那么太阳是一个axes,房子是一个axes,etc。
    如果你的figure只有一张图,那么你只有一个axes。如果你的figure有subplot,那么每一个subplot就是一个axes
    axes是matlibplot的宇宙中心!axes下可以修改编辑的变量非常多,基本上能包含你的所有需求。
  • Axis ax.xaxis/ax.yaxis: 对,这才是你的xy坐标轴。
    每个坐标轴实际上也是由竖线和数字组成的,每一个竖线其实也是一个axis的subplot,因此ax.xaxis也存在axes这个对象。对这个axes进行编辑就会修改xaxis图像上的表现。

; 部位名称

【matplotlib】Python在PyQt5中使用matplotlib无法重复画图的问题

Original: https://blog.csdn.net/xhltk316/article/details/120062782
Author: 盛夏光年ltk
Title: 【matplotlib】Python在PyQt5中使用matplotlib无法重复画图的问题

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/767484/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球