Matplotlib调整图形边距

时间:2013-09-04 17:07:44

标签: python matplotlib

下面的代码为我提供了一个在图的上方和下方有明显边距的图。我不知道如何消除明显的利润。 subplots_adjust无效。{/ p>

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(10),range(10))
ax.set_aspect('equal')
plt.tight_layout()

tight_layout消除了部分余量,但不是所有边距。

我想要的是实际上将宽高比设置为任何自定义值并同时消除空白区域。

更新:正如Pierre H.所说,关键是要改变数字容器的大小。所以我的问题是:你能否建议一种方法来适应图形的大小到任意纵横比的轴的大小?

换句话说,首先我在其上创建一个图形和一个轴,然后我改变轴的大小(例如通过改变纵横比),这通常会使图形容器的一部分留空。在这个阶段,我们需要相应地改变图形的大小,以消除图形容器上的空白区域。

7 个答案:

答案 0 :(得分:43)

我刚刚发现如何从我的数字中消除所有边距。我没有使用tight_layout(),而是使用了:

import matplotlib.pyplot as plt
fig = plt.figure(figsize=(20,20))
ax = plt.subplot(111,aspect = 'equal')
plt.subplots_adjust(left=0, bottom=0, right=1, top=1, wspace=0, hspace=0)

希望这有帮助。

答案 1 :(得分:18)

绘制图表后,您可以通过这种方式轻松操作边距:

plot_margin = 0.25

x0, x1, y0, y1 = plt.axis()
plt.axis((x0 - plot_margin,
          x1 + plot_margin,
          y0 - plot_margin,
          y1 + plot_margin))

此示例可以更改为您想要的宽高比,或者根据您的需要更改边距。 在其他stacktoverflow帖子中,许多与边距相关的问题都可以使用这种更简单的方法。

最好的问候。

答案 2 :(得分:10)

答案 3 :(得分:5)

我认为subplot_adjust调用与此无关,因为调整被tight_layout覆盖。无论如何,这只会改变图中的大小。

正如tcaswell指出的那样,你需要改变图的大小。使用fig.set_size_inches创建(我的命题下面)或之后。我在这里使用figsize=(6,6)参数创建一个宽高比为1:1的图形(当然6英寸是任意选择):

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(6,6))
ax = fig.add_subplot(111)
ax.plot(range(10),range(10))
ax.set_aspect('equal')
plt.tight_layout()

答案 4 :(得分:4)

如果您想要精确控制图形布局,则应使用add_axes。例如

left = 0.05
bottom = 0.05 
width = 0.9
height = 0.9
ax = fig.add_axes([left, bottom, width, height])

答案 5 :(得分:2)

我认为你需要的是,它对我有用。

plt.axis('tight')

此命令将自动缩放轴以紧密贴合数据。另请查看Nuno Aniceto的答案,了解自定义轴。文件在https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.axis

请注意

plt.savefig(filename, bbox_inches='tight')

将有助于删除所有图形的空白区域,包括标签等,但不包括轴内的空白区域。

答案 6 :(得分:0)

您可以这样使用: plt.subplots_adjust(wspace = 1,hspace = 0.5,left = 0.1,top = 0.9,right = 0.9,bottom = 0.1) 并删除plt.savefig()中的item:bbox_inches ='tight'。