返回介绍

container Artist

发布于 2024-05-19 17:47:08 字数 10678 浏览 0 评论 0 收藏 0

a. Figure

matplotlib.figure.Figure 是最顶层的 container Artist ,它包含了图表中的所有元素。

  • Figure.patch 属性: Figure 的背景矩形
  • Figure.axes 属性:持有的一个 Axes 实例的列表(包括 Subplot )
  • Figure.images 属性:持有的一个 FigureImages patch 列表
  • Figure.lines 属性:持有一个 Line2D 实例的列表(很少使用)
  • Figure.legends 属性:持有的一个 Figure Legend 实例列表(不同于 Axes.legends )
  • Figure.patches 属性:持有的一个 Figure pathes 实例列表(很少使用)
  • Figure.texts 属性:持有的 Figure Text 实例列表
1 Figure 的 Axes

当你执行 Figure.add_subplot() 或者 Figure.add_axes() 时,这些新建的 Axes 都被添加到 Figure.axes 列表中。

由于 Figure 维持了 current axes ,因此你不应该手动的从 Figure.axes 列表中添加删除元素,而是要通过 Figure.add_subplot()Figure.add_axes() 来添加元素,通过 Figure.delaxes() 来删除元素。但是你可以迭代或者访问 Figure.axes 中的 Axes ,然后修改这个 Axes 的属性。

可以通过 Figure.gca() 获取 current axes ,通过 Figure.sca() 设置 current axes

2 Figure 的 primitive

Figure 也有它自己的 textlinepatchimage 。你可以直接通过 add primitive 语句直接添加。但是注意 Figure 默认的坐标系是以像素为单位,你可能需要转换成 figure 坐标系:(0,0) 表示左下点,(1,1) 表示右上点。

Figure

b. Axes 类

Axes 类是 matplotlib 的核心,你在大多数时间都是在与它打交道。 Axes 代表了 plotting area 。大量的用于绘图的 Artist 存放在它内部,并且它有许多辅助方法来创建和添加 Artist 给它自己,而且它也有许多赋值方法来访问和修改这些 Artist

它有许多方法用于绘图,如 .plot().text().hist().imshow() 等方法用于创建大多数常见的 primitive (如 Line2DRectangleTextImage 等等)。这些方法会创建 primitive Artist 实例,并且添加这些实例到对应的 container 上去,然后必要的时候会绘制这些图形。

Subplot 就是一个特殊的 Axes ,其实例是位于网格中某个区域的 Subplot 实例。其实你也可以在任意区域创建 Axes ,通过 Figure.add_axes([left,bottom,width,height]) 来创建一个任意区域的 Axes ,其中 left,bottom,width,height 都是[0--1]之间的浮点数,他们代表了相对于 Figure 的坐标。

Axes 类

1 .patch 属性

Axes 包含了一个 .patch 属性,对于卡迪尔坐标系而言,它是一个 Rectangle ;对于极坐标而言,它是一个 Circle 。这个 .patch 属性决定了 plotting region 的形状、背景和边框。

Axes 背景

2 常用绘图方法

当调用 Axes.plot() 方法时,该方法会创建一个 matplotlib.lines.Line2D 实例,然后会利用传给 .plot() 的关键字参数来更新该 Line2D 的属性,然后将这个 Line2D 添加到 Axes.lines 列表中。该方法返回的刚创建的 Line2D 列表,因为你可以传递多个 (x,y) 值从而创建多个 Line2D

当调用 Axes.hist() 方法时,类似于 .plot() 方法,不过它会添加 patchesAxes.patches 列表。

Axe 绘图方法

你不应该直接通过 Axes.linesAxes.patches 列表来添加图表。因为当你通过 .plot().hist() 等方法添加图表时, matplotlib 会做许多工作而不仅仅是添加绘图组件到 Axes.lines 或者 Axes.patches 列表中。

但是你可以使用 Axes 的辅助方法 .add_line().add_patch() 方法来添加。

Axe 手动添加绘图组件

3 常用 Axes 方法

下面是 Axes 用于创建 primitive Artist 以及添加他们到相应的 container 中的方法:

  • ax.annotate() :创建 text annotationAnnotate 对象),然后添加到 ax.texts 列表中。
  • ax.bar() :创建 bar chartRectangle 对象),然后添加到 ax.patches 列表中。
  • ax.errorbar() :创建 error bar plotLine2D 对象和 Rectangle 对象),然后添加到 ax.lines 列表中和 ax.patches 列表中。
  • ax.fill() :创建 shared areaPolygon 对象),然后添加到 ax.patches 列表中
  • ax.hist() :创建 histogramRectangle 对象),然后添加到 ax.patches 列表中。
  • ax.imshow() :创建 image dataAxesImage 对象),然后添加到 ax.images 列表中。
  • ax.legend() :创建 axes legendsLegend 对象),然后添加到 ax.legends 列表中。
  • ax.plot() :创建 xy plotLine2D 对象),然后添加到 ax.lines 列表中。
  • ax.scatter() :创建 scatter chartsPolygonCollection 对象),然后添加到 ax.collections 列表中。
  • ax.text() :创建 textText 对象),然后添加到 ax.texts 列表中。
4 Axes 的坐标轴

另外 Axes 还包含两个最重要的 Artist container

  • ax.xaxisXAxis 对象的实例,用于处理 xtick 以及 label 的绘制
  • ax.yaxisYAxis 对象的实例,用于处理 ytick 以及 label 的绘制

Axes 包含了许多辅助方法来访问和修改 XAxisYAxis ,这些辅助方法其实内部调用的是 XAxisYAxis 的方法。因此通常情况下你不需要直接调用 XAxisYAxis 的方法。

Axe 坐标轴

c. Axis 类

matplotlib.axis.Axis 实例处理 tick linegrid linetick label 以及 axis label 的绘制。通常你可以独立的配置 y 轴的左边 tick 以及右边的 tick ,也可以独立地配置 x 轴的上边 tick 以及下边的 tick

Axis 也存储了数据用于内部的缩放以及自适应处理。它还有 Locator 实例和 Formatter 实例用于控制 tick 摆放的位置以及 tick 的标注字符串。

每个 Axis 都有一个 .label 属性,也有 major tick 列表和 minor tick 列表。这些 tickXTickYTick 的实例,他们存放着实际的 line primitive 以及 text primitive 来渲染 tick 以及 ticklabel

tick 是动态创建的,只有在需要创建的时候才创建(比如缩放的时候)。 Axis 也提供了一些辅助方法来获取 tick labeltick location 等等:

  • Axis.get_major_ticks() :获取 major tick 列表(一个 Tick 对象的列表)
  • Axis.get_minor_ticks() :获取 minor tick 列表(一个 Tick 对象的列表)
  • Axis.get_ticklocs() :获取 tick location 列表。 可以通过 minor=True|False 关键字参数控制输出 minor 还是 majortick location
  • Axis.get_ticklabels() :获取 tick label 列表(一个 Text 实例的列表)。 可以通过 minor=True|False 关键字参数控制输出 minor 还是 majortick label
  • Axis.get_ticklines() :获取 tick line 列表(一个 Line2D 实例的列表)。 可以通过 minor=True|False 关键字参数控制输出 minor 还是 majortick line
  • Axis.get_scale() :获取坐标轴的缩放属性,如 'log' 或者 'linear'
  • Axis.get_view_interval() :获取内部的 axis view limits 实例
  • Axis.get_data_interval() :获取内部的 axis data limits 实例
  • Axis.get_gridlines() :获取 grid line 的列表
  • Axis.get_label() :获取 axis label (一个 Text 实例)
  • Axis.get_major_locator() :获取 major tick locator (一个 matplotlib.ticker.Locator 实例)
  • Axis.get_minor_locator() :获取 minor tick locator (一个 matplotlib.ticker.Locator 实例)
  • Axis.get_major_formatter() :获取 major tick formatter (一个 matplotlib.ticker.Formatter 实例)
  • Axis.get_minor_formatter() :获取 minor tick formatter (一个 matplotlib.ticker.Formatter 实例)
  • Axis.grid() :一个开关,用于控制 major 或者 minortickon|off

Axis tick

d. Tick 类

matplotlib.axis.Tick 类是从 Figure --> Axes --> Tick 这个 container 体系中最末端的 containerTick 容纳了 tickgrid line 以及 tick 对应的 label 。所有的这些都可以通过 Tick 的属性获取:

  • Tick.tick1line :一个 Line2D 实例
  • Tick.tick2line :一个 Line2D 实例
  • Tick.gridline :一个 Line2D 实例
  • Tick.label1 :一个 Text 实例
  • Tick.label2 :一个 Text 实例
  • Tick.gridOn :一个布尔值,决定了是否绘制 tickline
  • Tick.tick1On :一个布尔值,决定了是否绘制 1st tickline
  • Tick.tick2On :一个布尔值,决定了是否绘制 2nd tickline
  • Tick.label1On :一个布尔值,决定了是否绘制 1st tick label
  • Tick.label2On :一个布尔值,决定了是否绘制 2nd tick label

y 轴分为左右两个,因此 tick1* 对应左侧的轴; tick2* 对应右侧的轴。 x 轴分为上下两个,因此 tick1* 对应上侧的轴; tick2* 对应下侧的轴。

Tick

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文