From cfd2b6004c1388518ccd9ace25bc2217dd2326a7 Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Sun, 29 Jan 2017 17:13:43 +0800 Subject: [PATCH] 3.5 --- 3.5.md | 133 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) diff --git a/3.5.md b/3.5.md index d64625c..366a91a 100644 --- a/3.5.md +++ b/3.5.md @@ -1,5 +1,11 @@ # 艺术家教程 +> 原文:[Artist tutorial](http://matplotlib.org/users/artists.html) + +> 译者:[飞龙](https://github.com/) + +> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/) + matplotlib API 有三个层级。 `matplotlib.backend_bases.FigureCanvas`是绘制图形的区域,`matplotlib.backend_bases.Renderer`是知道如何在`ChartCanvas`上绘制的对象,而`matplotlib.artist.Artist`是知道如何使用渲染器在画布上画图的对象。 `FigureCanvas`和`Renderer`处理与用户界面工具包(如 wxPython)或 PostScript® 等绘图语言交互的所有细节,`Artist`处理所有高级结构,如表示和布局图形,文本和线条。用户通常要花费95%的时间来处理艺术家。 有两种类型的艺术家:基本类型和容器类型。基本类型表示我们想要绘制到画布上的标准图形对象:`Line2D`,`Rectangle`,`Text`,`AxesImage`等,容器是放置它们的位置(`Axis`,`Axes`和`Figure`)。标准用法是创建一个`Figure`实例,使用`Figure`创建一个或多个`Axes`或`Subplot`实例,并使用`Axes`实例的辅助方法来创建基本类型。在下面的示例中,我们使用`matplotlib.pyplot.figure()`创建一个`Figure`实例,这是一个便捷的方法,用于实例化`Figure`实例并将它们与您的用户界面或绘图工具包`FigureCanvas`连接。正如我们将在下面讨论的,这不是必须的 - 你可以直接使用 PostScript,PDF,Gtk+ 或 wxPython `FigureCanvas`实例,直接实例化你的图形并连接它们 - 但是因为我们在这里关注艺术家 API,我们让`pyplot`为我们处理一些细节: @@ -314,3 +320,130 @@ for label in ax.get_xticklabels(): | `yaxis` | `matplotlib.axis.YAxis`实例 | ## 轴容器 + +`matplotlib.axis.Axis`实例处理刻度线,网格线,刻度标签和轴标签的绘制。您可以分别为y轴配置左和右刻度,为x轴分别配置上和下刻度。 `Axis`还存储在自动缩放,平移和缩放中使用的数据和视图间隔,以及`Locator`和`Formatter`实例,它们控制刻度位置以及它们表示为字符串的方式。 + +每个`Axis`对象都包含一个`label`属性(这是 pylab 在调用`xlabel()`和`ylabel()`时修改的东西)以及主和次刻度的列表。刻度是`XTick`和`YTick`实例,它包含渲染刻度和刻度标签的实际线条和文本基本类型。因为刻度是按需动态创建的(例如,当平移和缩放时),您应该通过访问器方法`get_major_ticks()`和`get_minor_ticks()`访问主和次刻度的列表。虽然刻度包含所有下面要提及的基本类型,`Axis`方法包含访问器方法来返回刻度线,刻度标签,刻度位置等: + +```py +In [285]: axis = ax.xaxis + +In [286]: axis.get_ticklocs() +Out[286]: array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]) + +In [287]: axis.get_ticklabels() +Out[287]: + +# note there are twice as many ticklines as labels because by +# default there are tick lines at the top and bottom but only tick +# labels below the xaxis; this can be customized +In [288]: axis.get_ticklines() +Out[288]: + +# by default you get the major ticks back +In [291]: axis.get_ticklines() +Out[291]: + +# but you can also ask for the minor ticks +In [292]: axis.get_ticklines(minor=True) +Out[292]: +``` + +下面是`Axis`的一些有用的访问器方法的总结(它们拥有相应的`setter`,如`set_major_formatter`)。 + + +| 访问器方法 | 描述 | +| --- | --- | +| get_scale | 轴的比例,例如`'log'`或`'linear'` | +| get_view_interval | 轴视图范围的内部实例 | +| get_data_interval | 轴数据范围的内部实例 | +| get_gridlines | 轴的网格线列表 | +| get_label | 轴标签 - `Text`实例 | +| get_ticklabels | `Text`实例的列表 - 关键字`minor=True|False` | +| get_ticklines | `Line2D`实例的列表 - 关键字`minor=True|False` | +| get_ticklocs | `Tick`位置的列表 - 关键字`minor=True|False` | +| get_major_locator | 用于主刻度的`matplotlib.ticker.Locator`实例 | +| get_major_formatter | 用于主刻度的`matplotlib.ticker.Formatter`实例 | +| get_minor_locator | 用于次刻度的`matplotlib.ticker.Locator`实例 | +| get_minor_formatter | 用于次刻度的`matplotlib.ticker.Formatter`实例 | +| get_major_ticks | 用于主刻度的`Tick`实例列表 | +| get_minor_ticks | 用于次刻度的`Tick`实例列表 | +| grid | 为主或次刻度打开或关闭网格 | + +这里是个例子,出于美观不太推荐,它自定义了轴域和刻度属性。 + +```py +import numpy as np +import matplotlib.pyplot as plt + +# plt.figure creates a matplotlib.figure.Figure instance +fig = plt.figure() +rect = fig.patch # a rectangle instance +rect.set_facecolor('lightgoldenrodyellow') + +ax1 = fig.add_axes([0.1, 0.3, 0.4, 0.4]) +rect = ax1.patch +rect.set_facecolor('lightslategray') + + +for label in ax1.xaxis.get_ticklabels(): + # label is a Text instance + label.set_color('red') + label.set_rotation(45) + label.set_fontsize(16) + +for line in ax1.yaxis.get_ticklines(): + # line is a Line2D instance + line.set_color('green') + line.set_markersize(25) + line.set_markeredgewidth(3) + +plt.show() +``` + +![](http://matplotlib.org/_images/fig_axes_customize_simple.png) + +## 刻度容器 + +`matplotlib.axis.Tick`是我们从`Figure`到`Axes`再到`Axis`再到`Tick`的最终的容器对象。`Tick`包含刻度和网格线的实例,以及上侧和下侧刻度的标签实例。 每个都可以直接作为`Tick`的属性访问。此外,也有用于确定上标签和刻度是否对应`x`轴,以及右标签和刻度是否对应`y`轴的布尔变量。 + + +| 刻度属性 | 描述 | +| --- | --- | +| `tick1line` | `Line2D`实例 | +| `tick2line` | `Line2D`实例 | +| `gridline` | `Line2D`实例 | +| `label1` | `Text`实例 | +| `label2` | `Text`实例 | +| `gridOn` | 确定是否绘制刻度线的布尔值 | +| `tick1On` | 确定是否绘制主刻度线的布尔值 | +| `tick2On` | 确定是否绘制次刻度线的布尔值 | +| `label1On` | 确定是否绘制主刻度标签的布尔值 | +| `label2On` | 确定是否绘制次刻度标签的布尔值 | + +这里是个例子,使用美元符号设置右侧刻度,并在`y`轴右侧将它们设成绿色。 + +```py +import numpy as np +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker + +# Fixing random state for reproducibility +np.random.seed(19680801) + +fig = plt.figure() +ax = fig.add_subplot(111) +ax.plot(100*np.random.rand(20)) + +formatter = ticker.FormatStrFormatter('$%1.2f') +ax.yaxis.set_major_formatter(formatter) + +for tick in ax.yaxis.get_major_ticks(): + tick.label1On = False + tick.label2On = True + tick.label2.set_color('green') + +plt.show() +``` + +![](http://matplotlib.org/_images/dollar_ticks.png) -- GitLab