Matplotlib is hiring a Research Software Engineering Fellow! See discourse for details. Apply by January 3, 2020

Version 3.1.1
matplotlib
Fork me on GitHub

目录

Related Topics

轴网格1工具包概述

使用轴网格工具包控制绘图布局。

什么是轴网格1工具包?

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

轴网格1工具包概述

演示轴栅格

axes_grid1

ImageGrid

创建轴网格的类。在Matplotlib中,轴的位置(和大小)在标准化图形坐标中指定。对于需要以给定纵横比显示的图像,这可能不太理想。例如,在matplotlib中不容易使用固定填充来显示相同大小的图像。在这种情况下使用ImageGrid。

轴网格1工具包概述

简单轴栅

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

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

    轴网格1工具包概述

    简单轴网格

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

初始化时,ImageGrid创建给定的数字( NGRADE恩科斯 * * 诺尔斯 * if * ngrids*不是轴实例。提供了一个类似序列的接口来访问各个轴实例(例如网格 [0] 是网格中的第一个轴。轴的顺序见下文)。

ImageGrid采用以下参数,

名字 违约 描述
无花果    
直肠切除术    
nrows_ncols   行数和列数。例如,(2,2)
NGRADE 没有 网格数。nrows x ncols如果没有
方向 “行” 增加轴数的方向。 [列柱]
axes_pad 0.02 以英寸为单位在轴之间填充
add_all 如果为真,则向图形添加轴
share_all 如果为真,则共享所有轴的xaxis和yaxis
方面 轴面
label_mode “L” 将显示刻度线标签解冻的位置。“1”(仅左下轴)、“L”(最左和最下轴)或“All”。
cbar_mode 没有 [无单个每个]
cbar_location “对” [右上方]
cbar_pad 没有 在图像轴和颜色条轴之间填充
cbar_size “5%” 颜色条的大小
axes_class 没有  
rect
指定网格的位置。您可以指定要使用的矩形的坐标(例如(0.1、0.1、0.8、0.8)作为轴),也可以指定类似子块的位置(例如“121”)。
方向
表示轴数的增加方向。
方面
默认情况下(假),网格中轴的宽度和高度将独立缩放。如果为真,则根据数据限制进行缩放(类似于MPL中的Aspect参数)。
share_all
如果为真,则共享所有轴的xaxis和yaxis。
方向

轴数增加的方向。对于“行”,

网格 [0] 网格 [1]
网格 [2] 网格 [3]

对于“栏”,

网格 [0] 网格 [2]
网格 [1] 网格 [3]

也可以创建颜色条(或颜色条)。您可以为每个轴设置颜色条(cbar_mode=“each”),也可以为网格设置单个颜色条(cbar_mode=“single”)。颜色条可以放在你的右边,也可以放在上面。每个颜色条的轴存储为 cbar_axes 属性。

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

轴网格1工具包概述

演示轴栅格

AxesDivider类

在场景后面,imagegrid类和rgbaxes类使用axesdivider类,其作用是计算绘制时轴的位置。虽然有关axesDivider的更多信息将在axesDividerguide(尚未写入)中进行解释,但大多数用户不需要直接使用axesDivider类。轴分割器模块提供一个助手函数,使轴可定位,这是有用的。它采用现有的轴实例并为其创建分隔符。::

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

make_axes_locatable 返回从定位器派生的AxesLocator类的实例。它提供 append_axes 在原始轴的给定一侧(“上”、“右”、“下”和“左”)创建新轴的方法。

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

轴网格1工具包概述

简单彩条

带轴分割器的散点图

MPL中的“scatter-hist.py”示例可以使用 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')

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

轴网格1工具包概述

散射天体

使用axesdivider的散射历史与MPL中的原始散射历史相比有一些优势。例如,可以设置散点图的纵横比,即使X轴或Y轴也会相应共享。

ParasiteAxes

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

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

例1。双星

轴网格1工具包概述

单纯寄生虫

例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$"])
轴网格1工具包概述

简单轴线4

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

轴网格1工具包概述

寄生虫单纯形2

AnchoredArtists

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

轴网格1工具包概述

简单锚定艺术家

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')

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

轴网格1工具包概述

插入定位器演示

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

轴网格1工具包概述

插入定位器演示2

RGB轴

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

from mpl_toolkits.axes_grid1.axes_rgb import RGBAxes

fig = plt.figure(1)
ax = RGBAxes(fig, [0.1, 0.1, 0.8, 0.8])

r, g, b = get_rgb() # r,g,b are 2-d images
ax.imshow_rgb(r, g, b,
              origin="lower", interpolation="nearest")
轴网格1工具包概述

简单RGB

AxesDivider

轴分割模块提供助手类,用于在绘制时调整一组图像的轴位置。

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

首先,通过指定其网格(即水平和垂直)初始化分隔符。

例如,::

rect = [0.2, 0.2, 0.6, 0.6]
horiz=[h0, h1, h2, h3]
vert=[v0, v1, v2]
divider = Divider(fig, rect, horiz, vert)

其中,rect是将被划分的框的边界,h0、.h3、v0、.v2需要是 axes_size . 他们有 get_size 方法返回两个浮点的元组。第一个浮点数是相对大小,第二个浮点数是绝对大小。考虑下面的网格。

V0      
V1      
H0,V2 H1 H2 H3
  • V0=>0, 2
  • V1=>2, 0
  • V2=>3, 0

底行的高度始终为2(轴分隔器内部假定单位为英寸)。第一行和第二行的高度比为2:3。例如,如果网格的总高度为6,则第一行和第二行将分别占(6-1)英寸的2/(2+3)和3/(2+3)。水平柱的宽度将同样确定。设置纵横比时,总高度(或宽度)将相应调整。

这个 mpl_toolkits.axes_grid1.axes_size 包含几个可用于设置水平和垂直配置的类。例如,对于垂直配置,可以使用:

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

在设置了Divider对象之后,您将创建一个将提供给axes对象的定位器实例。::

locator = divider.new_locator(nx=0, ny=1)
ax.set_axes_locator(locator)

新的locator方法的返回值是axeslocator类的一个实例。它是一个可调用对象,返回第一列和第二行单元格的位置和大小。可以创建跨越多个单元格的定位器。::

locator = divider.new_locator(nx=0, nx=2, ny=1)

调用上述定位器时,将返回跨越第一列、第二列和第一行的单元格的位置和大小。在本例中,它将返回 [0:2,1] .

参见示例,

轴网格1工具包概述

简单轴分隔符2

可以根据每个轴的X或Y数据限制(axes x和axes y)调整每个轴的大小。

轴网格1工具包概述

简单轴分隔符3