matplotlib:去除轴之间的水平间隙?

时间:2015-04-21 02:58:11

标签: python matplotlib

我似乎无法让子图之间的水平差距消失。有什么建议?

代码:

plt.clf()
fig = plt.figure()
for i in range(6):
    ax = fig.add_subplot(3,2,i)

    frame_range = [[]]

    ax.set_xlim(-100000, 1300000)
    ax.set_ylim(8000000, 9100000) 
    ax.set_aspect(1)
    ax.set_xticks([])
    ax.set_yticks([])
    ax.set_frame_on(False)

    ax.add_patch(dt.PolygonPatch(provs[0],fc = 'None', ec = 'black'))


fig.tight_layout(pad=0, w_pad=0, h_pad=0)
plt.subplots_adjust( wspace=0, hspace=0)

plt.savefig(wd + 'example.png')

此代码都发布了示例,并留下了刻度和框架。

Example

Example 2

1 个答案:

答案 0 :(得分:2)

您正在为图表设置两个并发规则。

一个是轴方面

ax.set_aspect(i)

这将迫使情节始终遵循1:1的比例。

另一个是将h_spacew_space设置为零。在这种情况下,matplotlib将尝试更改轴的大小以将空间减少为零。当您将其中一个边缘相互接触时,将方面设置为1时,轴的大小将不再更改。这会产生间隙,使图形水平分开。

有两种方法可以迫使它们彼此靠近。

  • 您可以更改图形宽度以使它们彼此更接近。
  • 您可以设置左右边缘的间距,使它们彼此靠近。

使用你给出的例子,我修改了几行来说明左右间距可以做些什么。

fig = plt.figure()
for i in range(6):
    ax = fig.add_subplot(3,2,i)
    ax.plot(linspace(-1,1),sin(2*pi*linspace(-1,1)))
    draw()
    frame_range = [[]]

    ax.set_aspect(1)
    ax.set_xticks([])
    ax.set_yticks([])
#    ax.set_frame_on(False)
#    ax.add_patch(dt.PolygonPatch(provs[0],fc = 'None', ec = 'black'))


fig.tight_layout(pad=0,w_pad=0, h_pad=0)
subplots_adjust(left=0.25,right=0.75,wspace=0, hspace=0)

结果应该类似于下图。 重要的是要记住,如果你调整窗口的大小,那么将重新分割图块,这取决于你是否使它更宽/更短更宽/更窄。

希望它有所帮助 Grid distribution