Matplotlib调用plt.show()抛出ValueError错误,求问题成因
问题描述
我尝试运行以下简单的Python代码:
import numpy as np import matplotlib.pyplot as plt x = np.array([1, 2, 3]) y = np.array([4, 5, 6]) plt.plot(x, y) plt.show()
但在执行plt.show()时出现如下错误:
Traceback (most recent call last): File "/home/user/Pycharm/someproject/sam.py", line 36, in <module> plt.show() File "/home/user/Programs/miniconda/envs/plot/lib/python3.10/site-packages/matplotlib/pyplot.py", line 612, in show return _get_backend_mod().show(*args, **kwargs) File "/home/yz8zdw/Programs/pycharm-2024.1.3/plugins/python/helpers/pycharm_matplotlib_backend/backend_interagg.py", line 41, in __call__ manager.show(**kwargs) File "/home/yz8zdw/Programs/pycharm-2024.1.3/plugins/python/helpers/pycharm_matplotlib_backend/backend_interagg.py", line 144, in show self.canvas.show() File "/home/yz8zdw/Programs/pycharm-2024.1.3/plugins/python/helpers/pycharm_matplotlib_backend/backend_interagg.py", line 80, in show FigureCanvasAgg.draw(self) File "/home/user/Programs/miniconda/envs/plot/lib/python3.10/site-packages/matplotlib/backends/backend_agg.py", line 387, in draw self.figure.draw(self.renderer) File "/home/user/Programs/miniconda/envs/plot/lib/python3.10/site-packages/matplotlib/artist.py", line 95, in draw_wrapper result = draw(artist, renderer, *args, **kwargs) File "/home/user/Programs/miniconda/envs/plot/lib/python3.10/site-packages/matplotlib/artist.py", line 72, in draw_wrapper return draw(artist, renderer) File "/home/user/Programs/miniconda/envs/plot/lib/python3.10/site-packages/matplotlib/figure.py", line 3161, in draw self.patch.draw(renderer) File "/home/user/Programs/miniconda/envs/plot/lib/python3.10/site-packages/matplotlib/artist.py", line 72, in draw_wrapper return draw(artist, renderer) File "/home/user/Programs/miniconda/envs/plot/lib/python3.10/site-packages/matplotlib/patches.py", line 632, in draw self._draw_paths_with_artist_properties( File "/home/user/Programs/miniconda/envs/plot/lib/python3.10/site-packages/matplotlib/patches.py", line 617, in _draw_paths_with_artist_properties renderer.draw_path(gc, *draw_path_args) File "/home/user/Programs/miniconda/envs/plot/lib/python3.10/site-packages/matplotlib/backends/backend_agg.py", line 131, in draw_path self._renderer.draw_path(gc, path, transform, rgbFace) ValueError: object __array__ method not producing an array
环境信息:
python 3.8.20 numpy 1.16.0 matplotlib 3.7.5
问题成因
这个错误的核心是numpy与matplotlib版本不兼容:
- matplotlib 3.7.5对numpy的最低版本要求为1.21.0,当前使用的numpy 1.16.0远低于该要求。
- 低版本numpy的
__array__方法实现无法满足matplotlib 3.7.5的调用预期,在绘图渲染环节,matplotlib尝试将对象转换为numpy数组时,低版本numpy无法生成符合要求的数组,从而触发报错。 - 另外,numpy 1.16.0与Python 3.8的兼容性本身存在瑕疵,进一步放大了版本不匹配带来的问题。
内容的提问来源于stack exchange,提问作者TheTomer
相关产品推荐
相关产品推荐

