Matplotlib 中文用户指南 3.3 使用 GridSpec 自定义子图位置

简介: 使用 GridSpec 自定义子图位置 原文:Customizing Location of Subplot Using GridSpec 译者:飞龙 协议:CC BY-NC-SA 4.0GridSpec指定子图将放置的网格的几何位置。

使用 GridSpec 自定义子图位置

原文:Customizing Location of Subplot Using GridSpec

译者:飞龙

协议:CC BY-NC-SA 4.0

GridSpec

指定子图将放置的网格的几何位置。 需要设置网格的行数和列数。 子图布局参数(例如,左,右等)可以选择性调整。

SubplotSpec

指定在给定GridSpec中的子图位置。

subplot2grid

一个辅助函数,类似于pyplot.subplot,但是使用基于 0 的索引,并可使子图跨越多个格子。

subplot2grid基本示例

要使用subplot2grid,你需要提供网格的几何形状和网格中子图的位置。 对于简单的单网格子图:

ax = plt.subplot2grid((2,2),(0, 0))

等价于:

ax = plt.subplot(2,2,1)
       nRow=2, nCol=2
(0,0) +-------+-------+
      |   1   |       |
      +-------+-------+
      |       |       |
      +-------+-------+

要注意不想subplotgridspec中的下标从 0 开始。

为了创建跨越多个格子的子图,

ax2 = plt.subplot2grid((3,3), (1, 0), colspan=2)
ax3 = plt.subplot2grid((3,3), (1, 2), rowspan=2)

例如,下列命令:

ax1 = plt.subplot2grid((3,3), (0,0), colspan=3)
ax2 = plt.subplot2grid((3,3), (1,0), colspan=2)
ax3 = plt.subplot2grid((3,3), (1, 2), rowspan=2)
ax4 = plt.subplot2grid((3,3), (2, 0))
ax5 = plt.subplot2grid((3,3), (2, 1))

会创建:

GridSpecSubplotSpec

你可以显式创建GridSpec并用它们创建子图。

例如,

ax = plt.subplot2grid((2,2),(0, 0))

等价于:

import matplotlib.gridspec as gridspec
gs = gridspec.GridSpec(2, 2)
ax = plt.subplot(gs[0, 0])

gridspec示例提供类似数组(一维或二维)的索引,并返回SubplotSpec实例。例如,使用切片来返回跨越多个格子的SubplotSpec实例。

上面的例子会变成:

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的时候,你可以调整子图的布局参数,子图由gridspec创建。

gs1 = gridspec.GridSpec(3, 3)
gs1.update(left=0.05, right=0.48, wspace=0.05)

这类似于subplots_adjust,但是他只影响从给定GridSpec创建的子图。

下面的代码

gs1 = gridspec.GridSpec(3, 3)
gs1.update(left=0.05, right=0.48, wspace=0.05)
ax1 = plt.subplot(gs1[:-1, :])
ax2 = plt.subplot(gs1[-1, :-1])
ax3 = plt.subplot(gs1[-1, -1])

gs2 = gridspec.GridSpec(3, 3)
gs2.update(left=0.55, right=0.98, hspace=0.05)
ax4 = plt.subplot(gs2[:, :-1])
ax5 = plt.subplot(gs2[:-1, -1])
ax6 = plt.subplot(gs2[-1, -1])

会产生

使用 SubplotSpec创建 GridSpec

你可以从SubplotSpec创建GridSpec,其中它的布局参数设置为给定SubplotSpec的位置的布局参数。

gs0 = gridspec.GridSpec(1, 2)

gs00 = gridspec.GridSpecFromSubplotSpec(3, 3, subplot_spec=gs0[0])
gs01 = gridspec.GridSpecFromSubplotSpec(3, 3, subplot_spec=gs0[1])

使用SubplotSpec创建复杂嵌套的GridSpec

这里有一个更复杂的嵌套gridspec的示例,我们通过在每个 3x3 内部网格中隐藏适当的脊线,在 4x4 外部网格的每个单元格周围放置一个框。

网格尺寸可变的GridSpec

通常,GridSpec创建大小相等的网格。你可以调整行和列的相对高度和宽度,要注意绝对高度值是无意义的,有意义的只是它们的相对比值。

gs = gridspec.GridSpec(2, 2,
                       width_ratios=[1,2],
                       height_ratios=[4,1]
                       )

ax1 = plt.subplot(gs[0])
ax2 = plt.subplot(gs[1])
ax3 = plt.subplot(gs[2])
ax4 = plt.subplot(gs[3])

相关文章
|
7月前
|
数据可视化 Python
【100天精通Python】Day62:Python可视化_Matplotlib绘图基础,绘制折线图、散点图、柱状图、直方图和饼图,以及自定义图标外观和功能,示例+代码
【100天精通Python】Day62:Python可视化_Matplotlib绘图基础,绘制折线图、散点图、柱状图、直方图和饼图,以及自定义图标外观和功能,示例+代码
122 0
|
2月前
|
数据可视化 搜索推荐 关系型数据库
深入了解Matplotlib中的子图创建方法
深入了解Matplotlib中的子图创建方法
41 0
|
7月前
|
数据可视化 关系型数据库 索引
【100天精通Python】Day63:Python可视化_Matplotlib绘制子图,子图网格布局属性设置等示例+代码
【100天精通Python】Day63:Python可视化_Matplotlib绘制子图,子图网格布局属性设置等示例+代码
96 0
|
数据可视化 前端开发 UED
matplotlib图形整合之多个子图一起绘制
matplotlib图形整合之多个子图一起绘制
582 0
matplotlib图形整合之多个子图一起绘制
|
数据可视化 Python
可视化库Matplotlib-子图
可视化库Matplotlib-子图
可视化库Matplotlib-子图
|
Python
Matplotlib自定义统计图比例
图形的比例对于统计图而言至关重要,好的图形比例可以让人方便的获取图形中相关数据间的关系,因此设置图形比例对于统计图而言是至关重要的,本文介绍如何使用Maplotlib修改统计图比例。
1349 0
Matplotlib自定义统计图比例
|
索引 Python
Matplotlib绘制子图
有时,我们希望检查数据的多个方面间的关系,例如我们不仅希望得到时间与温度的关系,同时我们也需要关注时间与风力等方面之间的关系,Matplotlib提供了将多个图形组合在一起的方法。
875 0
Matplotlib绘制子图
|
Python
Matplotlib添加自定义形状
绘制图形时我们还需要绘制复杂形状,以使统计图看起来更加高级,考虑到这一需求,Matplotlib提供了大量自定义形状的函数,利用可以在统计图中添加各种复杂形状,以使得所绘制的统计图更加具有高级感。
1045 0
Matplotlib添加自定义形状
|
存储 索引 Python
Matplotlib使用自定义颜色绘制统计图
matplotlib 提供的所有绘图都带有默认样式,但有时可能需要自定义绘图的颜色和样式,以对绘制更加精美、符合审美要求的图像。
1533 0
Matplotlib使用自定义颜色绘制统计图
|
Web App开发 Python
01 matplotlib - 折线图、绘图属性、Web安全色、子图、保存画板
=== 折线图 - 头文件 === 解决: 1、中文显示问题 2、图像行内外显示 3、处理闪退问题 import matplotlib.pyplot as plt import numpy as np import pandas as pd # 解决中文显示问题 import matplotlib as mpl mpl.
1900 0