Matplotlib is hiring a Research Software Engineering Fellow! See discourse for details. Apply by January 3, 2020
使用轴网格工具包控制绘图布局。
axes_grid1 是帮助器类的集合,以便于使用matplotlib显示(多个)图像。在Matplotlib中,轴的位置(和大小)是在规格化的图形坐标中指定的,这可能不适合显示需要具有给定纵横比的图像。例如,如果您有一个颜色条,它的高度总是与图像的高度相匹配,那么它会有所帮助。 ImageGrid , RGB Axes 和 AxesDivider 是处理调整(多个)轴位置的助手类。它们提供了一个框架来调整绘制时多个轴的位置。 ParasiteAxes 提供类似twinx(或twiny)的功能,以便在同一轴上绘制不同的数据(例如,不同的Y比例)。 AnchoredArtists 包括放置在某个固定位置(如图例)的自定义艺术家。
创建轴网格的类。在Matplotlib中,轴的位置(和大小)在标准化图形坐标中指定。对于需要以给定纵横比显示的图像,这可能不太理想。例如,在matplotlib中不容易使用固定填充来显示相同大小的图像。在这种情况下使用ImageGrid。
每个轴的位置在绘制时确定(请参见 AxesDivider 使整个网格的大小适合给定的矩形(如轴的侧面)。请注意,在本例中,轴之间的填充是固定的,即使您更改了图形大小。
同一列中的轴具有相同的轴宽度(在图形坐标中),同样,同一行中的轴具有相同的高度。同一行(列)中的轴的宽度(高度)根据其视图限制(xlim或ylim)进行缩放。
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。
在场景后面,imagegrid类和rgbaxes类使用axesdivider类,其作用是计算绘制时轴的位置。虽然有关axesDivider的更多信息将在axesDividerguide(尚未写入)中进行解释,但大多数用户不需要直接使用axesDivider类。轴分割器模块提供一个助手函数,使轴可定位,这是有用的。它采用现有的轴实例并为其创建分隔符。::
ax = subplot(1,1,1)
divider = make_axes_locatable(ax)
make_axes_locatable 返回从定位器派生的AxesLocator类的实例。它提供 append_axes 在原始轴的给定一侧(“上”、“右”、“下”和“左”)创建新轴的方法。
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')
请参阅下面的完整源代码。
使用axesdivider的散射历史与MPL中的原始散射历史相比有一些优势。例如,可以设置散点图的纵横比,即使X轴或Y轴也会相应共享。
寄生轴是一个位置与其宿主轴相同的轴。位置会在绘制时进行调整,因此即使主机更改了其位置(例如图像),它也会工作。
在大多数情况下,您首先创建一个主机轴,它提供了一些可以用来创建寄生轴的方法。他们是 双星 , 缠绕的 (类似于Matplotlib中的Twinx和Twiny)和 twin . twin 进行任意转换,映射宿主轴和寄生轴的数据坐标。 draw 从未调用寄生轴的方法。相反,宿主轴以寄生轴的形式收集艺术家,并将其绘制成宿主轴的形式,即,将寄生轴中的艺术家与宿主轴中的艺术家合并,然后根据它们的zorder绘制。宿主和寄生轴修改了一些轴的行为。例如,绘制线的颜色循环在宿主和寄生虫之间共享。此外,主机中的“图例”命令还创建一个图例,其中包括寄生虫轴中的线。要创建主机轴,可以使用 host_suplot 或 host_axes 命令。
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$"])
使用Twin的更复杂的例子。请注意,如果更改主机轴中的X限制,寄生虫轴的X限制将相应更改。
这是一个艺术家的集合,他们的位置固定在(轴)bbox上,就像传说一样。它来源于 OffsetBox 在MPL中,需要在画布坐标中绘制艺术家。但是,对任意转换的支持是有限的。例如,下面示例中的椭圆将在数据坐标中具有宽度和高度。
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()
当需要插入表示父轴中小部分的放大时,可以使用。和 mpl_toolkits/axes_grid/inset_locator
提供助手函数 mark_inset()
以标记由插入轴表示的区域的位置。
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")
轴分割模块提供助手类,用于在绘制时调整一组图像的轴位置。
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 |
底行的高度始终为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] .
参见示例,
可以根据每个轴的X或Y数据限制(axes x和axes y)调整每个轴的大小。