Python 子图放置

Python subplots placement

这一定是个菜鸟问题,但是,我怎么能有两个子图分别具有图中的 (3/4) 和 (1/4)?或者 4/5 和 1/5

我尝试了 gridspec 和简单的子图,但找不到方法。同时我相信这是可以做到的。

到目前为止,这是我的代码:

import matplotlib.pyplot as plt

def make_ticklabels_invisible(fig):
    for i, ax in enumerate(fig.axes):
        ax.text(0.5, 0.5, "ax%d" % (i+1), va="center", ha="center")
        for tl in ax.get_xticklabels() + ax.get_yticklabels():
            tl.set_visible(False)


plt.figure(0)
# ax1 = plt.subplot2grid((4,4), (0,0), colspan=3, rowspan=4)
ax2 = plt.subplot2grid((4,4), (0,1), colspan=1, rowspan=4)

plt.suptitle("subplot2grid")
make_ticklabels_invisible(plt.gcf())
plt.show()

ax1 和 ax2 不放在一起也可以。

好吧,看来我没有正确理解 loc 是如何工作的。我设法通过更改这两行来做到这一点:

ax1 = plt.subplot2grid((4,4), (0,0), colspan=3, rowspan=4)
ax2 = plt.subplot2grid((4,4), (0,3), colspan=1, rowspan=4)

而不是我之前的:

# ax1 = plt.subplot2grid((4,4), (0,0), colspan=3, rowspan=4)
ax2 = plt.subplot2grid((4,4), (0,1), colspan=1, rowspan=4)

这是 3/4 和 1/4 的比率。

我不会删除这个问题,稍后会添加对 loc 工作原理的解释,因为它困扰了我一段时间,所以它作为存档存在。

考虑一次定义所有子图的更自然的方式

fig, (ax1, ax2) = plt.subplots(ncols=2, gridspec_kw=dict(width_ratios=[3,1]))

这是使用 gridspec

的以下代码的快捷方式
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

gs = GridSpec(1,2, width_ratios=[3,1])

fig = plt.figure()
ax1 = fig.add_subplot(gs[0])
ax2 = fig.add_subplot(gs[1])