matplotlib中的figsize参数不能改变图像大小?

30

正如您所看到的,代码生成了一个不太清晰的条形图,我想让图形更大,以便更好地查看值。这样做不起作用。正确的方法是什么? x是一个数据框,x ['user'] 是绘图中的X轴, x ['number'] 是Y轴。

import matplotlib.pyplot as plt
%matplotlib inline  
plt.bar(x['user'], x['number'], color="blue")
plt.figure(figsize=(20,10)) 

plt.figure这一行代码不会改变初始尺寸。


10
在执行 plt.bar 命令之前,尝试运行 plt.figure 命令。注意不要改变原本的意思,使翻译更加通俗易懂。 - tda
谢谢。如何将它与条形图放在同一行中?可以这样吗? - user10341548
我现在已经将我的评论作为答案添加,以便完整。如果您有其他问题,最好创建一个新的问题,并提供一个最小、完整和可验证的示例。请参阅此处:https://stackoverflow.com/help/mcve - tda
2个回答

51

一种选择(正如@tda所提到的),也可能是最好/最常规的方法,是将plt.figure放置在plt.bar之前:

import matplotlib.pyplot as plt

plt.figure(figsize=(20,10)) 
plt.bar(x['user'], x['number'], color="blue")

如果您想在创建图形后设置图形大小,另一个选项是使用 fig.set_size_inches(注意我在此处使用了plt.gcf以获取当前图形):

import matplotlib.pyplot as plt

plt.bar(x['user'], x['number'], color="blue")
plt.gcf().set_size_inches(20, 10)

虽然代码不够清晰,但是可以在一行中完成所有操作。首先需要创建图形,然后获取当前轴(fig.gca),并在其上绘制条形图。

import matplotlib.pyplot as plt

plt.figure(figsize=(20, 10)).gca().bar(x['user'], x['number'], color="blue")

最后,我要注意到通常最好使用matplotlib面向对象的方法,其中您保存当前Figure和Axes的引用,并直接在它们上调用所有绘图函数。这可能会增加更多的代码行,但通常代码更清晰(而且您可以避免使用诸如gcf()gca()之类的内容)。例如:

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(20, 10))
ax = fig.add_subplot(111)
ax.bar(x['user'], x['number'], color="blue")

什么是GCF?我在网上找不到任何解释。 - user10341548
我之前不知道 gcf 选项,很好!值得注意的是,尽管最终解决方案都在一行上,但它实际上添加了一个处理步骤(gca()),执行顺序没有改变。 - tda
gcf 获取当前图形实例的引用(我已经给你提供了文档链接)。是的,你还需要另一步 (gca: 获取当前轴),但是当你使用 plt.bar 时,它会自动执行这个步骤,因此 matplotlib 知道在哪个轴上绘制。 - tmdavison
如果您使用matplotlib面向对象的方法,就可以避免使用gcf()gca()fig = plt.figure(figsize=(20, 10); ax = fig.add_subplot(111); ax.bar(...)请参见我上面的编辑。 - tmdavison
@tmdavison 你救了我的一天,谢谢你。 - undefined

2

在指定要绘制的内容之前,先设置图形的大小,如下所示:

import matplotlib.pyplot as plt
%matplotlib inline  

plt.figure(figsize=(20,10)) 
plt.bar(x['user'], x['number'], color="blue")

我想把 plt.bar(x['user'], x['number'], color="blue") 中的 figsize 作为该行的一个参数放在同一行中。这种做法可行吗? - user10341548
1
没有必要这样做。将所有内容放在一行上并不一定会使代码更好。无论如何,我认为这是不可能的,因为您需要在分配数据到图形之前创建图形对象。 - tda
尝试在指定绘图内容之前设置图形大小,但这对我没有用。我看到 Matplotlib 的说明在不同情况下表现不一致,特别是相同的序列在一个情况下有效,在另一个情况下无效,尽管没有明显的区别。有时候可以使用另一个对象或调用而不是赋值来部分地访问相同的功能。这似乎是一个一致性较低的库,经常需要“绕过”,而文档并没有显示清晰的做事方法。 - mins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接