我尝试在matplotlib中创建一个子图,只指定宽度(使用figwidth(float)
而不是figsize(float, float)
),假设高度有默认值。当调用pyplot.subplots()
时,**fig_kw
参数被传递给pyplot.figure()
调用:
所有附加的关键字参数都传递给pyplot. fig调用。
然后将任何其他关键字参数传递给Figure
构造函数。有效的Figure构造函数关键字参数之一是figwidth=float
。但是,当通过上述传递(子图(figwidth)**--〉图(figwidth)--〉**图(figwidth))完成此操作时,将引发AttributeError:
AttributeError: 'Figure' object has no attribute 'bbox_inches'
重新创建此操作的MWE为:
import matplotlib.pyplot as plt
f, ax = plt.subplots(figwidth=4)
我想这可能是因为需要同时设置高度和宽度,所以我尝试直接使用参数figheight=3
和figwidth=4
调用pyplot.figure()
,但得到了相同的属性错误。
我错过了什么?
2条答案
按热度按时间wr98u20j1#
问题是
figwidth
和figheight
是通过kwargs
在超类中初始化的,这导致调用set_figwidth
方法(源代码),如下所示:它调用
self.get_figheight()
(源代码),如下所示:这是当它试图访问在超类之后初始化的
self.bbox_inches
时抛出错误的行(在这里)。因此不可能在构造函数中传递值,但可以在初始化的对象上设置它们:
rwqw0loc2#
当我尝试运行
plt.figure(figwidth=2)
时,实际上得到了同样的错误。只需要使用
figsize
,它可以处理plt.figure()
和plt.subplots()
,你可以简单地传递默认值: