Axisartist工具包概述

AxisArtist工具包教程。

警告

斧头艺术家 使用自定义Axis类(从Matplotlib的原始Axes类派生)。作为一个副作用,有些命令(主要与勾号相关)不起作用。

这个 斧头艺术家 包含一个自定义Axis类,用于支持曲线网格(例如,天文学中的世界坐标系)。与Matplotlib的原始Axes类不同轴.x轴以及轴.yaxis要绘制记号、记号线等,axisartist使用一个特殊的美工(axisartist),它可以处理曲线坐标系中的记号、记号线等。

../../_images/sphx_glr_demo_floating_axis_0011.png

演示浮动轴

因为它使用特殊的艺术家,所以一些matplotlib命令在axis.xaxis和axes.yaxis上工作可能不起作用。

斧头艺术家

这个 斧头艺术家 模块提供了一个自定义(也是非常实验性的)轴类,其中每个轴(左、右、上和下)都有一个单独的关联艺术家,负责绘制轴线、刻度线、刻度线标签和标签。您还可以创建自己的轴,该轴可以通过轴坐标中的固定位置,或数据坐标中的固定位置(即,当视界更改时,该轴会浮动)。

默认情况下,axis类的xaxis和yaxis是不可见的,另外还有4个艺术家负责绘制“左”、“右”、“下”和“上”中的4个轴脊椎。它们作为ax.轴访问 [“左”] 轴心轴 [“对”] 等等,也就是说,ax.ax is是一个包含艺术家的字典(注意ax.ax is仍然是一个可调用的方法,它在matplotlib中表现为原始的ax is.ax is方法)。

要创建轴,请执行以下操作:

import mpl_toolkits.axisartist as AA
fig = plt.figure()
ax = AA.Axes(fig, [0.1, 0.1, 0.8, 0.8])
fig.add_axes(ax)

或者创建子批次:

ax = AA.Subplot(fig, 111)
fig.add_subplot(ax)

例如,可以使用以下命令隐藏右侧和顶部脊椎:

ax.axis["right"].set_visible(False)
ax.axis["top"].set_visible(False)
../../_images/sphx_glr_simple_axisline3_0011.png

简单轴线3

也可以添加水平轴。例如,您可能有一个Y=0的水平轴(在数据坐标中)。::

ax.axis["y=0"] = ax.new_floating_axis(nth_coord=0, value=0)
../../_images/sphx_glr_simple_axisartist1_0011.png

简单轴对称1

或具有一定偏移量的固定轴:

# make new (right-side) yaxis, but with some offset
ax.axis["right2"] = ax.new_fixed_axis(loc="right", offset=(20, 0))

有寄生轴的轴虫

axes-grid1工具包中的大多数命令可以采用axes-class关键字参数,并且这些命令创建给定类的轴。例如,要使用axisratist.axes创建主机子批次,请执行以下操作:

import mpl_toolkits.axisartist as AA
from mpl_toolkits.axes_grid1 import host_subplot

host = host_subplot(111, axes_class=AA.Axes)

下面是一个使用寄生轴的例子。

../../_images/sphx_glr_demo_parasite_axes2_0011.png

演示寄生虫axes2

曲线网格

AxisArtist模块背后的动机是支持曲线网格和节拍。

../../_images/sphx_glr_demo_curvelinear_grid_0012.png

演示曲线网格

浮动轴

axisratist还支持其外部轴定义为浮动轴的浮动轴。

../../_images/sphx_glr_demo_floating_axes_0011.png

演示浮动轴

axisratist命名空间

这个 斧头艺术家 命名空间包含一个派生的轴实现。最大的区别在于,负责绘制轴线、记号、记号和轴标签的美工人员从Matplotlib的axis类中分离出来,后者比原始Matplotlib中的艺术家多得多。这一变化是为了支持曲线网格。以下是一些mpl_toolkits.axisartist.Axis与Matplotlib中的原始轴不同。

  • 轴元素(轴线(脊椎)、刻度、刻度标签和轴标签)由一个axisratist实例绘制。与轴不同,左、右、上、下轴由不同的艺术家绘制。每一个都可能有不同的记号位置和不同的记号标签。
  • 网格线由网格线实例绘制。改变的动机是在曲线坐标系中,网格线可能不会穿过轴线(即,没有相关的刻度)。在原始轴类中,网格线与刻度线绑定。
  • 如有必要,可以旋转刻度线(即沿网格线)

