Matplotlib.gridspec:如何按数字指定位置?

时间:2018-03-16 14:39:12

标签: python python-3.x matplotlib

我阅读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])

enter image description here

我了解gridspec.GridSpec(3, 3)会给出3 * 3的布局,但它对gs[0, :] gs[1, :-1] gs[1:, -1] gs[-1, 0] gs[-1, -2]的含义是什么?我在网上查找但没有找到详细的扩展,我也尝试更改索引但没有找到常规模式。有人可以给我一些解释或给我一个关于这个的链接吗?

1 个答案:

答案 0 :(得分:1)

使用gs = gridspec.GridSpec(3, 3),您基本上创建了一个3乘3"网格"为你的情节。从那里,您可以使用gs[...,...]来指定每个子图的位置和大小,每个子图填充3x3网格中的行数和列数。查看更多细节:

gs[1, :-1]指定您的子图将在gridspace上的 where 。例如ax2 = plt.subplot(gs[1, :-1])说:将名为ax2的轴放在第一行(由[1,...表示)上(请记住,在python中,索引为零,所以这实质上意味着"第二行从顶部开始#34;),从第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()

enter image description here