提交 451fb4ef 编写于 作者: W wizardforcel

fix 'artist'

上级 763e97d0
......@@ -22,7 +22,7 @@ Matplotlib 的设计理念是,你应该能够使用几个,或者只有一个
没有找到适合我的包,我做了任何自称 Python 程序员会做的事情:撸起我的袖子开始自己造。我没有任何真正的计算机图形经验,决定模仿 MATLAB 的绘图功能,因为 MATLAB 做得很好。这有额外的优势,许多人有很多 MATLAB 的经验,因此,他们可以很快开始在 python 中绘图。从开发人员的角度来看,拥有固定的用户接口(pylab 接口)非常有用,因为代码库的内容可以重新设计,而不会影响用户代码。
Matplotlib 代码在概念上分为三个部分:pylab 接口是由`matplotlib.pylab`提供的函数集,允许用户使用非常类似于 MATLAB 图生成代码([Pyplot 教程](http://matplotlib.org/users/pyplot_tutorial.html#pyplot-tutorial))的代码创建绘图。 Matplotlib 前端或 Matplotlib API 是一组重要的类,创建和管理图形,文本,线条,图表等([Artist 教程](http://matplotlib.org/users/artists.html#artist-tutorial))。这是一个对输出无所了解的抽象接口。后端是设备相关的绘图设备,也称为渲染器,将前端表示转换为打印件或显示设备(什么是后端?)。后端示例:PS 创建 [PostScript®](http://www.adobe.com/products/postscript/) 打印件,SVG 创建[可缩放矢量图形](http://www.w3.org/Graphics/SVG/)打印件,Agg 使用 Matplotlib 附带的高质量[反颗粒几何库](http://antigrain.com/)创建 PNG 输出,GTK 在 [Gtk+](https://www.gtk.org/) 应用程序中嵌入 Matplotlib,GTKAgg 使用反颗粒渲染器创建图形并将其嵌入到 Gtk+ 应用程序中,以及用于 [PDF](https://acrobat.adobe.com/us/en/why-adobe/about-adobe-pdf.html)[WxWidgets](https://www.wxpython.org/)[Tkinter](https://docs.python.org/library/tkinter.html) 等。
Matplotlib 代码在概念上分为三个部分:pylab 接口是由`matplotlib.pylab`提供的函数集,允许用户使用非常类似于 MATLAB 图生成代码([Pyplot 教程](http://matplotlib.org/users/pyplot_tutorial.html#pyplot-tutorial))的代码创建绘图。 Matplotlib 前端或 Matplotlib API 是一组重要的类,创建和管理图形,文本,线条,图表等([艺术家教程](http://matplotlib.org/users/artists.html#artist-tutorial))。这是一个对输出无所了解的抽象接口。后端是设备相关的绘图设备,也称为渲染器,将前端表示转换为打印件或显示设备(什么是后端?)。后端示例:PS 创建 [PostScript®](http://www.adobe.com/products/postscript/) 打印件,SVG 创建[可缩放矢量图形](http://www.w3.org/Graphics/SVG/)打印件,Agg 使用 Matplotlib 附带的高质量[反颗粒几何库](http://antigrain.com/)创建 PNG 输出,GTK 在 [Gtk+](https://www.gtk.org/) 应用程序中嵌入 Matplotlib,GTKAgg 使用反颗粒渲染器创建图形并将其嵌入到 Gtk+ 应用程序中,以及用于 [PDF](https://acrobat.adobe.com/us/en/why-adobe/about-adobe-pdf.html)[WxWidgets](https://www.wxpython.org/)[Tkinter](https://docs.python.org/library/tkinter.html) 等。
Matplotlib 被很多人在许多不同的上下文中使用。有些人希望自动生成 PostScript 文件以发送给打印机或发布商。其他人在 Web 应用程序服务器上部署 Matplotlib 来生成 PNG 输出,并包含在动态生成的网页中。一些人在 Windows™ 上的 Tkinter 的 Python shell 中以交互方式使用 Matplotlib。我的主要用途是将 Matplotlib 嵌入 Windows,Linux 和 Macintosh OS X 上运行的 Gtk+ EEG 应用程序中。
......
# 艺术家教程
matplotlib API 有三个层级。 `matplotlib.backend_bases.FigureCanvas`是绘制图形的区域,`matplotlib.backend_bases.Renderer`是知道如何在`ChartCanvas`上绘制的对象,而`matplotlib.artist.Artist`是知道如何使用渲染器在画布上画图的对象。 `FigureCanvas``Renderer`处理与用户界面工具包(如 wxPython)或 PostScript® 等绘图语言交互的所有细节,`Artist`处理所有高级结构,如表示和布局图形,文本和线条。通常用户话费95%的时间来处理 Artist
matplotlib API 有三个层级。 `matplotlib.backend_bases.FigureCanvas`是绘制图形的区域,`matplotlib.backend_bases.Renderer`是知道如何在`ChartCanvas`上绘制的对象,而`matplotlib.artist.Artist`是知道如何使用渲染器在画布上画图的对象。 `FigureCanvas``Renderer`处理与用户界面工具包(如 wxPython)或 PostScript® 等绘图语言交互的所有细节,`Artist`处理所有高级结构,如表示和布局图形,文本和线条。用户通常要花费95%的时间来处理艺术家
有两种类型的 Artist:基本类型和容器类型。基本类型表示我们想要绘制到画布上的标准图形对象:`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`为我们处理一些细节:
有两种类型的艺术家:基本类型和容器类型。基本类型表示我们想要绘制到画布上的标准图形对象:`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`为我们处理一些细节:
```py
import matplotlib.pyplot as plt
......@@ -121,12 +121,12 @@ In [149]: matplotlib.artist.getp(fig.patch)
zorder = 1
```
所有类的文档字符串也包含`Artist`属性,因此您可以查阅交互式“帮助”或 [Artist 模块](http://matplotlib.org/api/artist_api.html#artist-api),来获取给定对象的属性列表。
所有类的文档字符串也包含`Artist`属性,因此您可以查阅交互式“帮助”或 [`Artist`模块](http://matplotlib.org/api/artist_api.html#artist-api),来获取给定对象的属性列表。
## 对象容器
现在我们知道如何检查和设置我们想要配置的给定对象的属性,现在我们需要如何获取该对象。 前面提到了两种对象:基本类型和容器类型。 基本类型通常是你想要配置的东西(`Text`实例的字体,`Line2D`的宽度),虽然容器也有一些属性 - 例如 `Axes`是一个容器 Artist,包含你的绘图中的许多基本类型,但它也有属性,比如`xscale`来控制`xaxis`是“线性”还是“对数”。 在本节中,我们将回顾各种容器对象存储您想要访问的艺术家的位置。
现在我们知道如何检查和设置我们想要配置的给定对象的属性,现在我们需要如何获取该对象。 前面提到了两种对象:基本类型和容器类型。 基本类型通常是你想要配置的东西(`Text`实例的字体,`Line2D`的宽度),虽然容器也有一些属性 - 例如 `Axes`是一个容器艺术家,包含你的绘图中的许多基本类型,但它也有属性,比如`xscale`来控制`xaxis`是“线性”还是“对数”。 在本节中,我们将回顾各种容器对象存储您想要访问的艺术家的位置。
## 图形容器
......
......@@ -35,7 +35,7 @@ handles, labels = ax.get_legend_handles_labels()
ax.legend(handles, labels)
```
`get_legend_handles_labels()`函数返回轴域上存在的句柄/artist 的列表,这些句柄/artist 可以用于为结果图例生成条目 - 但值得注意的是,并非所有艺术家都可以添加到图例中, 这种情况下会创建『代理』(请参阅[特地为添加到图例创建 artist(也称为代理 artist](http://matplotlib.org/users/legend_guide.html#proxy-legend-handles),来了解更多详细信息)。
`get_legend_handles_labels()`函数返回轴域上存在的句柄/艺术家的列表,这些句柄/艺术家可以用于为结果图例生成条目 - 但值得注意的是,并非所有艺术家都可以添加到图例中, 这种情况下会创建『代理』(请参阅[特地为添加到图例创建艺术家(也称为代理艺术家](http://matplotlib.org/users/legend_guide.html#proxy-legend-handles),来了解更多详细信息)。
为了完全控制要添加到图例的内容,通常将适当的句柄直接传递给`legend()`
......@@ -53,7 +53,7 @@ line_down, = plt.plot([3,2,1], label='Line 1')
plt.legend([line_up, line_down], ['Line Up', 'Line Down'])
```
## 特地为添加到图例创建 artist(也称为代理 artist
## 特地为添加到图例创建艺术家(也称为代理艺术家
并非所有的句柄都可以自动转换为图例条目,因此通常需要创建一个可转换的艺术家。 图例句柄不必存在于被用到的图像或轴域上。
......@@ -193,7 +193,7 @@ plt.legend([red_dot, (red_dot, white_cross)], ["Attr A", "Attr A+B"])
### 实现自定义图例处理器
可以实现自定义处理器,将任何句柄转换为图例的键(句柄不必要是`matplotlib`artist)。 处理器必须实现`legend_artist`方法,该方法为要使用的图例返回单个 artist。 有关`legend_artist`的详细信息,请参阅[`legend_artist()`](http://matplotlib.org/api/legend_api.html#matplotlib.legend_handler.HandlerBase.legend_artist)。
可以实现自定义处理器,将任何句柄转换为图例的键(句柄不必要是`matplotlib`artist)。 处理器必须实现`legend_artist`方法,该方法为要使用的图例返回单个艺术家。 有关`legend_artist`的详细信息,请参阅[`legend_artist()`](http://matplotlib.org/api/legend_api.html#matplotlib.legend_handler.HandlerBase.legend_artist)。
```py
import matplotlib.pyplot as plt
......
......@@ -6,11 +6,11 @@
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
Matplotlib 的`patheffects`模块提供了一些功能,用于将多个绘制层次应用到任何 Artist,并可以通过路径呈现。
Matplotlib 的`patheffects`模块提供了一些功能,用于将多个绘制层次应用到任何艺术家,并可以通过路径呈现。
可以对其应用路径效果的艺术家包括`Patch``Line2D``Collection`,甚至文本。 每个艺术家的路径效果都可以通过`set_path_effects`方法(`set_path_effects`)控制,它需要一个`AbstractPathEffect`的可迭代实例。
最简单的路径效果是普通效果,它简单地绘制 Artist,并没有任何效果:
最简单的路径效果是普通效果,它简单地绘制艺术家,并没有任何效果:
```py
import matplotlib.pyplot as plt
......@@ -28,7 +28,7 @@ plt.show()
## 添加阴影
比正常效果更有趣的路径效果是阴影,我们可以应用于任何基于路径的 Artist`SimplePatchShadow``SimpleLineShadow`类通过在基本艺术家下面绘制填充补丁或线条补丁来实现它:
比正常效果更有趣的路径效果是阴影,我们可以应用于任何基于路径的艺术家`SimplePatchShadow``SimpleLineShadow`类通过在基本艺术家下面绘制填充补丁或线条补丁来实现它:
```py
import matplotlib.pyplot as plt
......
......@@ -244,7 +244,7 @@ ax.add_artist(at)
`loc`关键字与`legend`命令中含义相同。
一个简单的应用是当艺术家(或艺术家的集合)的像素大小在创建时已知。 例如,如果要绘制一个固定大小为 20 像素 ×20 像素(半径为 10 像素)的圆,则可以使用`AnchoredDrawingArea`。 实例使用绘图区域的大小创建(以像素为单位)。 用户可以在绘图区任意添加 artist。 注意,添加到绘图区域的艺术家的范围与绘制区域本身的位置无关,只和初始大小有关。
一个简单的应用是当艺术家(或艺术家的集合)的像素大小在创建时已知。 例如,如果要绘制一个固定大小为 20 像素 ×20 像素(半径为 10 像素)的圆,则可以使用`AnchoredDrawingArea`。 实例使用绘图区域的大小创建(以像素为单位)。 用户可以在绘图区任意添加艺术家。 注意,添加到绘图区域的艺术家的范围与绘制区域本身的位置无关,只和初始大小有关。
```py
from mpl_toolkits.axes_grid.anchored_artists import AnchoredDrawingArea
......@@ -279,7 +279,7 @@ box.drawing_area.add_artist(el)
![](http://matplotlib.org/_images/anchored_box03.png)
如图例所示,可以设置`bbox_to_anchor`参数。 使用`HPacker``VPacker`,你可以像图例中一样排列 artist(事实上,这是图例的创建方式)。
如图例所示,可以设置`bbox_to_anchor`参数。 使用`HPacker``VPacker`,你可以像图例中一样排列艺术家(事实上,这是图例的创建方式)。
[源代码](http://matplotlib.org/users/plotting/examples/anchored_box04.py)
......@@ -329,7 +329,7 @@ matplotlib 中的标注支持[标注文本](http://matplotlib.org/users/annotati
![](http://matplotlib.org/_images/annotate_simple_coord01.png)
请注意,你的责任是在绘制`an2`之前确定坐标 artist(上例中的`an1`)的范围。 在大多数情况下,这意味着`an2`需要晚于`an1`。
请注意,你的责任是在绘制`an2`之前确定坐标艺术家(上例中的`an1`)的范围。 在大多数情况下,这意味着`an2`需要晚于`an1`。
3. 一个返回`BboxBase``Transform`的实例的可调用对象。 如果返回一个变换,它与 1 相同,如果返回`bbox`,它与 2 相同。可调用对象应该接受`renderer`实例的单个参数。 例如,以下两个命令产生相同的结果:
......
......@@ -399,7 +399,7 @@ def pick_handler(event):
`artist`
生成拾取事件的`Artist `
生成拾取事件的`Artist`
另外,像`Line2D``PatchCollection`的某些艺术家可以将附加的元数据(如索引)附加到满足选择器标准的数据中(例如,行中在指定 ε 容差内的所有点)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册