总之,所有这些变化都是为了支持

  • 曲线网格。
  • 浮动轴
../../_images/sphx_glr_demo_floating_axis_0011.png

演示浮动轴

mpl_toolkits.axisartist.Axes 类定义了 axis 属性,这是一本关于axisratist实例的字典。默认情况下,字典有4个axisratist实例,负责绘制左、右、下和上轴。

xaxis和yaxis属性仍然可用,但是它们被设置为不可见。由于单独的美工人员用于渲染轴,Matplotlib中与轴相关的某些方法可能没有效果。除了AxisArtist实例外,mpl_toolkits.axisartist.Axis会有 网格线 属性(网格线),它明显绘制网格线。

在轴坐标系和网格线中,刻度线和网格位置的计算都委托给GridHelper类的一个实例。mpl_toolkits.axisratist.axis类使用gridHelperRectlinear作为网格助手。GridHelperRectlinear类是 X轴横轴 它是指Matplotlib的原始轴的工作方式。例如,使用set_ticks方法等更改记号位置应按预期工作。但是艺术家属性的改变(例如,颜色)一般不会起作用,尽管已经做了一些努力,使得一些经常改变的属性(颜色等)得到尊重。

AxisArtist

AxisArtist可以被视为具有以下属性的容器艺术家,这些属性将绘制刻度线、标签等。

  • 线
  • 主要滴答声,主要滴答声标签
  • 次要滴答声、次要滴答声标签
  • 偏移文本
  • 标签

线

从Line2D类派生。负责画脊椎(?)行。

主要节拍,次要节拍

从Line2D类派生。请注意,记号是标记。

主要滴答标签,次要滴答标签

从文本派生。请注意,它不是文本艺术家列表,而是单个艺术家(类似于集合)。

轴标

从文本派生。

默认轴坐标系

默认情况下,为轴艺术家定义以下内容。::

ax.axis["left"], ax.axis["bottom"], ax.axis["right"], ax.axis["top"]

顶部和右侧轴的刻度标签和轴标签设置为不可见。

例如,如果要更改底部X轴的主要刻度标签的颜色属性:

ax.axis["bottom"].major_ticklabels.set_color("b")

同样,要使TickLabels不可见,请执行以下操作:

ax.axis["bottom"].major_ticklabels.set_visible(False)

AxisArtist提供了一个辅助方法来控制记号、记号标签和标签的可见性。要使ticklabel不可见,::

ax.axis["bottom"].toggle(ticklabels=False)

要使所有刻度、刻度标签和(轴)标签都不可见,请执行以下操作:

ax.axis["bottom"].toggle(all=False)

要关闭除勾号之外的所有选项,请执行以下操作:

ax.axis["bottom"].toggle(all=False, ticks=True)

要打开除(轴)标签之外的所有标签,请执行以下操作:

ax.axis["bottom"].toggle(all=True, label=False)

ax.axis's __getitem__ 方法可以采用多个轴名称。例如,要打开“顶部”和“右侧”轴的勾选标签,请执行以下操作:

ax.axis["top", "right"].toggle(ticklabels=True)

注意 ax.axis["top", "right"] 返回一个简单的代理对象,将上面的代码转换为下面的代码。:

for n in ["top", "right"]:
    ax.axis[n].toggle(ticklabels=True)

因此,for循环中的任何返回值都将被忽略。你不应该只使用一个简单的方法。

与列表索引类似:“”表示所有项目,即:

ax.axis[:].major_ticks.set_color("r")

更改所有轴的刻度颜色。

HowTo

  1. 更改刻度线位置和标签。

与原始Matplotlib的轴相同:

ax.set_xticks([1, 2, 3])
  1. 更改轴属性,如颜色等。

更改相应艺术家的属性。例如,要更改滴答标签的颜色:

ax.axis["left"].major_ticklabels.set_color("r")
  1. 要更改多个轴的属性:

    ax.axis["left", "bottom"].major_ticklabels.set_color("r")
    

    或者更改所有轴的属性:

    ax.axis[:].major_ticklabels.set_color("r")
    
  2. 要更改刻度大小(长度),需要使用轴.主刻度。设置大小方法。要更改记号的方向(默认情况下记号与记号标签的方向相反),请使用轴.主刻度。设置勾选方法。

    要在刻度和刻度标签之间更改填充,请使用axis.major_ticklabels.set_pad方法。

    要更改TickLabels和轴标签之间的填充,请使用axis.label.set_pad方法。

