Matplotlib调整图形边距

wdg*_*wdg 26 python matplotlib

下面的代码给出了一个在图的上方和下方有明显边距的图.我不知道如何消除明显的利润.subplots_adjust没有按预期工作.

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()
Run Code Online (Sandbox Code Playgroud)

tight_layout 消除了一些边际,但不是所有的边距.

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

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

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

小智 48

我刚刚发现如何从我的数字中消除所有边距.我没用过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)
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 我遇到了一个奇怪的问题,其中ight_layout在大多数情况下都有效,但大约十分之一的图最终会因为tight_layout而变成空白。这种方法为我提供了一个看似更可靠的替代方案。谢谢你! (3认同)

Nun*_*eto 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))
Run Code Online (Sandbox Code Playgroud)

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

最好的祝福.

  • 努诺......非常有帮助.您简单易读的方法对我来说非常出色.我有这个小格式化函数,可以处理各种xy图形,这些图形对两个轴都有不同的范围,所以我发现我需要编写,例如,'plot_marginx = 0.05*(x1-x0)`并放置在`plt.axis()`行之前...当然也适用于y. (2认同)
  • 这与 `plt.set_xlim()` 或 `set_ylim()` 相同,用于更改显示数据的范围。这与改变轴的大小非常不同 (2认同)

kev*_*vin 10

tight_layout(pad=0)将满足您的需求. http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.tight_layout

  • figure.set_tight_layout({"pad":.0})为我做了. (5认同)

bea*_*ker 7

我认为你需要的是,它对我来说效果很好。

plt.axis('tight')
Run Code Online (Sandbox Code Playgroud)

此命令将自动缩放轴以紧密贴合数据。另请查看 Nuno Aniceto 的答案以获得自定义轴。文档位于https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.axis 中

意识到

plt.savefig(filename, bbox_inches='tight')
Run Code Online (Sandbox Code Playgroud)

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


小智 6

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

left = 0.05
bottom = 0.05 
width = 0.9
height = 0.9
ax = fig.add_axes([left, bottom, width, height])
Run Code Online (Sandbox Code Playgroud)


Pie*_* H. 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()
Run Code Online (Sandbox Code Playgroud)