简体   繁体   English

当tight_layout失败时,如何减少水平子图间距?

[英]How to reduce horizontal subplot spacing when tight_layout fails?

I'm trying to create a single figure in matplotlib with several subplots of different row and column spans, using subplot2grid. 我正在尝试使用subplot2grid在matplotlib中创建一个具有不同行和列跨度的子图的单个图形。

For example, the following code: 例如,以下代码:

import matplotlib.pyplot as plt
import numpy as n

fig = plt.figure()
ax1 = plt.subplot2grid((2, 5), (0, 0), rowspan=2, colspan=2)
ax2 = plt.subplot2grid((2, 5), (0, 2))
ax2_2 = plt.subplot2grid((2, 5), (0, 3))
ax2_3 = plt.subplot2grid((2, 5), (0, 4))
ax3 = plt.subplot2grid((2, 5), (1, 2), colspan=3) #, sharex=ax2)

xs = n.linspace(0, 2*n.pi, 100)
ax1.plot(xs, n.sin(xs))
ax2.plot(xs, n.cos(xs))
ax2_2.plot(xs, n.tan(xs))
ax2_3.plot(xs, n.sin(xs))
ax3.plot(xs, n.cos(xs))


ax2.set_xticklabels([])
ax2.set_yticklabels([])
ax2_2.set_xticklabels([])
ax2_2.set_yticklabels([])
ax2_3.set_xticklabels([])
ax2_3.set_yticklabels([])

# This comes from a separate attempt to make the ticks invisible, but seems to make no change.
plt.setp(ax2.get_xticklabels(), visible=False)
plt.setp(ax2.get_yticklabels(), visible=False)
plt.setp(ax2_2.get_xticklabels(), visible=False)
plt.setp(ax2_2.get_yticklabels(), visible=False)
plt.setp(ax2_3.get_xticklabels(), visible=False)
plt.setp(ax2_3.get_yticklabels(), visible=False)


fig.set_size_inches(6.5, 2.85)
fig.tight_layout()
# I tried several things here - subplots_adjust improves the vertical spacing a little, but not the horizontal.
fig.subplots_adjust(hspace=0.1)

fig.savefig('test.png', dpi=100)

This makes a figure like: 这使得一个数字如下:

在此输入图像描述

The problem is the 3 single-cell subplots in the top right, each of which has only about 70% of the width that would fit. 问题在于右上角的3个单细胞子图,每个子图只有大约70%的宽度。 tight_layout otherwise takes care of the spacing nicely, but I can't work out why this space isn't filled, or how to work around it. tight_layout否则很好地处理间距,但我无法弄清楚为什么这个空间没有填充,或如何解决它。

So...does anyone know how to do this, making the subplots take the full available width? 所以...有没有人知道如何做到这一点,使子图获取完整的可用宽度?

当使用subplots_adjust()hspace参数将调整垂直空间,而wspace参数将调整水平空间,因此您可能需要的是:

fig.subplots_adjust(wspace=0.1)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM