Matplotlib中GridSpec网格切片对应子图区域的计算规则疑问
g[0,:1]对应的网格范围
你定义的gridspec.GridSpec(2,2)是一个2行、2列的0基索引网格,g[0,:1]的维度拆分规则如下:
- 第一个参数
0:代表取行索引为0的行,也就是整个网格的第一行 - 第二个参数
:1:是Python标准左闭右开切片,等价于0:1,代表从列索引0开始,到列索引1之前结束,仅覆盖列索引为0的列,也就是整个网格的第一列
所以g[0,:1]最终对应的是第一行第一列的单个网格区域,生成的子图是1行1列的大小,和直接写g[0,0]效果完全一致。
如果你原本的需求是让子图占满整个第一行(横跨2列),需要把切片改成g[0,:]即可。
GridSpec切片的通用计算逻辑
GridSpec的索引逻辑完全对齐Python二维序列、numpy数组的规则:
- 索引顺序固定为
[行维度选择, 列维度选择],行在前、列在后,所有索引默认从0开始计数 - 单值索引:如果某维度传入单个整数,代表仅选取该维度下对应索引的1个网格
- 切片索引:如果某维度传入
start:end格式的切片,遵循左闭右开规则:- 包含
start对应的索引位置,不包含end对应的索引位置 - 省略
start时(比如:2)默认从索引0开始 - 省略
end时(比如1:)默认覆盖到该维度的最后一个网格
- 包含
- 跨区示例(基于你2行2列的网格):
g[1, :]:取第二行所有列,子图占满整个第二行,横跨2列g[:, 1]:取第二列所有行,子图占满整个第二列,纵跨2行g[0:2, 0:2]:取全部2行2列,子图覆盖整个画布
内容的提问来源于stack exchange,提问作者P K M
相关产品推荐
相关产品推荐

