轴网格1工具包概述

mpl_toolkits.axes_grid1 工具箱。

什么是轴网格1工具包?

mpl_toolkits.axes_grid1 是帮助程序类的集合,用于使用matplotlib轻松显示(多个)图像。在matplotlib中,轴的位置(和大小)是在标准化的图形坐标中指定的,这对于显示需要给定纵横比的图像可能不太理想。例如,如果你有一个颜色条,它的高度总是与图像的高度相匹配。 ImageGridRGB AxesAxesDivider 是处理调整(多个)轴位置的助手类。它们提供了在绘图时调整多个轴的位置的框架。 ParasiteAxes 提供类似twinx(或twiny)的功能,以便在同一轴上绘制不同的数据(例如,不同的Y比例)。 AnchoredArtists 包括放置在某个固定位置(如图例)的自定义艺术家。

../../_images/sphx_glr_demo_axes_grid_0012.png

演示轴栅格

axes_grid1

ImageGrid

轴的网格。

在Matplotlib中,轴的位置(和大小)是在标准化地物坐标中指定的。对于需要以给定宽高比显示的图像,这可能不是理想的;例如,很难在相同大小的多个图像之间使用固定的填充来显示它们。 ImageGrid 可以在这种情况下使用;有关它接受的参数的详细列表,请参阅其文档。

../../_images/sphx_glr_simple_axesgrid_0011.png

