终端运行Matplotlib脚本触发TypeError的求助问询
问题描述
平时在Jupyter中运行Matplotlib脚本一切正常,但在终端运行以下代码时出现大量报错:
import matplotlib.pyplot as plt x = [1,2,3] y = [1,2,3] plt.plot(x,y)
尝试卸载并重装Matplotlib后问题仍未解决,报错信息如下:
Traceback (most recent call last): File "c:\Users\Rogelio Medel\OneDrive\CODECADEMY\PERSONAL PROJECTS\Matplotlib2\testy.py", line 6, in <module> plt.plot(x,y) File "C:\Users\Rogelio Medel\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\pyplot.py", line 2730, in plot return gca().plot( File "C:\Users\Rogelio Medel\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\pyplot.py", line 2227, in gca return gcf().gca() File "C:\Users\Rogelio Medel\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\pyplot.py", line 832, in gcf return figure() File "C:\Users\Rogelio Medel\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\_api\deprecation.py", line 454, in wrapper return func(*args, **kwargs) File "C:\Users\Rogelio Medel\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\pyplot.py", line 773, in figure manager = new_figure_manager( File "C:\Users\Rogelio Medel\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\pyplot.py", line 348, in new_figure_manager _warn_if_gui_out_of_main_thread() File "C:\Users\Rogelio Medel\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\pyplot.py", line 338, in _warn_if_gui_out_of_main_thread if (_get_required_interactive_framework(_get_backend_mod()) and File "C:\Users\Rogelio Medel\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\pyplot.py", line 207, in _get_backend_mod switch_backend(dict.__getitem__(rcParams, "backend")) File "C:\Users\Rogelio Medel\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\pyplot.py", line 252, in switch_backend switch_backend(candidate) File "C:\Users\Rogelio Medel\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\pyplot.py", line 265, in switch_backend backend_mod = importlib.import_module( File "C:\Users\Rogelio Medel\AppData\Local\Programs\Python\Python39\lib\importlib\__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1030, in _gcd_import File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 850, in exec_module File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed File "C:\Users\Rogelio Medel\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\backends\backend_qtagg.py", line 12, in <module> from .backend_qt import QtCore, QtGui, _BackendQT, FigureCanvasQT File "C:\Users\Rogelio Medel\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\backends\backend_qt.py", line 72, in <module> _MODIFIER_KEYS = [ File "C:\Users\Rogelio Medel\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\backends\backend_qt.py", line 73, in <listcomp> (_to_int(getattr(_enum("QtCore.Qt.KeyboardModifier"), mod)), TypeError: int() argument must be a string, a bytes-like object or a number, not 'KeyboardModifier'
解决方案
该报错是Matplotlib默认Qt后端与Python 3.9版本不兼容导致的,可尝试以下几种解决方法:
方法1:切换非GUI后端
若无需弹出图形界面,仅需生成或保存图片,可指定Matplotlib使用非交互式后端,修改代码如下:import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt x = [1,2,3] y = [1,2,3] plt.plot(x,y) plt.savefig('plot.png') # 必须添加保存图片的代码,终端不会显示图形窗口方法2:降级Matplotlib版本
Python 3.9与新版本Matplotlib的Qt后端兼容性较差,可降级到适配版本:pip install matplotlib==3.7.1该版本对Python 3.9支持良好,可正常使用Qt后端。
方法3:安装兼容的Qt库
若需保留当前Matplotlib版本,可安装适配的PyQt5版本:pip install pyqt5==5.15.9此版本可与Python 3.9及新版Matplotlib兼容。
内容的提问来源于stack exchange,提问作者Rogelio Tovar
相关产品推荐
相关产品推荐

