提交 bf508c27 编写于 作者: W wizardforcel

3.3

上级 a829478e
......@@ -6,7 +6,7 @@
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
`matplotlib.pyplot`是一个命令风格函数的集合,使`matplotlib`的机制更像 MATLAB。 每个绘图函数对图像进行一些更改:例如,创建图像,在图像中创建绘图区域,在绘图区域绘制一些线条,使用标签装饰绘图等。在`matplotlib.pyplot`中,各种状态跨函数调用保存,以便跟踪诸如当前图像和绘图区域之类的东西,并且绘图函数始终指向当前轴(请注意,这里和文档中的大多数位置中的『轴』是指图像的一部分,而不是多于一个轴的严格数学术语)。
`matplotlib.pyplot`是一个命令风格函数的集合,使`matplotlib`的机制更像 MATLAB。 每个绘图函数对图像进行一些更改:例如,创建图像,在图像中创建绘图区域,在绘图区域绘制一些线条,使用标签装饰绘图等。在`matplotlib.pyplot`中,各种状态跨函数调用保存,以便跟踪诸如当前图像和绘图区域之类的东西,并且绘图函数始终指向当前轴域(请注意,这里和文档中的大多数位置中的『轴域』(axes)是指图像的一部分(两条坐标轴围成的区域),而不是指代多于一个轴的严格数学术语)。
```py
import matplotlib.pyplot as plt
......@@ -36,7 +36,7 @@ plt.show()
![](http://matplotlib.org/_images/pyplot_formatstr.png)
有关线型和格式字符串的完整列表,请参见[`plot()`文档](http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.plot)。 上例中的`axis()`命令接收`[xmin,xmax,ymin,ymax]`的列表,并指定轴的可视区域。
有关线型和格式字符串的完整列表,请参见[`plot()`文档](http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.plot)。 上例中的`axis()`命令接收`[xmin,xmax,ymin,ymax]`的列表,并指定轴的可视区域。
如果`matplotlib`仅限于使用列表,它对于数字处理是相当无用的。 一般来说,你可以使用`numpy`数组。 事实上,所有序列都在内部转换为`numpy`数组。 下面的示例展示了使用数组和不同格式字符串,在一条命令中绘制多个线条。
......@@ -131,9 +131,9 @@ In [70]: plt.setp(lines)
...snip
```
## 处理多个图像和轴
## 处理多个图像和轴
MATLAB 和 pyplot 具有当前图像和当前轴的概念。 所有绘图命令适用于当前轴。 函数`gca()`返回当前轴(一个`matplotlib.axes.Axes`实例),`gcf()`返回当前图像(`matplotlib.figure.Figure`实例)。 通常,你不必担心这一点,因为它都是在幕后处理。 下面是一个创建两个子图的脚本。
MATLAB 和 pyplot 具有当前图像和当前轴域的概念。 所有绘图命令适用于当前轴域。 函数`gca()`返回当前轴域(一个`matplotlib.axes.Axes`实例),`gcf()`返回当前图像(`matplotlib.figure.Figure`实例)。 通常,你不必担心这一点,因为它都是在幕后处理。 下面是一个创建两个子图的脚本。
```py
import numpy as np
......@@ -156,7 +156,7 @@ plt.show()
![](http://matplotlib.org/_images/pyplot_two_subplots.png)
这里的`figure()`命令是可选的,因为默认情况下将创建`figure(1)`,如果不手动指定任何轴,则默认创建`subplot(111)``subplot()`命令指定`numrows``numcols``fignum`,其中`fignum`的范围是从`1``numrows * numcols`。 如果`numrows * numcols <10`,则`subplot`命令中的逗号是可选的。 因此,子图`subplot(211)``subplot(2, 1, 1)`相同。 你可以创建任意数量的子图和轴。 如果要手动放置轴,即不在矩形网格上,请使用`axes()`命令,该命令允许你将`axes([left, bottom, width, height])`指定为位置,其中所有值都使用小数(0 到 1)坐标。 手动放置轴的示例请参见[`pylab_examples`示例代码:`axes_demo.py`](http://matplotlib.org/examples/pylab_examples/axes_demo.html#pylab-examples-axes-demo),具有大量子图的示例请参见[`pylab_examples`示例代码:`subplots_demo.py`](http://matplotlib.org/examples/pylab_examples/subplots_demo.html#pylab-examples-subplots-demo)
这里的`figure()`命令是可选的,因为默认情况下将创建`figure(1)`,如果不手动指定任何轴域,则默认创建`subplot(111)``subplot()`命令指定`numrows``numcols``fignum`,其中`fignum`的范围是从`1``numrows * numcols`。 如果`numrows * numcols <10`,则`subplot`命令中的逗号是可选的。 因此,子图`subplot(211)``subplot(2, 1, 1)`相同。 你可以创建任意数量的子图和轴域。 如果要手动放置轴域,即不在矩形网格上,请使用`axes()`命令,该命令允许你将`axes([left, bottom, width, height])`指定为位置,其中所有值都使用小数(0 到 1)坐标。 手动放置轴域的示例请参见[`pylab_examples`示例代码:`axes_demo.py`](http://matplotlib.org/examples/pylab_examples/axes_demo.html#pylab-examples-axes-demo),具有大量子图的示例请参见[`pylab_examples`示例代码:`subplots_demo.py`](http://matplotlib.org/examples/pylab_examples/subplots_demo.html#pylab-examples-subplots-demo)
你可以通过使用递增图像编号多次调用`figure()`来创建多个图像。 当然,每个数字可以包含所需的轴和子图数量:
......@@ -177,7 +177,7 @@ plt.subplot(211) # 将第一个图像的 subplot(211) 设为当前
plt.title('Easy as 1, 2, 3') # 子图 211 的标题
```
你可以使用`clf()`清除当前图像,使用`cla()`清除当前轴。 如果你搞不清在幕后维护的状态(特别是当前的图像和轴),不要绝望:这只是一个面向对象的 API 的简单的状态包装器,你可以使用面向对象 API(见[艺术家教程](http://matplotlib.org/users/artists.html#artist-tutorial))。
你可以使用`clf()`清除当前图像,使用`cla()`清除当前轴域。 如果你搞不清在幕后维护的状态(特别是当前的图像和轴域),不要绝望:这只是一个面向对象的 API 的简单的状态包装器,你可以使用面向对象 API(见[艺术家教程](http://matplotlib.org/users/artists.html#artist-tutorial))。
如果你正在制作大量的图像,你需要注意一件事:在一个图像用`close()`显式关闭之前,该图所需的内存不会完全释放。 删除对图像的所有引用,和/或使用窗口管理器杀死屏幕上出现的图像的窗口是不够的,因为在调用`close()`之前,`pyplot`会维护内部引用。
......@@ -228,12 +228,12 @@ plt.title(r'$\sigma_i=15$')
## 标注文本
上面的`text()`基本命令将文本放置在轴的任意位置。 文本的一个常见用法是对图的某些特征执行标注,而`annotate()`方法提供一些辅助功能,使标注变得容易。 在标注中,有两个要考虑的点:由参数`xy`表示的标注位置和`xytext`表示的文本位置。 这两个参数都是`(x, y)`元组。
上面的`text()`基本命令将文本放置在轴的任意位置。 文本的一个常见用法是对图的某些特征执行标注,而`annotate()`方法提供一些辅助功能,使标注变得容易。 在标注中,有两个要考虑的点:由参数`xy`表示的标注位置和`xytext`表示的文本位置。 这两个参数都是`(x, y)`元组。
![](http://matplotlib.org/_images/pyplot_annotate.png)
在此基本示例中,`xy`(箭头提示)和`xytext`(文本)都位于数据坐标中。 有多种其他坐标系可供选择 - 详细信息请参阅[标注文本](http://matplotlib.org/users/annotations_intro.html#annotations-tutorial)[标注轴](http://matplotlib.org/users/annotations_guide.html#plotting-guide-annotation)。 更多示例可以在[`pylab_examples`示例代码:`annotation_demo.py`](http://matplotlib.org/examples/pylab_examples/annotation_demo.html#pylab-examples-annotation-demo)中找到。
在此基本示例中,`xy`(箭头提示)和`xytext`(文本)都位于数据坐标中。 有多种其他坐标系可供选择 - 详细信息请参阅[标注文本](http://matplotlib.org/users/annotations_intro.html#annotations-tutorial)[标注轴](http://matplotlib.org/users/annotations_guide.html#plotting-guide-annotation)。 更多示例可以在[`pylab_examples`示例代码:`annotation_demo.py`](http://matplotlib.org/examples/pylab_examples/annotation_demo.html#pylab-examples-annotation-demo)中找到。
## 对数和其它非线性轴
......@@ -255,7 +255,7 @@ y = y[(y > 0) & (y < 1)]
y.sort()
x = np.arange(len(y))
# 带有多个轴刻度的 plot
# 带有多个轴刻度的 plot
plt.figure(1)
# 线性
......
# 3.3 交互式导航
> 原文:[Interactive navigation](http://matplotlib.org/users/navigation_toolbar.html)
> 译者:[飞龙](https://github.com/)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
![](http://matplotlib.org/_images/toolbar.png)
所有图像窗口都带有导航工具栏,可用于浏览数据集。 以下是工具栏底部的每个按钮的说明:
![](http://matplotlib.org/_images/back.png)
`Home`(首页)、`Forward`(前进)和`Back`(后退)按钮:
这些类似于 Web 浏览器的前进和后退按钮。 它们用于在之前定义的视图之间来回浏览。 它们没有意义,除非你已经使用平移和缩放按钮访问了其他地方。 这类似于尝试在访问新页面之前单击 Web 浏览器上的返回 - 什么都不会发生。 首页总是你第一个浏览的页面,以及你的数据的默认视图。 对于`Home``Forward``Back`,应该将其看做 Web浏览器,其中的数据视图是网页。 使用`Pan``Zoom`来定义新视图。
![](http://matplotlib.org/_images/move.png)
`Pan/Zoom`(平移/缩放)按钮
此按钮有两种模式:平移和缩放。 单击工具栏按钮激活平移和缩放,然后将鼠标放在轴域的某个地方。 按住鼠标左键并将其拖动到新位置来平移图形。 当你释放它时,你按下的点处的数据将移动到你释放的点。 如果在平移时按`'x'``'y'`,移动会分别限制在`x``y`轴。 按鼠标右键并将其拖动到新位置来进行缩放。 向右移动使`x`轴成比例放大,或者向左移动成比例缩小。 `y`轴和上/下移动同上。 开始缩放时鼠标下的点会保持静止,你可以缩放图像中的其它任意点。 你可以使用快捷键`'x'``'y'``CONTROL`分别将缩放约束为`x`轴,`y`轴或保留宽高比。
使用极坐标绘图时,平移和缩放功能的行为不同。 可以使用鼠标左键拖动半径轴标签。 可以使用鼠标右键放大和缩小半径刻度。
![](http://matplotlib.org/_images/zoom_to_rect.png)
`Zoom-to-rectangle`(缩放到矩形)按钮
单击此工具栏按钮以激活此模式。 将鼠标放在轴域的某处,然后按鼠标左键。 在按住按钮的同时拖动鼠标到新位置并释放。 轴域会放大并限制于你定义的矩形。 在此模式中还有一个实验性的`zoom out to rectangle`(缩小到矩形),使用右键,将整个轴域缩小并放置在矩形定义的区域中。
![](http://matplotlib.org/_images/subplots.png)
`Subplot-configuration`(子图配置)按钮
使用此工具配置子图的参数:左边距,右边距,上边距,下边距,行间隔和列间隔。
![](http://matplotlib.org/_images/filesave.png)
`Save`(保存)按钮
单击此按钮可启动文件保存对话框。 你可以使用以下扩展名保存文件:`png``ps``eps``svg``pdf`
## 浏览快捷键
下表包含所有默认的快捷键,可以使用`matplotlibrc``#keymap.*`)覆盖。
| 命令 | 快捷键 |
| --- | --- |
| 主页/重置 | `h``r``home` |
| 后退 | `c`、左箭头或`backspace` |
| 前进 | `v`或右箭头 |
| 平移/缩放 | `p` |
| 缩放到矩形 | `o` |
| 保存 | `ctrl + s` |
| 切换全屏 | `ctrl + f` |
| 关闭绘图 | `ctrl + w` |
| 将平移/缩放限制于`x`轴 | 使用鼠标平移/缩放时按住`x` |
| 将平移/缩放限制于`y`轴 | 使用鼠标平移/缩放时按住`y` |
| 保留宽高比 | 使用鼠标平移/缩放时按住`CONTROL` |
| 切换网格 | 鼠标在轴域上时按下`g` |
| 切换`x`轴刻度(对数/线性) | 鼠标在轴域上时按下`L``k` |
| 切换`y`轴刻度(对数/线性) | 鼠标在轴域上时按下`l` |
如果你使用`matplotlib.pyplot`,则会为每个图形自动创建工具栏。 如果你正在编写自己的用户界面代码,则可以将工具栏添加为窗口小部件。 确切的语法取决于你的 UI,但在`matplotlib/examples/user_interfaces目录中有每个受支持的 UI 的示例。 这里是一些 GTK 的示例代码:
```py
import gtk
from matplotlib.figure import Figure
from matplotlib.backends.backend_gtkagg import FigureCanvasGTKAgg as FigureCanvas
from matplotlib.backends.backend_gtkagg import NavigationToolbar2GTKAgg as NavigationToolbar
win = gtk.Window()
win.connect("destroy", lambda x: gtk.main_quit())
win.set_default_size(400,300)
win.set_title("Embedding in GTK")
vbox = gtk.VBox()
win.add(vbox)
fig = Figure(figsize=(5,4), dpi=100)
ax = fig.add_subplot(111)
ax.plot([1,2,3])
canvas = FigureCanvas(fig) # a gtk.DrawingArea
vbox.pack_start(canvas)
toolbar = NavigationToolbar(canvas, win)
vbox.pack_start(toolbar, False, False)
win.show_all()
gtk.main()
```
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册