matplotlib 如何通过数字指定gridspec位置?

drnojrws  于 2023-04-07  发布在  其他
关注(0)|答案(1)|浏览(86)

我阅读了Customizing Location of Subplot Using GridSpec中的指令,并尝试了以下代码,得到了绘图布局:

import matplotlib.gridspec as gridspec  
    gs = gridspec.GridSpec(3, 3)
    ax1 = plt.subplot(gs[0, :])
    ax2 = plt.subplot(gs[1, :-1])
    ax3 = plt.subplot(gs[1:, -1])
    ax4 = plt.subplot(gs[-1, 0])
    ax5 = plt.subplot(gs[-1, -2])

我知道gridspec.GridSpec(3, 3)会给予一个3*3的布局,但这对gs[0, :]gs[1, :-1]gs[1:, -1]gs[-1, 0]gs[-1, -2]意味着什么?我在网上查了一下,但没有找到详细的扩展,我也试图改变索引,但没有找到一个规律。谁能给我一些解释或给我一个关于这个的链接?

dwthyt8l

dwthyt8l1#

使用gs = gridspec.GridSpec(3, 3),你已经为你的图创建了一个3 × 3的“网格”。从那里,你可以使用gs[...,...]指定每个子图的位置和大小,通过每个子图填充在3x3网格中的行数和列数。查看更多细节:
gs[1, :-1]指定子图在网格空间上的 * 位置 *。例如ax2 = plt.subplot(gs[1, :-1])说:将ax2放在第一行(用[1,...表示)(记住,在python中,索引为零,所以这实际上意味着“从顶部向下的第二行”),从第0列 * 开始拉伸直到 * 最后一列(用...,:-1]表示)。因为我们的网格空间是3列宽,这意味着它将拉伸2列。
也许最好通过注解示例中的每个轴来说明这一点:

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec  
gs = gridspec.GridSpec(3, 3)
ax1 = plt.subplot(gs[0, :])
ax2 = plt.subplot(gs[1, :-1])
ax3 = plt.subplot(gs[1:, -1])
ax4 = plt.subplot(gs[-1, 0])
ax5 = plt.subplot(gs[-1, -2])

ax1.annotate('ax1, gs[0,:] \ni.e. row 0, all columns',xy=(0.5,0.5),color='blue', ha='center')
ax2.annotate('ax2, gs[1, :-1]\ni.e. row 1, all columns except last', xy=(0.5,0.5),color='red', ha='center')
ax3.annotate('ax3, gs[1:, -1]\ni.e. row 1 until last row,\n last column', xy=(0.5,0.5),color='green', ha='center')
ax4.annotate('ax4, gs[-1, 0]\ni.e. last row, \n0th column', xy=(0.5,0.5),color='purple', ha='center')
ax5.annotate('ax5, gs[-1, -2]\ni.e. last row, \n2nd to last column', xy=(0.5,0.5), ha='center')

plt.show()

相关问题