简单轴栅

  • 每个轴的位置在绘制时确定(请参见 AxesDivider 使整个网格的大小适合给定的矩形(如轴的侧面)。请注意,在本例中,轴之间的填充是固定的,即使您更改了图形大小。

  • 同一列中的轴具有相同的轴宽度(在图形坐标中),同样,同一行中的轴具有相同的高度。同一行(列)中的轴的宽度(高度)根据其视图限制(xlim或ylim)进行缩放。

    ../../_images/sphx_glr_simple_axesgrid2_0011.png

    简单轴网格

  • Xaxis在同一列的轴之间共享。同样,yaxis在同一行的轴之间共享。因此,通过绘图命令或在交互后端使用鼠标更改一个轴的轴属性(视图限制、刻度位置等)将影响所有其他共享轴。

下面的示例展示了如何使用ImageGrid。

../../_images/sphx_glr_demo_axes_grid_0012.png

演示轴栅格

AxesDivider类

在场景后面,ImageGrid类和RGBAxes类利用 AxesDivider 类,其作用是在绘图时计算轴的位置。大多数用户不需要直接使用AxesDivider类。轴分割器模块提供辅助功能 make_axes_locatable ,这可能很有用。它获取一个现有的axes实例并为其创建一个分隔符。:

ax = subplot(1, 1, 1)
divider = make_axes_locatable(ax)

make_axes_locatable 返回 AxesDivider 班级。它提供了一个 append_axes 在原始轴的给定一侧(“上”、“右”、“下”和“左”)创建新轴的方法。

高度(或宽度)与主轴同步的颜色条

../../_images/sphx_glr_simple_colorbar_0011.png

简单彩条

带轴分割器的散点图

这个 直方图散点图 可以使用重写示例 make_axes_locatable ::

axScatter = subplot(111)
axScatter.scatter(x, y)
axScatter.set_aspect(1.)

# create new axes on the right and on the top of the current axes.
divider = make_axes_locatable(axScatter)
axHistx = divider.append_axes("top", size=1.2, pad=0.1, sharex=axScatter)
axHisty = divider.append_axes("right", size=1.2, pad=0.1, sharey=axScatter)

# the scatter plot:
# histograms
bins = np.arange(-lim, lim + binwidth, binwidth)
axHistx.hist(x, bins=bins)
axHisty.hist(y, bins=bins, orientation='horizontal')

请参阅下面的完整源代码。

../../_images/sphx_glr_scatter_hist_locatable_axes_0011.png

散射天体

这个 散点直方图(可定位轴) 使用AxesDivider比原来的有一些优势 直方图散点图 在Matplotlib中。例如,可以设置散点图的纵横比,即使x轴或y轴也会相应共享。

ParasiteAxes

寄生轴是一个位置与其宿主轴相同的轴。位置会在绘制时进行调整,因此即使主机更改了其位置(例如图像),它也会工作。

在大多数情况下,您首先创建一个主机轴,它提供了一些可以用来创建寄生轴的方法。他们是 双星缠绕的 (类似于Matplotlib中的Twinx和Twiny)和 twin . twin 进行任意转换,映射宿主轴和寄生轴的数据坐标。 draw 从未调用寄生轴的方法。相反,宿主轴以寄生轴的形式收集艺术家,并将其绘制成宿主轴的形式,即,将寄生轴中的艺术家与宿主轴中的艺术家合并,然后根据它们的zorder绘制。宿主和寄生轴修改了一些轴的行为。例如,绘制线的颜色循环在宿主和寄生虫之间共享。此外,主机中的“图例”命令还创建一个图例,其中包括寄生虫轴中的线。要创建主机轴,可以使用 host_subplothost_axes 命令。

例1。双星

../../_images/sphx_glr_parasite_simple_0011.png

单纯寄生虫

例2。成双的

twin 如果没有transform参数,则假定寄生轴与主机具有相同的数据转换。当您希望顶部(或右侧)轴具有不同的刻度位置、刻度标签或底部(或左侧)轴的刻度格式设置工具时,此功能非常有用。::

ax2 = ax.twin() # now, ax2 is responsible for "top" axis and "right" axis
ax2.set_xticks([0., .5*np.pi, np.pi, 1.5*np.pi, 2*np.pi])
ax2.set_xticklabels(["0", r"$\frac{1}{2}\pi$",
                     r"$\pi$", r"$\frac{3}{2}\pi$", r"$2\pi$"])
../../_images/sphx_glr_simple_axisline4_0011.png

简单轴线4

使用Twin的更复杂的例子。请注意,如果更改主机轴中的X限制,寄生虫轴的X限制将相应更改。

../../_images/sphx_glr_parasite_simple2_0011.png

寄生虫单纯形2

AnchoredArtists

这是一个艺术家的集合,他们的位置固定在(轴)bbox上,就像传说一样。它来源于 OffsetBox 在Matplotlib中,艺术家需要在画布坐标下绘制。但是,对任意转换的支持是有限的。例如,下面示例中的椭圆在数据坐标中具有宽度和高度。

../../_images/sphx_glr_simple_anchored_artists_0011.png

简单锚定艺术家

InsetLocator

mpl_toolkits.axes_grid1.inset_locator 提供助手类和函数,将(插入)轴放置在父轴的锚定位置,类似于锚定器。

使用 mpl_toolkits.axes_grid1.inset_locator.inset_axes() ,可以有大小固定或父轴比例固定的插入轴:

inset_axes = inset_axes(parent_axes,
                        width="30%", # width = 30% of parent_bbox
                        height=1., # height : 1 inch
                        loc='lower left')

创建一个插入轴,其宽度为父轴的30%,高度固定为1英寸。

您可以创建尺寸已确定的插入,以便插入轴的数据比例是父轴的数据比例乘以某个系数。例如:

inset_axes = zoomed_inset_axes(ax,
                               0.5, # zoom = 0.5
                               loc='upper right')

创建数据比例为父轴一半的插入轴。下面是完整的例子。

../../_images/sphx_glr_inset_locator_demo_0011.png

插入定位器演示

例如, zoomed_inset_axes() 当需要插入表示父轴中小部分的放大时,可以使用。和 inset_locator 提供助手函数 mark_inset() 以标记由插入轴表示的区域的位置。

../../_images/sphx_glr_inset_locator_demo2_0011.png

插入定位器演示2

RGB轴

rgbaxes是一个帮助器类,可以方便地显示rgb合成图像。与ImageGrid一样,轴的位置也被调整,以使它们所占的区域适合给定的矩形。此外,每个轴的xaxis和yaxis是共享的。::

from mpl_toolkits.axes_grid1.axes_rgb import RGBAxes

fig = plt.figure()
ax = RGBAxes(fig, [0.1, 0.1, 0.8, 0.8], pad=0.0)
r, g, b = get_rgb()  # r, g, b are 2D images.
ax.imshow_rgb(r, g, b)
../../_images/sphx_glr_demo_axes_rgb_0011.png

AxesDivider

这个 mpl_toolkits.axes_grid1.axes_divider 模块提供辅助类来在绘图时调整一组图像的轴位置。

  • axes_size 提供一类用于确定每个轴的大小的单位。例如,可以指定固定大小。
  • Divider 是计算轴位置的类。它将给定的矩形区域划分为多个区域。通过设置除法所基于的水平和垂直大小列表,可以初始化除法。然后使用 new_locator() ,返回一个可调用对象,该对象可用于设置轴的轴定位器。

在这里,我们演示如何实现以下布局:我们希望在3x4网格中定位轴(注意 Divider 使行索引从 底部 (!) 网格的宽度):

+--------+--------+--------+--------+
| (2, 0) | (2, 1) | (2, 2) | (2, 3) |
+--------+--------+--------+--------+
| (1, 0) | (1, 1) | (1, 2) | (1, 3) |
+--------+--------+--------+--------+
| (0, 0) | (0, 1) | (0, 2) | (0, 3) |
+--------+--------+--------+--------+

这样,最下面一行的固定高度为2(英寸),最上面两行的高度比为2(中间)到3(顶部)。(例如,如果栅格的大小为7英寸,则最下面一行为2英寸,中间一行为2英寸,最上面一行为3英寸。)

这些约束是使用 axes_size 模块,即:

from mpl_toolkits.axes_grid1.axes_size import Fixed, Scaled
vert = [Fixed(2), Scaled(2), Scaled(3)]

(更一般地说, axes_size 类定义了 get_size(renderer) 方法返回一对浮点值——相对大小和绝对大小。 Fixed(2).get_size(renderer) 收益率 (0, 2)Scaled(2).get_size(renderer) 收益率 (2, 0)

我们使用这些约束来初始化 Divider 对象:

rect = [0.2, 0.2, 0.6, 0.6]  # Position of the grid in the figure.
vert = [Fixed(2), Scaled(2), Scaled(3)]  # As above.
horiz = [...]  # Some other horizontal constraints.
divider = Divider(fig, rect, horiz, vert)

然后使用 Divider.new_locator 创建一个 AxesLocator 给定网格项的实例:

locator = divider.new_locator(nx=0, ny=1)  # Grid entry (1, 0).

让它负责定位轴:

ax.set_axes_locator(locator)

这个 AxesLocator 是一个可调用对象,返回第一列和第二行单元格的位置和大小。

跨越多个单元格的定位器可以通过以下方式创建,例如:

# Columns #0 and #1 ("0-2 range"), row #1.
locator = divider.new_locator(nx=0, nx1=2, ny=1)

参见示例,

../../_images/sphx_glr_simple_axes_divider1_0021.png

您还可以根据每个axy或esx轴的大小来调整其大小限制。

../../_images/sphx_glr_simple_axes_divider3_0011.png

关键词:matplotlib代码示例,codex,python plot,pyplot Gallery generated by Sphinx-Gallery