滴答标签的旋转和对齐

这与标准Matplotlib也有很大的不同,可能会令人困惑。当您想旋转ticklabels时,首先考虑使用“设置轴方向”方法。:

ax1.axis["left"].major_ticklabels.set_axis_direction("top")
ax1.axis["right"].label.set_axis_direction("left")
../../_images/sphx_glr_simple_axis_direction01_0011.png

简单轴方向01

设置轴方向的参数是 [“左”、“右”、“下”、“上”] .

你必须理解一些基本的方向概念。

  1. 有一个参考方向,定义为坐标增加时轴线的方向。例如,左X轴的参考方向是从下到上的。

    ../../_images/sphx_glr_axis_direction_demo_step01_0011.png

    轴方向演示-步骤01

记号、记号标签和轴标签的方向、文本角度和对齐方式是根据参考方向确定的。
  1. ticklabel_direction 是参考方向的右侧(+)或左侧(-)。

    ../../_images/sphx_glr_axis_direction_demo_step02_0011.png

    轴方向演示-步骤02

  2. 同样的 label_direction

    ../../_images/sphx_glr_axis_direction_demo_step03_0011.png

    轴方向演示-步骤03

  3. 默认情况下,记号是朝记号标签的相反方向绘制的。

  4. 滴答标签和标签的文本旋转参照 ticklabel_directionlabel_direction ,分别。滴答标签和标签的旋转被锚定。

    ../../_images/sphx_glr_axis_direction_demo_step04_0011.png

    轴方向演示-步骤04

另一方面,有一个“轴线方向”的概念。这是上述每个“底部”、“左侧”、“顶部”和“右侧”轴属性的默认设置。

是吗? 是吗? 左边 底部 正确的 顶部
轴标 方向 “-” “+” “+” “-”
轴标 旋转 180 0 0 180
轴标 佤族 中心 顶部 中心 底部
轴标 正确的 中心 正确的 中心
标签标签 方向 “-” “+” “+” “-”
标签标签 旋转 90 0 -90 180
标签标签 正确的 中心 正确的 中心
标签标签 佤族 中心 基线 中心 基线

“设置轴方向”(“顶部”)是指调整文本旋转等,以适合“顶部”轴的设置。轴方向的概念可以用曲线轴更清楚。

../../_images/sphx_glr_demo_axis_direction_0011.png

演示轴方向

可以在AxisArtist级别或其子艺术家级别(即记号、ticklabels和axis label)中调整轴_方向。:

ax1.axis["left"].set_axis_direction("top")

用“左”轴更改所有关联艺术家的轴方向,同时:

ax1.axis["left"].major_ticklabels.set_axis_direction("top")

仅更改主要刻度标签的轴方向。请注意,在轴标记级别中设置_轴_方向会更改滴答标签_方向和标签_方向,而更改滴答、滴答标签和轴标签的轴_方向不会影响它们。

如果要向外标记,并在轴内标记记号,请使用“反转标记方向”方法。::

ax.axis[:].invert_ticklabel_direction()

一个相关的方法是“设置勾号”。它使滴答向外(实际上,它使滴答朝向默认方向的相反方向)。::

ax.axis[:].major_ticks.set_tick_out(True)
../../_images/sphx_glr_simple_axis_direction03_0011.png

简单轴方向03

所以,总之,

  • 轴对称法
    • 设置轴方向:“左”、“右”、“下”或“上”
    • 设置方向:“+”或“-”
    • 设置方向:“+”或“-”
    • invert_ticklabel_direction
  • 节拍方法(主要节拍和次要节拍)
    • 勾选:对还是错
    • 设置大小:以点为单位的大小
  • 滴答标签的方法(主要滴答标签和次要滴答标签)
    • 设置轴方向:“左”、“右”、“下”或“上”
    • 设置旋转:相对于参考方向的角度
    • 设置u ha和设置u va:见下文
  • Axislabels方法(标签)
    • 设置轴方向:“左”、“右”、“下”或“上”
    • 设置旋转:相对于参考方向的角度
    • 设置“ha”和“set”va

调整刻度线标签对齐方式

特别处理滴答标签的对齐。见下文

../../_images/sphx_glr_demo_ticklabel_alignment_0011.png

演示TickLabel对齐

调整垫

要在刻度线和刻度线标签之间更改填充:

ax.axis["left"].major_ticklabels.set_pad(10)

或滴答标签和轴标签:

ax.axis["left"].label.set_pad(10)
../../_images/sphx_glr_simple_axis_pad_0011.png

简单轴垫

GridHelper

要实际定义曲线坐标,必须使用自己的网格助手。提供了网格助手类的通用版本,在大多数情况下,该类应该足够。用户可以提供两个函数,定义从曲线坐标到(直线)图像坐标的转换(及其反对)。请注意,虽然为曲线坐标绘制了记号和网格,但轴本身(ax.transdata)的数据转换仍然是直线(image)坐标。::

from mpl_toolkits.axisartist.grid_helper_curvelinear \
     import GridHelperCurveLinear
from mpl_toolkits.axisartist import Subplot

# from curved coordinate to rectlinear coordinate.
def tr(x, y):
    x, y = np.asarray(x), np.asarray(y)
    return x, y-x

# from rectlinear coordinate to curved coordinate.
def inv_tr(x, y):
    x, y = np.asarray(x), np.asarray(y)
    return x, y+x

grid_helper = GridHelperCurveLinear((tr, inv_tr))

ax1 = Subplot(fig, 1, 1, 1, grid_helper=grid_helper)

fig.add_subplot(ax1)

您可以使用Matplotlib的转换实例(但是必须定义反向转换)。通常,曲线坐标系中的坐标范围可能有限,或者可能有周期。在这些情况下,需要更自定义的grid helper版本。:

import mpl_toolkits.axisartist.angle_helper as angle_helper

# PolarAxes.PolarTransform takes radian. However, we want our coordinate
# system in degree
tr = Affine2D().scale(np.pi/180., 1.) + PolarAxes.PolarTransform()

# extreme finder: find a range of coordinate.
# 20, 20: number of sampling points along x, y direction
# The first coordinate (longitude, but theta in polar)
#   has a cycle of 360 degree.
# The second coordinate (latitude, but radius in polar)  has a minimum of 0
extreme_finder = angle_helper.ExtremeFinderCycle(20, 20,
                                                 lon_cycle = 360,
                                                 lat_cycle = None,
                                                 lon_minmax = None,
                                                 lat_minmax = (0, np.inf),
                                                 )

# Find a grid values appropriate for the coordinate (degree,
# minute, second). The argument is a approximate number of grids.
grid_locator1 = angle_helper.LocatorDMS(12)

# And also uses an appropriate formatter.  Note that the acceptable Locator
# and Formatter classes are different than that of Matplotlib's, and you
# cannot directly use Matplotlib's Locator and Formatter here (but may be
# possible in the future).
tick_formatter1 = angle_helper.FormatterDMS()

grid_helper = GridHelperCurveLinear(tr,
                                    extreme_finder=extreme_finder,
                                    grid_locator1=grid_locator1,
                                    tick_formatter1=tick_formatter1
                                    )

再一次, 转载数据 轴的坐标仍然是直线坐标(图像坐标)。您可以手动在两个坐标之间进行转换,或者为了方便起见,可以使用寄生轴。::

ax1 = SubplotHost(fig, 1, 2, 2, grid_helper=grid_helper)

# A parasite axes with given transform
ax2 = ParasiteAxesAuxTrans(ax1, tr, "equal")
# note that ax2.transData == tr + ax1.transData
# Anything you draw in ax2 will match the ticks and grids of ax1.
ax1.parasites.append(ax2)
../../_images/sphx_glr_demo_curvelinear_grid_0012.png

演示曲线网格

FloatingAxis

浮动轴是数据坐标固定的轴,即其位置不固定在轴坐标中,而是随着轴数据限制的变化而变化。可以使用创建浮动轴 new_floating_axis 方法。但是,您的责任是将产生的轴心国正确添加到轴心国。建议将其添加为轴的轴属性项。::

# floating axis whose first (index starts from 0) coordinate
# (theta) is fixed at 60

ax1.axis["lat"] = axis = ax1.new_floating_axis(0, 60)
axis.label.set_text(r"$\theta = 60^{\circ}$")
axis.label.set_visible(True)

请参阅本页的第一个示例。

当前限制和TODO

代码需要更精细化。这是一个不完整的问题和托多的列表

  • 不容易支持用户自定义的勾号位置(用于曲线网格)。需要创建新的定位器类。
  • floating axis可以有坐标限制,例如x=0的浮动轴,但y的跨度仅为0到1。
  • 浮动轴的轴架位置需要有选择地作为坐标值给出。例如,浮动轴x=0,标签y=1

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