《Python Qt GUI与数据可视化编程》第14章程序出现 module ‘matplotlib‘ has no attribute ‘figure‘错误的解决办法

《Python Qt GUI与数据可视化编程》第14章“Matplotlib数据可视化”的示例程序是在Python 3.7和Matplotlib 3.0.0版本下测试过的,运行都没有问题。但是在使用高版本的 Matplotlib 3.3.2时,程序会出现一个严重错误,导致程序根本无法运行。

例如在运行14.1节的示例程序 Demo14_1GUI.py 时,出现如下的错误

Traceback (most recent call last):
  File "G:\PyQt5Book\DemoV5WithoutCpp\chap14matplotlib\Demo14_1Basics\Demo14_1GUI.py", line 106, in <module>
    form=QmyMainWindow()             #创建窗体
  File "G:\PyQt5Book\DemoV5WithoutCpp\chap14matplotlib\Demo14_1Basics\Demo14_1GUI.py", line 45, in __init__
    self.__iniFigure()    # 创建绘图系统,初始化窗口
  File "G:\PyQt5Book\DemoV5WithoutCpp\chap14matplotlib\Demo14_1Basics\Demo14_1GUI.py", line 50, in __iniFigure
    self.__fig=mpl.figure.Figure(figsize=(8, 5))    #单位英寸
AttributeError: module 'matplotlib' has no attribute 'figure'

这个示例只有一个程序文件,文件 Demo14_1GUI.py 的完整代码如下

# -*- coding: utf-8 -*-
## 程序文件: Demo14_1GUI.py
## 使用matplotlib 面向对象方法在GUI中绘图

import sys

import numpy as np

import matplotlib as mpl

from matplotlib.backends.backend_qt5agg import (FigureCanvas, 
                 NavigationToolbar2QT as NavigationToolbar)

from PyQt5.QtWidgets import  QApplication, QMainWindow

from PyQt5.QtCore import  Qt

class QmyMainWindow(QMainWindow): 

   def __init__(self, parent=None):
      super().__init__(parent)   #调用父类构造函数
      self.setWindowTitle("Demo14_1, GUI中的matplotlib绘图")

## rcParams[]参数设置,以正确显示汉字
      mpl.rcParams['font.sans-serif']=['KaiTi','SimHei']    #汉字字体
      mpl.rcParams['font.size']=12   #字体大小
      mpl.rcParams['axes.unicode_minus'] =False    #正常显示符号

      self.__iniFigure()    # 创建绘图系统,初始化窗口
      self.__drawFigure()   # 绘图

##==========自定义函数=================
   def __iniFigure(self):  ##创建绘图系统,初始化窗口
      self.__fig=mpl.figure.Figure(figsize=(8, 5))    #单位英寸
      self.__fig.suptitle("plot in GUI application")  #总的图标题
      figCanvas = FigureCanvas(self.__fig)  #创建FigureCanvas对象,必须传递一个Figure对象

      naviToolbar=NavigationToolbar(figCanvas, self)  #创建工具栏
      naviToolbar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)  
      self.addToolBar(naviToolbar)  #添加工具栏到主窗口
      self.setCentralWidget(figCanvas)   
      
   def __drawFigure(self):  ## 绘图
      t = np.linspace(0, 10, 40)
      y1=np.sin(t)
      y2=np.cos(2*t)

      ax1=self.__fig.add_subplot(1,2,1)   #添加子图,ax1是 matplotlib.axes.Axes 类对象
      ax1.plot(t,y1,'r-o',label="sin", linewidth=1, markersize=5)    #绘制一条曲线
      ax1.plot(t,y2,'b:',label="cos",linewidth=2)           #绘制一条曲线
      ax1.set_xlabel('X 轴')               # X轴标题
      ax1.set_ylabel('Y 轴',fontsize=14)   # Y轴标题
      ax1.set_xlim([0,10])      # X轴范围 
      ax1.set_ylim([-1.5,1.5])  # Y轴范围 
      ax1.set_title("曲线")     # 子图标题
      ax1.legend()              # 自动创建图例

      ax2=self.__fig.add_subplot(1,2,2)   #添加子图,ax2是 matplotlib.axes.Axes 类对象
      week=["Mon","Tue","Wed","Thur","Fri","Sat","Sun"] 
      sales=np.random.randint(200,400,7)
      ax2.bar(week,sales)           # 绘制柱状图
      ax2.set_xlabel('week days')   # X轴标题
      ax2.set_ylabel('参观人数')    # Y轴标题
      ax2.set_title("柱状图")       # 子图标题
   
