matplotlib 为什么figwidth参数不能和pyplot.subplots()调用一起使用?

6yoyoihd  于 2023-01-17  发布在  其他
关注(0)|答案(2)|浏览(123)

我尝试在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=3figwidth=4调用pyplot.figure(),但得到了相同的属性错误。
我错过了什么?

wr98u20j

wr98u20j1#

问题是figwidthfigheight是通过kwargs在超类中初始化的,这导致调用set_figwidth方法(源代码),如下所示:

def set_figwidth(self, val, forward=True):
    self.set_size_inches(val, self.get_figheight(), forward=forward)

它调用self.get_figheight()(源代码),如下所示:

def get_figheight(self):
    return self.bbox_inches.height

这是当它试图访问在超类之后初始化的self.bbox_inches时抛出错误的行(在这里)。
因此不可能在构造函数中传递值,但可以在初始化的对象上设置它们:

f, ax = plt.subplots()
f.set_figwidth(10)
rwqw0loc

rwqw0loc2#

当我尝试运行plt.figure(figwidth=2)时,实际上得到了同样的错误。
只需要使用figsize,它可以处理plt.figure()plt.subplots(),你可以简单地传递默认值:

fig, ax_list = plt.subplots(2, 1, figsize=(plt.rcParams['figure.figsize'][0], 3))

相关问题