matplotlib 中的 figsize 不会改变图形大小? [复制]

Posted

技术标签:

【中文标题】matplotlib 中的 figsize 不会改变图形大小? [复制]【英文标题】:figsize in matplotlib is not changing the figure size? [duplicate] 【发布时间】:2019-02-15 21:11:27 【问题描述】:

如您所见,代码生成的条形图不太清晰,我想将图放大,以便更好地查看值。这不行。正确的方法是什么? 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 的行不会改变初始尺寸。

【问题讨论】:

plt.bar 行之前尝试plt.figure 行。 谢谢。如何将它与条形图放在同一行?这可以吗? 我现在添加了我的评论作为完整性的答案。我不确定您的意思,如果您还有其他问题,最好创建一个新问题,提供一个最小、完整且可验证的示例。见这里:***.com/help/mcve 【参考方案1】:

一个选项(如@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 面向对象的方法通常会更好,您可以在其中保存对当前图形和轴的引用,并直接在它们上调用所有绘图函数。它可能会添加更多的代码行,但它通常是更清晰的代码(您可以避免使用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?我在网上的任何地方都找不到它的解释 我不知道gcf 选项 - 很好!值得注意的是,虽然最终的解决方案都是一行,但实际上增加了一个处理步骤(gca()),执行顺序没有变化。 gcf 获取对当前图形实例的引用(我已经为您提供了文档的链接)。是的,您还有另一个步骤(gca:获取当前轴),但是当您在内部使用plt.bar 时,无论如何它都会这样做,因此 matplotlib 知道要在哪些轴上绘图 如果您使用matplotlib 面向对象的方法,您可以避免使用gcf()gca()fig = plt.figure(figsize=(20, 10); ax = fig.add_subplot(111); ax.bar(...) 请参阅上面关于此的编辑。【参考方案2】:

在分配要绘制的内容之前尝试设置图形的大小,如下所示:

import matplotlib.pyplot as plt
%matplotlib inline  

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

【讨论】:

我的意思是将 figsize 在plt.bar(x['user'], x['number'], color="blue") 期间作为这一行的参数放在一行中。有可能吗? 没有必要吗?将所有内容都放在一行中并不一定会使代码变得更好。无论如何,我认为这是不可能的,因为您需要在将数据分配给绘图之前创建图形对象。 在分配要绘制的内容之前尝试设置图形的大小”,它对我不起作用,但我看到 Matplotlib 中的指令在一种情况下表现不一致对另一种情况,特别是在一种情况下有效的相同序列,在另一种情况下不起作用,尽管没有明显的区别。有时可以使用另一个对象或通过调用而不是分配来访问相同的功能(至少部分)。这似乎是一个低一致性库,通常需要“绕过”,并且文档没有显示明确的处理方式。

以上是关于matplotlib 中的 figsize 不会改变图形大小? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

matplotlib 设置图形大小时 figsize 与 dpi 的关系

matplotlib 设置图形大小时 figsize 与 dpi 的关系

matplotlib 设置图形大小时 figsize 与 dpi 的关系

如何调整matplotlib图表图[重复]

数据分析——matplotlib

Matplotlib