为何matplotlib的pyplot.subplots()不支持figwidth参数?
问题原因与解决方案
报错原因
尽管Figure构造函数本身支持figwidth和figheight参数,但pyplot.figure()(包括间接调用它的pyplot.subplots())并未针对这两个参数做适配处理。当你传递这两个参数时,pyplot内部后续的布局调整、bbox相关计算等流程,会默认依赖figsize属性来完成;而直接通过figwidth/figheight创建的Figure对象,不会正确初始化这些依赖流程,最终导致出现'Figure' object has no attribute 'bbox_inches'的错误。
正确实现方式
方式1:用figsize指定宽度+默认高度
matplotlib默认的图表高度为4.8(可通过plt.rcParams['figure.figsize']查看),你可以直接使用figsize参数,组合自定义宽度和默认高度:
import matplotlib.pyplot as plt # 获取默认高度 default_height = plt.rcParams['figure.figsize'][1] f, ax = plt.subplots(figsize=(4, default_height))
方式2:直接实例化Figure对象再添加子图
如果一定要使用figwidth参数,可以绕过pyplot上层函数,直接创建Figure实例后手动添加子图:
import matplotlib.pyplot as plt from matplotlib.figure import Figure # 用Figure构造函数指定宽度 fig = Figure(figwidth=4) # 添加子图 ax = fig.add_subplot(111) # 显示图像 plt.show()
内容的提问来源于stack exchange,提问作者compuphys
相关产品推荐
相关产品推荐