##  ============窗体测试程序 ================================
if  __name__ == "__main__":         #用于当前窗体测试
   app = QApplication(sys.argv)     #创建GUI应用程序
   form=QmyMainWindow()             #创建窗体
   form.show()
   sys.exit(app.exec_())

分析错误信息,错误是由函数__iniFigure()中的这行代码导致的

      self.__fig=mpl.figure.Figure(figsize=(8, 5))  

在Python shell中执行下面的命令,也出现错误

>>> import matplotlib as mpl
>>> a=mpl.figure.Figure()
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    a=mpl.figure.Figure()
AttributeError: module 'matplotlib' has no attribute 'figure'
>>> 

而换做如下两种写法是不会出现错误的

>>> import matplotlib.figure as fig
>>> a=fig.Figure()
>>> from matplotlib.figure import Figure
>>> b=Figure()
>>> 

而且,原来的文件 Demo14_1GUI.py在单步调试运行的时候不会出现错误,连续运行时就出错,这可能是Matplotlib新版本中的一个Bug。

为了避免出现错误,将程序做如下的修改,就是直接导入Figure,使用如下的语句

from matplotlib.figure import Figure

然后在创建Figure的实例时直接使用Figure(),即在函数__iniFigure()中创建self.__fig的语句修改为如下的形式

      self.__fig=Figure(figsize=(8, 5))   

这样修改后,程序运行就没有问题了,可以出现如图的界面。

 

本章其他示例中出现类似的问题都可以这么修改。下面是修改后的文件Demo14_1GUI.py前一部分的代码。

# -*- coding: utf-8 -*-
## 程序文件: Demo14_1GUI.py
## 使用matplotlib 面向对象方法在GUI中绘图

import sys

import numpy as np

import matplotlib as mpl

from matplotlib.figure import Figure  #增加了这条语句

from matplotlib.backends.backend_qt5agg import (FigureCanvas, 
                 NavigationToolbar2QT as NavigationToolbar)

from PyQt5.QtWidgets import  QApplication, QMainWindow

from PyQt5.QtCore import  Qt

class QmyMainWindow(QMainWindow): 

   def __init__(self, parent=None):
      super().__init__(parent)   #调用父类构造函数
      self.setWindowTitle("Demo14_1, GUI中的matplotlib绘图")

## rcParams[]参数设置,以正确显示汉字
      mpl.rcParams['font.sans-serif']=['KaiTi','SimHei']    #汉字字体
      mpl.rcParams['font.size']=12   #字体大小
      mpl.rcParams['axes.unicode_minus'] =False    #正常显示符号

      self.__iniFigure()    # 创建绘图系统,初始化窗口
      self.__drawFigure()   # 绘图

##==========自定义函数=================
   def __iniFigure(self):  ##创建绘图系统,初始化窗口
      self.__fig=Figure(figsize=(8, 5))    #修改了这条语句
      self.__fig.suptitle("plot in GUI application")  #总的图标题
      figCanvas = FigureCanvas(self.__fig)  #创建FigureCanvas对象,必须传递一个Figure对象

      naviToolbar=NavigationToolbar(figCanvas, self)  #创建工具栏
      naviToolbar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)  
      self.addToolBar(naviToolbar)  #添加工具栏到主窗口
      self.setCentralWidget(figCanvas)   

 

 

