注解
Click here 下载完整的示例代码
Axisartist工具包概述¶
AxisArtist工具包教程。
警告
斧头艺术家 使用自定义Axis类(从Matplotlib的原始Axes类派生)。作为一个副作用,有些命令(主要与勾号相关)不起作用。
这个 斧头艺术家 包含一个自定义Axis类,用于支持曲线网格(例如,天文学中的世界坐标系)。与Matplotlib的原始Axes类不同轴.x轴以及轴.yaxis要绘制记号、记号线等,axisartist使用一个特殊的美工(axisartist),它可以处理曲线坐标系中的记号、记号线等。

演示浮动轴¶
因为它使用特殊的艺术家,所以一些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)

简单轴线3¶
也可以添加水平轴。例如,您可能有一个Y=0的水平轴(在数据坐标中)。::
ax.axis["y=0"] = ax.new_floating_axis(nth_coord=0, value=0)

简单轴对称1¶
或具有一定偏移量的固定轴:
# make new (right-side) yaxis, but with some offset
ax.axis["right2"] = ax.new_fixed_axis(loc="right", offset=(20, 0))
axisratist命名空间¶
这个 斧头艺术家 命名空间包含一个派生的轴实现。最大的区别在于,负责绘制轴线、记号、记号和轴标签的美工人员从Matplotlib的axis类中分离出来,后者比原始Matplotlib中的艺术家多得多。这一变化是为了支持曲线网格。以下是一些mpl_toolkits.axisartist.Axis与Matplotlib中的原始轴不同。
- 轴元素(轴线(脊椎)、刻度、刻度标签和轴标签)由一个axisratist实例绘制。与轴不同,左、右、上、下轴由不同的艺术家绘制。每一个都可能有不同的记号位置和不同的记号标签。
- 网格线由网格线实例绘制。改变的动机是在曲线坐标系中,网格线可能不会穿过轴线(即,没有相关的刻度)。在原始轴类中,网格线与刻度线绑定。
- 如有必要,可以旋转刻度线(即沿网格线)
总之,所有这些变化都是为了支持
- 曲线网格。
- 浮动轴

演示浮动轴¶
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¶
- 更改刻度线位置和标签。
与原始Matplotlib的轴相同:
ax.set_xticks([1, 2, 3])
- 更改轴属性,如颜色等。
更改相应艺术家的属性。例如,要更改滴答标签的颜色:
ax.axis["left"].major_ticklabels.set_color("r")
要更改多个轴的属性:
ax.axis["left", "bottom"].major_ticklabels.set_color("r")
或者更改所有轴的属性:
ax.axis[:].major_ticklabels.set_color("r")
要更改刻度大小(长度),需要使用轴.主刻度。设置大小方法。要更改记号的方向(默认情况下记号与记号标签的方向相反),请使用轴.主刻度。设置勾选方法。
要在刻度和刻度标签之间更改填充,请使用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")

简单轴方向01¶
设置轴方向的参数是 [“左”、“右”、“下”、“上”] .
你必须理解一些基本的方向概念。
另一方面,有一个“轴线方向”的概念。这是上述每个“底部”、“左侧”、“顶部”和“右侧”轴属性的默认设置。
是吗? 是吗? 左边 底部 正确的 顶部 轴标 方向 “-” “+” “+” “-” 轴标 旋转 180 0 0 180 轴标 佤族 中心 顶部 中心 底部 轴标 哈 正确的 中心 正确的 中心 标签标签 方向 “-” “+” “+” “-” 标签标签 旋转 90 0 -90 180 标签标签 哈 正确的 中心 正确的 中心 标签标签 佤族 中心 基线 中心 基线
“设置轴方向”(“顶部”)是指调整文本旋转等,以适合“顶部”轴的设置。轴方向的概念可以用曲线轴更清楚。

演示轴方向¶
可以在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)

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

演示曲线网格¶
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