当前位置: 代码迷 >> 综合 >> Python matplotlib 报错:RuntimeError: In set_size: Could not set the fontsize:弄清 figsize 和 dpi 的含义
  详细解决方案

Python matplotlib 报错:RuntimeError: In set_size: Could not set the fontsize:弄清 figsize 和 dpi 的含义

热度:66   发布时间:2023-12-15 04:48:13.0

问题

保存图片时报错:RuntimeError: In set_size: Could not set the fontsize

Traceback (most recent call last):File "/Users/robin/MLcode/Pycharm_Project/tensorflow/2021/0823_face_recognition_environment/0827_img_quality_analysis_v4.py", line 1556, in <module>image_cluster_analysis()File "/Users/robin/MLcode/Pycharm_Project/tensorflow/2021/0823_face_recognition_environment/0827_img_quality_analysis_v4.py", line 1549, in image_cluster_analysisimage_showing(img_compressed)File "/Users/robin/MLcode/Pycharm_Project/tensorflow/2021/0823_face_recognition_environment/0827_img_quality_analysis_v4.py", line 1408, in image_showingplt.savefig(img_name)File "/Users/robin/software/anaconda3/envs/tensorflow/lib/python3.6/site-packages/matplotlib/pyplot.py", line 722, in savefigres = fig.savefig(*args, **kwargs)File "/Users/robin/software/anaconda3/envs/tensorflow/lib/python3.6/site-packages/matplotlib/figure.py", line 2180, in savefigself.canvas.print_figure(fname, **kwargs)File "/Users/robin/software/anaconda3/envs/tensorflow/lib/python3.6/site-packages/matplotlib/backend_bases.py", line 2082, in print_figure**kwargs)File "/Users/robin/software/anaconda3/envs/tensorflow/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py", line 579, in print_jpgbuf, size = self.print_to_buffer()File "/Users/robin/software/anaconda3/envs/tensorflow/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py", line 535, in print_to_bufferFigureCanvasAgg.draw(self)File "/Users/robin/software/anaconda3/envs/tensorflow/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py", line 388, in drawself.figure.draw(self.renderer)File "/Users/robin/software/anaconda3/envs/tensorflow/lib/python3.6/site-packages/matplotlib/artist.py", line 38, in draw_wrapperreturn draw(artist, renderer, *args, **kwargs)File "/Users/robin/software/anaconda3/envs/tensorflow/lib/python3.6/site-packages/matplotlib/figure.py", line 1709, in drawrenderer, self, artists, self.suppressComposite)File "/Users/robin/software/anaconda3/envs/tensorflow/lib/python3.6/site-packages/matplotlib/image.py", line 135, in _draw_list_compositing_imagesa.draw(renderer)File "/Users/robin/software/anaconda3/envs/tensorflow/lib/python3.6/site-packages/matplotlib/artist.py", line 38, in draw_wrapperreturn draw(artist, renderer, *args, **kwargs)File "/Users/robin/software/anaconda3/envs/tensorflow/lib/python3.6/site-packages/matplotlib/axes/_base.py", line 2607, in drawself._update_title_position(renderer)File "/Users/robin/software/anaconda3/envs/tensorflow/lib/python3.6/site-packages/matplotlib/axes/_base.py", line 2556, in _update_title_positionif title.get_window_extent(renderer).ymin < top:File "/Users/robin/software/anaconda3/envs/tensorflow/lib/python3.6/site-packages/matplotlib/text.py", line 890, in get_window_extentbbox, info, descent = self._get_layout(self._renderer)File "/Users/robin/software/anaconda3/envs/tensorflow/lib/python3.6/site-packages/matplotlib/text.py", line 291, in _get_layoutismath="TeX" if self.get_usetex() else False)File "/Users/robin/software/anaconda3/envs/tensorflow/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py", line 210, in get_text_width_height_descentfont = self._get_agg_font(prop)File "/Users/robin/software/anaconda3/envs/tensorflow/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py", line 250, in _get_agg_fontfont.set_size(size, self.dpi)
RuntimeError: In set_size: Could not set the fontsize

解决

问题来源是figure_sizedpi 的设置:

下面两段代码是有区别的:

figure_size = (6.40, 4.80)
plt.figure(figsize=figure_size, dpi=100)

以及:

figure_size = (640, 480)
plt.figure(figsize=figure_size, dpi=1)

注:

  • figsize:Width, height in inches,defualt:(6.4, 4.8),即是以英寸表示的图片大小,matplotlib 中默认值是(6.4, 40.8)
  • dpi:dots(or pixels)per inch,default: 100.0,即每英寸的像素数,默认是 100

虽说上面两种表示似乎是一样,但是使用 dpi=1的那种方式产生了报错。(暂不深究了)

参考:

matplotlib.pyplot.figure

  相关解决方案