### 回答1: PythonQt GUI都是非常流行的编程工具,而数据可视化编程则是一个非常热门的领域。因此,结合这三者,Python Qt GUI数据可视化编程完整版PDF可以帮助开发人员更好地了解和掌握这个领域的知识和技能。 Python是一种解释性语言,具有极高的可读性和易于学习的特点,因此成为了数据可视化编程中广泛使用的语言之一。而Qt GUI是一个用C++编写的跨平台开发框架,其也提供了Python的绑定,因此可以轻松地使用Python进行GUI编程数据可视化编程是通过将数据转换为图形化形式,让用户更容易理解和分析数据的过程。PythonQt GUI可以与数据可视化工具如Matplotlib、Seaborn、Plotly等集成使用,在数据可视化方面提供丰富的功能和工具,方便开发人员进行数据呈现和分析。 这本完整版PDF的优势在于它从入门到进阶都涵盖了Python Qt GUI数据可视化编程的重要基础知识和实用技能,包括Qt GUI的界面设计、事件处理、布局管理等方面,以及数据可视化Python库的使用、图表的设计、交互操作的实现等方面。此外,PDF中还介绍了Qt Designer等可视化工具的使用,使读者能够更好地理解和实践这些概念。 综上所述,Python Qt GUI数据可视化编程完整版PDF是一本非常有价值的教材,它将这些技术整合在一起,帮助开发人员掌握这些强大的工具和技能,为他们在实践中取得更大的成功打下坚实的基础。 ### 回答2: Python是一种流行的编程语言,被广泛应用于各种领域。在图形用户界面(GUI)和数据可视化编程方面,Python有许多优秀的工具可供选择。其中,Qt是一个开源的GUI框架,可以用于创建跨平台的图形用户界面,而PyQt则是Qt的一个Python绑定库,可以让开发者使用Python来编写Qt应用程序。 在Python Qt GUI方面,本书提供了详细的介绍和实例,涵盖了Qt GUI的基础知识、应用程序的设计、事件处理、样式表、布局管理器、Qt Designer等方面。通过学习本书,读者可以了解到如何使用PythonQt来创建漂亮而功能强大的应用程序,并掌握Qt提供的各种工具和技术。 在数据可视化编程方面,Python也有很多优秀的库可供选择。其中,matplotlib是一个流行的数据可视化库,可以用于创建各种类型的图表,包括折线图、散点图、柱状图、饼图等等。此外,还有Seaborn、Bokeh、Plotly等其他库,可以用于创建更加高级的可视化效果。 本书也提供了对数据可视化方面的详细介绍和实例,包括matplotlib的基础知识、绘图、子图、图例、颜色、标签、注释、3D绘图等方面。通过学习本书,读者可以了解到如何使用Python来绘制各种类型的图表,并掌握各种可视化库的使用方法和技巧。 总之,Python Qt GUI数据可视化编程完整版pdf是一本非常实用和实用的书籍,适合想要深入学习PythonGUI数据可视化方面的读者。无论是开发桌面应用程序还是进行数据分析和可视化,本书都是一个非常好的学习资料。 ### 回答3: Python是一种功能强大的编程语言,广泛应用于许多领域。其中,Python在图形用户界面(GUI)和数据可视化方面的功能尤为突出,而QT则是一个流行的GUI开发框架。因此,许多开发者使用PythonQT来编写自己的GUI应用程序数据可视化工具。 Python QT GUI数据可视化编程完整版PDF涵盖了PythonQT的核心概念以及数据可视化的基础知识。这本书适合初学者和有经验的开发者阅读,可以帮助他们快速入门并掌握这些技术。书中介绍了Python的基本语法和数据结构,通过这些知识来编写GUI应用程序数据可视化工具。 在书中,开发者可以学习到如何使用QT Designer设计和创建GUI界面,并使用Python代码将其连接到应用程序。此外,本书还介绍了如何使用一些流行的数据可视化库(如Matplotlib和Seaborn)来创建各种类型的图表,帮助用户更好地理解和呈现数据。 此外, Python QT GUI数据可视化编程完整版PDF还使用实用的案例来演示相关的技术,包括创建简单的计算器应用程序和实现数据可视化并交互地操作数据。这些案例不仅有助于理解PythonQT的基础知识,而且可以帮助开发者在实际应用中解决实际问题。 总之,如果您是一个想要学习PythonQT编程以及数据可视化的开发者, Python QT GUI数据可视化编程完整版PDF是一个非常好的入门资源。通过它,您可以快速掌握这些技能,并开始在自己的项目中应用它们。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值