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

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

简单轴栅¶
每个轴的位置在绘制时确定(请参见 AxesDivider 使整个网格的大小适合给定的矩形(如轴的侧面)。请注意,在本例中,轴之间的填充是固定的,即使您更改了图形大小。
同一列中的轴具有相同的轴宽度(在图形坐标中),同样,同一行中的轴具有相同的高度。同一行(列)中的轴的宽度(高度)根据其视图限制(xlim或ylim)进行缩放。
简单轴网格¶
Xaxis在同一列的轴之间共享。同样,yaxis在同一行的轴之间共享。因此,通过绘图命令或在交互后端使用鼠标更改一个轴的轴属性(视图限制、刻度位置等)将影响所有其他共享轴。
下面的示例展示了如何使用ImageGrid。

演示轴栅格¶
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
在原始轴的给定一侧(“上”、“右”、“下”和“左”)创建新轴的方法。
高度(或宽度)与主轴同步的颜色条¶

简单彩条¶
带轴分割器的散点图¶
这个 直方图散点图 可以使用重写示例 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')
请参阅下面的完整源代码。

散射天体¶
这个 散点直方图(可定位轴) 使用AxesDivider比原来的有一些优势 直方图散点图 在Matplotlib中。例如,可以设置散点图的纵横比,即使x轴或y轴也会相应共享。
ParasiteAxes¶
寄生轴是一个位置与其宿主轴相同的轴。位置会在绘制时进行调整,因此即使主机更改了其位置(例如图像),它也会工作。
在大多数情况下,您首先创建一个主机轴,它提供了一些可以用来创建寄生轴的方法。他们是 双星 , 缠绕的 (类似于Matplotlib中的Twinx和Twiny)和 twin . twin 进行任意转换,映射宿主轴和寄生轴的数据坐标。 draw 从未调用寄生轴的方法。相反,宿主轴以寄生轴的形式收集艺术家,并将其绘制成宿主轴的形式,即,将寄生轴中的艺术家与宿主轴中的艺术家合并,然后根据它们的zorder绘制。宿主和寄生轴修改了一些轴的行为。例如,绘制线的颜色循环在宿主和寄生虫之间共享。此外,主机中的“图例”命令还创建一个图例,其中包括寄生虫轴中的线。要创建主机轴,可以使用 host_subplot 或 host_axes 命令。
例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$"])

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

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

简单锚定艺术家¶
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')
创建数据比例为父轴一半的插入轴。下面是完整的例子。

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

插入定位器演示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)
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)
参见示例,
您还可以根据每个axy或esx轴的大小来调整其大小限制。
关键词:matplotlib代码示例,codex,python plot,pyplot Gallery generated by Sphinx-Gallery