提交 90847b69 编写于 作者: W wizardforcel

2020-08-01 00:08:48

上级 590ca9c7
......@@ -8,19 +8,19 @@ Matplotlib 在使用 Python 生态系统的机器学习从业人员和研究人
尽管基于秘籍的秘籍方法使本书成为快速解决方案的参考指南,但我们已经涵盖了足够的理论背景,对于初学者来说也很容易。
# 这本书是给谁的
## 这本书是给谁的
本书适用于数据分析师,业务分析师,数据科学家和 Python 开发人员,他们正在为各种可视化应用寻求快速解决方案,例如临时报告,专业仪表板,探索性数据分析,交互分析,选定中的嵌入式可视化文件 GUI 工具箱和 Web 应用,三维图和地理地图。
那些对开发商业智能,机器学习,科学或工程应用感兴趣的人也会从与这些学科相关的秘籍中受益。
# 充分利用这本书
## 充分利用这本书
除了第 9 章,“开发交互式绘图”和第 10 章,“嵌入图形用户界面”外,Python 的基本知识足以理解本书的内容。 。 这两章介绍需要中级 Python 编程经验的交互式绘图和嵌入式应用。
许多 Python 发行版自动包含 Matplotlib 及其所有依赖项。 如果尚未安装任何标准的 Python 发行版,则可以在[这个页面](https://matplotlib.org/users/installing.html)上按照的安装过程来安装 Matplotlib 及其相关的依赖项。
# 使用约定
## 使用约定
本书中使用了许多文本约定。
......@@ -39,29 +39,29 @@ from matplotlib import cm
Warnings or important notes appear like this.Tips and tricks appear like this.
# 标题
## 标题
在本书中,您会发现几个经常出现的标题(“准备”,“操作步骤”,“工作原理”,和“另见”)。
要给出有关如何完成秘籍的明确说明,请按以下说明使用这些部分:
# 准备
## 准备
本节告诉您在秘籍中会有什么期望,并介绍如何设置秘籍所需的任何软件或任何初步设置。
# 操作步骤
## 操作步骤
本节包含遵循秘籍所需的步骤。
# 工作原理
## 工作原理
本节通常包括对上一节中发生的情况的详细说明。
# 更多
## 更多
本节包含有关秘籍的其他信息,以使您对秘籍有更多的了解。
# 另见
## 另见
本节提供了指向该秘籍其他有用信息的有用链接。
......@@ -7,77 +7,77 @@
* 从外部文件读取并绘图
* 如何更改和重置默认环境变量
# 介绍
## 介绍
Matplotlib 是一个跨平台的 Python 库,用于绘制二维图形(也称为**图**)。 它可以在各种用户界面中使用,例如 Python 脚本,IPython Shell,Jupyter 笔记本,Web 应用和 GUI 工具包。 它可以用于开发专业的报表应用,交互式分析应用,复杂的仪表板应用或嵌入到 Web/GUI 应用中。 它还支持将图形保存为各种硬拷贝格式。 它还对三维图形的支持有限。 它还支持许多第三方工具包以扩展其功能。
请注意,本书中的所有示例均已通过 Matplotlib 3.0 和 Jupyter Notebook 5.1.0 进行了测试。
# Matplotlib 的架构
## Matplotlib 的架构
Matplotlib 具有三层架构:**后端****艺术家****脚本**,它们在逻辑上组织为栈。 脚本是开发人员用来创建图形的 API。 美工完成了内部创建图形的实际工作。 后端是显示图形的位置。
# 后端层
## 后端层
这是图形显示在输出设备上的最底层。 这可以是 Matplotlib 支持的任何用户界面。 后端有两种类型:**用户界面后端**(用于`pygtk``wxpython``tkinter``qt4``macosx`等,也称为**交互式后端**)和**硬拷贝**后端,以制作图像文件(`.png``.svg``.pdf``.ps`,也称为**非交互式后端**)。 我们将在稍后的第 9 章,“开发交互式绘图”和第 10 章,“将图形嵌入图形用户界面”中学习如何配置这些后端。
# 艺术家层
## 艺术家层
这是栈的中间层。 Matplotlib 使用`artist`对象绘制图形的各种元素。 因此,我们在图形中看到的每个元素(请参见图中的元素)都是一个艺术家。 该层提供了**面向对象的 API** ,以最大的灵活性来绘制图形。 该接口适用于经验丰富的 Python 程序员,他们可以创建复杂的仪表板应用。
# 脚本层
## 脚本层
这是栈的最顶层。 该层提供了用于创建图形的简单接口。 这供没有太多编程专业知识的最终用户使用。 这称为`pyplot` API。
# 图元素
## 图元素
包含输出图的所有元素的高级 Matplotlib 对象称为`figure`。 可以以不同方式排列多个图形以形成图形。 图的每个元素都是可自定义的。
# 图形
## 图形
下图是`figure`的剖析图,其中包含其所有元素:
![](img/adf3f22d-db1c-4cc5-b8c7-43d39ce56e6a.png)Anatomy of a figure (Source : http://diagramss.us/plotting-a-graph-in-matlab.html)
# 轴域
## 轴域
`axes`是该图的子部分,其中绘制了图形。`axes`具有**标题****x 标签****y 标签**`figure`可以具有许多这样的`axes`,每个`figure`代表一个或多个图形。 在上图中,只有一个`axes`,两个是蓝色和红色的折线图。
# 轴
##
这些是数字线,代表要绘制的图形的比例。 二维图具有 *x* 轴和 *y* 轴,而三维图具有 *x* 轴, *y* 轴 ,以及 *z* 轴。
Don't get confused between axes and axis. Axis is an element of axes. Grammatically, axes is also the plural for axis, so interpret the meaning of axes depending on the context, whether multiple axis elements are being referred to or an axes object is being referred to.
# 标签
## 标签
这是图中各个元素的名称,例如 *x* 轴标签, *y* 轴标签,图形标签(上图中的蓝色信号/红色信号*图形剖析*等等。
# 图例
## 图例
`axes`中有多个图形时(如上图,*图形剖析图*),每个图形都有其自己的标签,所有这些标签均表示为图例。 在上图中,图例位于图的右上角。
# 标题
## 标题
它是每个`axes`的名称。 当图形具有多个带有各自标题的轴域时,`figure`也可以具有自己的标题。 上图只有一个轴域,因此轴域和该图都只有一个标题。
# 刻度标签
## 刻度标签
每个轴(*x**y**z*)都有一个范围的值,该值分为许多相等的桶。 桶分为两个级别。 在上一个图(剖析图), *x* 轴刻度范围从 0 到 4,分为四个主要区域(0-1、1-2、2-3 和 3-4),每个主要桶又分为四个次要桶(0-0.25、0.25-0.5 和 0.5-0.75)。 主桶两侧的刻度称为**主刻度**,次桶称为**次刻度**,它们的名称为**主刻度标签****次刻度标签**
# 轴线
## 轴线
该图的边界称为**轴线**。 每个轴域有四个轴线(上,下,左和右)。
# 网格
## 网格
为了更容易读取图形上各个点的坐标,将图形区域划分为网格。 通常,此网格沿着 *x**y* 轴的主要刻度线绘制。 在上图中,以虚线显示了网格。
# 在交互模式下工作
## 在交互模式下工作
Matplotlib 可以在**交互式****非交互式**模式下使用。 在交互模式下,每条语句后图形显示都会更新。 在非交互模式下,只有明确要求这样做,图形才会显示。
# 准备
## 准备
您需要 Python,NumPy 和 Matplotlib 包的有效安装。
......@@ -87,7 +87,7 @@ Matplotlib 可以在**交互式**或**非交互式**模式下使用。 在交互
* `matplotlib.pyplot.ioff()`切换`OFF`交互模式
* `matplotlib.is_interactive()`检查交互模式是`ON``True`)还是`OFF``False`
# 操作步骤
## 操作步骤
让我们看看在交互模式下工作有多么简单:
......@@ -129,7 +129,7 @@ plt.plot([1.5, 3.0])
7. 现在,借助以下代码,将轴标签和标题添加到图形中:
```py
# Add labels and title
## Add labels and title
plt.title("Interactive Plot") #Prints the title on top of graph
plt.xlabel("X-axis") # Prints X axis label as "X-axis"
plt.ylabel("Y-axis") # Prints Y axis label as "Y-axis"
......@@ -139,7 +139,7 @@ plt.ylabel("Y-axis") # Prints Y axis label as "Y-axis"
![](img/94d8d70a-cdaf-481e-bdce-b614c54b7de5.png)
# 工作原理
## 工作原理
因此,这就是解释的方式:
......@@ -161,7 +161,7 @@ plt.ylabel("Y-axis") # Prints Y axis label as "Y-axis"
In older versions of Matplotlib or certain backends (such as `macosx`), the graph may not be updated immediately. In such cases, you need to call `plt.draw()` explicitly at the end, so that the graph gets displayed.
# 更多
## 更多
您可以在同一图上再添加一个折线图,然后继续进行直到完成交互式会话:
......@@ -191,11 +191,11 @@ plt.plot([3.5, 2.5])
因此,我们现在在交互模式下工作。
# 在非交互模式下工作
## 在非交互模式下工作
在交互模式下,我们看到了随着每条指令逐步构建的图形。 在非交互模式下,您将提供所有说明来构建图形,然后使用命令显式显示图形。
# 操作步骤
## 操作步骤
在非交互模式下工作也不困难:
......@@ -222,10 +222,10 @@ matplotlib.is_interactive()
5. 执行以下代码; 您不会在屏幕上看到该图:
```py
# Plot a line graph
## Plot a line graph
plt.plot([1.5, 3.0])
# Plot the title, X and Y axis labels
## Plot the title, X and Y axis labels
plt.title("Non Interactive Mode")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
......@@ -234,11 +234,11 @@ plt.ylabel("Y-axis")
6. 执行以下语句,然后您将在屏幕上看到该图:
```py
# Display the graph on the screen
## Display the graph on the screen
plt.show()
```
# 工作原理
## 工作原理
前面的每个代码语句都是不言自明的。 要注意的重要事项是在非交互模式下,为要显示的图形编写完整的代码,然后显式调用`plt.show()`以在屏幕上显示图形。
......@@ -246,13 +246,13 @@ plt.show()
![](img/d402e05e-7f6a-4ede-8d2a-af1d38568344.png) The latest versions of Jupyter Notebook seem to display the figure without calling `plt.show()` command explicitly. However, in Python shell or embedded applications, `plt.show()` or `plt.draw()` is required to display the figure on the screen.
# 从外部文件读取并绘图
## 从外部文件读取并绘图
默认情况下,Matplotlib 接受输入数据作为 Python 列表,NumPy 数组或 pandas 数据帧。 因此,需要先读取所有外部数据并将其转换为这些格式之一,然后再将其提供给 Matplotlib 进行图形绘制。 从性能的角度来看,NumPy 格式更有效,但对于默认标签,pandas 格式比较方便。
如果数据是`.txt`文件,则可以使用 NumPy 函数读取数据并将其放入 NumPy 数组中。 如果数据为`.csv``.xlsx`格式,则可以使用 Pandas 读取数据。 在这里,我们将演示如何读取`.txt``.csv``.xlsx`格式,然后绘制图表。
# 准备
## 准备
导入读取输入文件所需的`matplotlib.pyplot``numpy``pandas`包:
......@@ -274,11 +274,11 @@ import numpy as np
import pandas as pd
```
# 操作步骤
## 操作步骤
我们将在三个单独的部分中遵循`.txt``.csv``.xlsx`文件的顺序。
# 从`.txt`文件读取
## 从`.txt`文件读取
以下是一些步骤:
......@@ -333,7 +333,7 @@ print(x, y)
[ 1\. 2\. 3\. 4\. 5.] [ 1\. 4\. 9\. 16\. 25.]
```
# 从`.csv`文件读取
## 从`.csv`文件读取
`.csv`文件具有行和列的关系数据库结构,`test.csv`文件在 2D 空间中具有五个点的 *x**y* 坐标。 每个点是文件中的一行,分为两列:`x``y`。 相同的 NumPy `loadtxt()`函数用于加载数据:
......@@ -349,7 +349,7 @@ print(y)
[ 1\. 2\. 3\. 4\. 5.] [ 1\. 4\. 9\. 16\. 25.]
```
# 从`.xlsx`文件读取
## 从`.xlsx`文件读取
现在,让我们从`.xlsx`文件中读取相同的数据,并创建`x``y` NumPy 数组。 NumPy `loadtxt()`函数不支持`.xlsx`文件格式。 可以使用 Python 数据处理包`pandas`
......@@ -385,7 +385,7 @@ print(x,y)
[1 2 3 4 5] [ 1 4 9 16 25]
```
# 绘制图形
## 绘制图形
从三种格式(`.txt``.csv``.xlsx`)中的任何一种读取数据并将其格式化为`x``y`变量后,我们使用以下变量绘制图形:
......@@ -403,11 +403,11 @@ plt.show()
![](img/d20f457f-5e46-4199-90ec-9f1679b5ac4a.png)
# 工作原理
## 工作原理
根据数据的格式和结构,我们将不得不使用 Python,NumPy 或 pandas 函数来读取数据并将其重新格式化为可以馈入`matplotlib.pyplot`函数的适当结构。 之后,按照通常的绘制说明绘制所需的图形。
# 更改和重置默认环境变量
## 更改和重置默认环境变量
Matplotlib 使用`matplotlibrc`文件存储跨 matplotlib 功能使用的各种环境和图形参数的默认值。 注意,该文件很长。 这些默认值可自定义以应用于会话中的所有绘图。
......@@ -417,12 +417,12 @@ Matplotlib 使用`matplotlibrc`文件存储跨 matplotlib 功能使用的各种
Matplotlib 在内部使用`matplotlib.rcsetup()`命令来验证所更改的参数是可接受的值。
# 准备
## 准备
以下代码块提供了包含所有配置参数的文件路径:
```py
# Get the location of matplotlibrc file
## Get the location of matplotlibrc file
import matplotlib
matplotlib.matplotlib_fname()
```
......@@ -434,7 +434,7 @@ matplotlib.matplotlib_fname()
data\\matplotlibrc'
```
# 操作步骤
## 操作步骤
以下代码块以及注释可帮助您了解更改和重置默认环境变量的过程:
......@@ -480,18 +480,18 @@ plt.show()
![](img/96176f15-ffff-447f-b7df-50e45d3624c3.png)
# 工作原理
## 工作原理
`matplotlib.rc``matplotlib.rcParams`命令覆盖指定参数的默认值作为这些命令中的参数。 在绘制图形时,`pyplot`工具将使用这些新值。
It should be noted that these values will be active for all plots in the session. If you want different settings for each plot in the same session, then you should use the attributes available with the `plot` command.
# 更多
## 更多
您可以使用`rsdefaults()`命令将所有参数重置为其默认值,如下框所示:
```py
# To restore all default parameters
## To restore all default parameters
matplotlib.rcdefaults()
plt.plot(x,y)
plt.show()
......
......@@ -14,7 +14,7 @@
* 在 3D 中可视化 2D 中的线性不可分离数据
* 绘制单词嵌入
# 介绍
## 介绍
Matplotlib 的早期版本仅限于 2D 绘图,后来又将 3D 功能添加为附加工具箱:`mplot3d`。 尽管它具有有限的 3D 功能,但它涵盖了 3D 绘图的大多数常见业务需求。
......@@ -22,13 +22,13 @@ Matplotlib 的早期版本仅限于 2D 绘图,后来又将 3D 功能添加为
如果您正在使用任何交互式后端,还可以通过将图形拖向所需的任何方向来旋转 3D 图片以获取不同的视图。 您还可以通过在帧之间稍稍停顿的情况下旋转图形来创建动画。 我们将学习如何在某些图中使用这些功能,尽管它们可以应用于所有图中。
# 线形图
## 线形图
在本秘籍中,我们将学习如何创建 3D 线形图。 它类似于 2D 等效折线图,并且 2D 折线图的和属性中的许多属性都将结转到 3D。
我们将在相同的轴域上绘制凹凸曲线,并从不同角度查看它们,例如平行视图,俯视图以及绕, *z* 轴旋转。
# 准备
## 准备
导入所需的库:
......@@ -38,7 +38,7 @@ import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
```
# 操作步骤
## 操作步骤
以下是绘制 3D 折线图的步骤:
......@@ -115,7 +115,7 @@ plt.tight_layout(w_pad=5)
plt.show()
```
# 工作原理
## 工作原理
这是前面的代码块的说明:
......@@ -139,13 +139,13 @@ plt.show()
![](img/30117aee-8fdf-4944-b6ee-1ec7a0cefba3.png)
# 散点图
## 散点图
在本秘籍中,我们将学习如何在 3D 中绘制散点图。 在此示例中,我们将使用`Iris`数据集,该数据集具有三个不同的群集。 在前面的章节中,我们已经多次在 2D 中看到它,所以让我们看看它在 3D 中的外观。
我们还将学习如何使用在前面的秘籍中学习的`init_view`方法创建动画 3D 绘图。 为此,我们需要使用任何后端,因为动画无法与嵌入式显示器`%matplotlib inline`一起使用。
# 准备
## 准备
设置所需的后端:
......@@ -163,7 +163,7 @@ import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
```
# 操作步骤
## 操作步骤
以下是实现逻辑的步骤:
......@@ -214,7 +214,7 @@ for angle in range(0, 360):
plt.show();
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -229,11 +229,11 @@ plt.show();
![](img/8470a897-30ab-4aeb-82f9-8cd74d2b0587.png)
# 条形图
## 条形图
在本秘籍中,我们将学习如何在 3D 模式下绘制条形图。 我们将使用电池销售数据,该数据已在第 2 章和“基本绘图”入门中用于表格绘制。 在这里,我们只会在条形图下方绘制条形图,而不是表格图。
# 准备
## 准备
导入所需的库:
......@@ -243,7 +243,7 @@ import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
```
# 操作步骤
## 操作步骤
以下是实现逻辑的步骤:
......@@ -257,26 +257,26 @@ ax = fig.add_subplot(111, projection='3d')
2. 准备 *x**y**z* 轴的数据:
```py
# Years for which we have battery sales data
## Years for which we have battery sales data
x = [2011, 2012, 2013, 2014, 2015]
# Repeat X, 5 times to represent each of the 5 battery ratings
## Repeat X, 5 times to represent each of the 5 battery ratings
X = x * 5
# List of Battery ratings
## List of Battery ratings
battery_ratings = ['7Ah', '35Ah', '40Ah', '135Ah', '150Ah']
# Number of units sold each year, each rating. e.g. 75 units of 7Ah(0) batteries, 144 units of 35Ah(1) #batteries sold in 2011
## Number of units sold each year, each rating. e.g. 75 units of 7Ah(0) batteries, 144 units of 35Ah(1) #batteries sold in 2011
Y = np.array([[75, 144, 114, 102, 108],
[90, 126, 102, 84, 126],
[96, 114, 75, 105, 135],
[105, 90, 175, 90, 75],
[90, 75, 135, 75, 90]])
# Represent battery rating in numeric codes
## Represent battery rating in numeric codes
yticks = [0, 1, 2, 3, 4]
# Use different color for each of the battery ratings
## Use different color for each of the battery ratings
colors = ['r', 'g', 'b', 'y', 'm']
```
......@@ -307,7 +307,7 @@ ax.set_zlabel('Units Sold')
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -328,11 +328,11 @@ plt.show()
![](img/35539aab-2e37-4184-826a-b80957d56aec.png)
# 多边形图
## 多边形图
在本秘籍中,我们将学习如何绘制多边形图。 它类似于折线图,但在折线下填充。 在此示例中,我们还将使用相同的电池销售数据。
# 准备
## 准备
导入所需的库:
......@@ -344,7 +344,7 @@ from matplotlib.collections import PolyCollection
from matplotlib.ticker import MultipleLocator
```
# 操作步骤
## 操作步骤
以下是编码逻辑的步骤:
......@@ -358,27 +358,27 @@ ax = fig.add_subplot(111, projection='3d')
2. 准备 *x**y**z* 轴的数据:
```py
# Years for which we have battery sales data
## Years for which we have battery sales data
x = [2011, 2012, 2013, 2014, 2015]
# Repeat X, 5 times to represent each of the 5 battery ratings
## Repeat X, 5 times to represent each of the 5 battery ratings
X = x * 5
# List of Battery ratings
## List of Battery ratings
battery_ratings = ['7Ah', '35Ah', '40Ah', '135Ah', '150Ah']
# Number of units sold each year, each rating. e.g. 75 units of 7Ah(0) batteries,
# 144 units of 35Ah(1) batteries sold in 2011
## Number of units sold each year, each rating. e.g. 75 units of 7Ah(0) batteries,
## 144 units of 35Ah(1) batteries sold in 2011
Y = np.array([[75, 144, 114, 102, 108],
[90, 126, 102, 84, 126],
[96, 114, 75, 105, 135],
[105, 90, 175, 90, 75],
[90, 75, 135, 75, 90]])
# Represent battery rating in numeric codes
## Represent battery rating in numeric codes
yticks = [0, 1, 2, 3, 4]
# Use different color for each of the battery ratings
## Use different color for each of the battery ratings
colors = ['r', 'g', 'b', 'y', 'm']
```
......@@ -428,7 +428,7 @@ ax.set_zlabel('Units Sold')
plt.show()
```
# 工作原理
## 工作原理
这是代码的说明:
......@@ -448,15 +448,15 @@ plt.show()
![](img/21eea23c-0c3e-4f95-a1cb-0759924d28fc.png)
# 更多
## 更多
对于前面的示例,我们使用了`PolyCollection`。 Matplotlib 中还有两个其他选项,`LineCollection``PatchCollection`
# 等高线图
## 等高线图
我们在第 2 章和“基本绘图入门”中学习了如何绘制 2D 等高线图。 在这里,我们将学习如何在 3D 模式下绘制它。 我们将使用与之前相同的数据,以便我们可以看到 2D 和 3D 可视化之间的差异。
# 准备
## 准备
导入所需的库:
......@@ -467,7 +467,7 @@ import pandas as pd
from matplotlib import cm
```
# 操作步骤
## 操作步骤
以下是创建所需图的步骤:
......@@ -481,7 +481,7 @@ ax = fig.gca(projection='3d')
2. 加载`Loss``theta1``theta2`变量的数据:
```py
# Read Loss, theta0 and theta1 values
## Read Loss, theta0 and theta1 values
Loss = pd.read_excel('Loss.xlsx')
theta0_vals = pd.read_excel('theta0.xlsx')
theta1_vals = pd.read_excel('theta1.xlsx')
......@@ -496,7 +496,7 @@ X, Y = np.meshgrid(theta0_vals, theta1_vals)
4. 绘制`contour`图:
```py
# Plot contour curves
## Plot contour curves
cset = ax.contour(X, Y, Loss, np.logspace(-2,3,100), cmap=cm.coolwarm)
```
......@@ -520,7 +520,7 @@ ax.set_zlabel('Loss')
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -539,15 +539,15 @@ plt.show()
![](img/17172a3d-cb55-4c1c-ad7a-3e3f46563911.png)
# 更多
## 更多
填充轮廓图还有另一种选择,其中整个轮廓填充有和指定的颜色。 您只需要在`plot`语句中用`contourf`替换轮廓。
# 曲面图
## 曲面图
在本秘籍中,我们将学习如何绘制曲面图。 通常用于在机器学习问题中可视化损失(误差)表面。 当误差面具有**多个最小值**时,有助于查看算法是否卡在任何**局部最小值**中。 我们将使用与,之前的轮廓图相同的数据。
# 准备
## 准备
导入所需的库:
......@@ -558,7 +558,7 @@ import pandas as pd
import numpy as np
```
# 操作步骤
## 操作步骤
以下是绘制曲面图的步骤:
......@@ -572,7 +572,7 @@ ax = fig.gca(projection='3d')
2. 读取曲面图的数据:
```py
# Read Loss, theta0 and theta1 values
## Read Loss, theta0 and theta1 values
Loss = pd.read_excel('Loss.xlsx')
theta0_vals = pd.read_excel('theta0.xlsx')
theta1_vals = pd.read_excel('theta1.xlsx')
......@@ -587,7 +587,7 @@ X, Y = np.meshgrid(theta0_vals, theta1_vals)
4. 绘制曲面图:
```py
# Plot surface graph
## Plot surface graph
surf = ax.plot_surface(X, Y, Loss, cmap='plasma')
```
......@@ -611,7 +611,7 @@ ax.set_zlabel('Loss')
plt.show()
```
# 工作原理
## 工作原理
除了*步骤 4*,其中所有步骤均与之前的轮廓图完全相同,在该步骤中,我们将`ax.contour()`替换为`ax.plot_surface()`。 我们还用`plasma`颜色表替换了`coolwarm`颜色表。 其他所有内容都与等高线图相同。
......@@ -619,11 +619,11 @@ plt.show()
![](img/79c55b33-e1d3-4438-b4be-15b459ecdffc.png)
# 线框图
## 线框图
在本秘籍中,我们将学习如何绘制线框图。 它类似于曲面图,其中和选项在每个方向上采样多个点以连接到曲面。 在这里,我们将实现一个动画的线框图。
# 准备
## 准备
将交互式输出的设置为所需的后端:
......@@ -640,7 +640,7 @@ import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
```
# 操作步骤
## 操作步骤
以下是绘制线框图所涉及的步骤:
......@@ -691,7 +691,7 @@ for phi in np.linspace(0, 90, 100):
plt.show()
```
# 工作原理
## 工作原理
这是代码的说明:
......@@ -711,11 +711,11 @@ plt.show()
![](img/dc23fd4d-108a-4e7b-9417-1e2188bf944a.png)
# 三角曲面图
## 三角曲面图
在本秘籍中,我们将学习如何绘制三角形曲面图。 它类似于曲面图,但是曲面将具有三角形连接。 我们将使用不同的数据绘制三个这样的图,并显示轴和不显示轴。
# 准备
## 准备
导入所需的库:
......@@ -725,25 +725,25 @@ import matplotlib.pyplot as plt
import numpy as np
```
# 操作步骤
## 操作步骤
以下是绘制三角形曲面图的步骤:
1. 准备三个不同图的数据:
```py
# Make radii and angles arrays.
## Make radii and angles arrays.
radii = np.linspace(0., 1.0, 16)
angles = np.linspace(0, 2*np.pi, 32)
# Repeat all angles for each radius.
## Repeat all angles for each radius.
angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1)
# Convert polar (radii, angles) coords to cartesian (x, y) coords.
## Convert polar (radii, angles) coords to cartesian (x, y) coords.
x = (radii*np.cos(angles)).flatten()
y = (radii*np.sin(angles)).flatten()
# Compute z to make the triangle surface.
## Compute z to make the triangle surface.
z = np.tan(x**2 + y**2)
z1 = np.cos(x**2 + y**2)
z2 = np.cos(x**3 + y**3)
......@@ -784,7 +784,7 @@ plt.axis('off')
plt.show()
```
# 工作原理
## 工作原理
这是代码的说明:
......@@ -807,11 +807,11 @@ plt.show()
![](img/93f3c9a9-1acc-4da1-b72e-53a399cd340a.png)
# 在 3D 模式下绘制 2D 数据
## 在 3D 模式下绘制 2D 数据
在本秘籍中,我们将学习如何在 3D 模式下绘制 2D 数据。 我们将根据原因码将产品缺陷绘制为条形图,将累积缺陷绘制为线形图。 我们将在 *x* 轴,*z* 轴和 *y* 轴上的累积缺陷百分比。 在 2D 空间中,有两个 *y* 轴,其中一个具有条形图的比例,另一个具有折线图的比例。
# 准备
## 准备
导入所需的库:
......@@ -820,7 +820,7 @@ import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
```
# 操作步骤
## 操作步骤
以下是绘制和所需 3D 图的步骤:
......@@ -869,7 +869,7 @@ ax.legend(loc='best')
plt.show()
```
# 工作原理
## 工作原理
这是代码的说明:
......@@ -896,13 +896,13 @@ plt.show()
![](img/376381db-f4e4-42c6-8c19-da85820b8e14.png)
# 在 3D 中可视化 2D 中的线性不可分离数据
## 在 3D 中可视化 2D 中的线性不可分离数据
在本秘籍中,我们将学习如何可视化在 3D 中线性不可分离的 2D 数据。 这通常用于解释支持向量机算法的内部工作原理,该算法将较低维的数据带到较高维的空间,以便可以找到一个平面。将数据整齐地分离为各种群集。
我们将使用相同的数据绘制 2D 和 3D 图,以使其可视化效果更好。
# 准备
## 准备
导入所需的库:
......@@ -913,21 +913,21 @@ import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
```
# 操作步骤
## 操作步骤
这是绘制和所需图形的步骤:
1. 将数据从 Excel 文件读取到列表中:
```py
# Read the Data, two product test scores, and result 1 means accepted and 0 means rejected
## Read the Data, two product test scores, and result 1 means accepted and 0 means rejected
scores_data = pd.read_csv('test_scores_results.txt',header=None)
```
2. 创建一个 Pandas 数据帧可以轻松地将数据分为不同的类别:
```py
# Add columns labels to the data
## Add columns labels to the data
columns = ['Test1_Score', 'Test2_Score', 'Accepted']
scores_data = np.array(scores_data)
df = pd.DataFrame(data=scores_data, columns=columns)
......@@ -1003,7 +1003,7 @@ ax.legend(loc='best')
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -1024,11 +1024,11 @@ plt.show()
![](img/1e5852af-0699-4c0a-916d-a0125e7735ce.png)
# 词嵌入
## 词嵌入
在第 7 章,“嵌入文本和表达式”中,我们学习了如何在 2D 空间中绘制单词嵌入。 在这里,我们将学习如何在 3D 空间中绘制相同的单词嵌入。 要创建所需数据,我们将必须运行具有三个分量的`t-SNE`算法以生成 x,y 和 z 坐标。 我们将使用此输出来绘制图形。
# 准备
## 准备
导入所需的库:
......@@ -1038,7 +1038,7 @@ import matplotlib.pyplot as plt
import pickle
```
# 操作步骤
## 操作步骤
以下是绘制单词嵌入图所涉及的步骤:
......@@ -1085,7 +1085,7 @@ ax.set_zlabel('z')
plt.show()
```
# 工作原理
## 工作原理
它的工作原理与第 7 章“嵌入文本和表达式”中解释的 2D 等价物类似,不同之处在于输入文件具有三个组成部分,它们映射到三个维度 *x**y**z*
......
......@@ -9,17 +9,17 @@
* 使用浮动轴创建极坐标轴域
* 在浮动极坐标轴域上绘制行星系统数据
# 介绍
## 介绍
开发`axisartist`工具包的主要动机是支持曲线网格,例如用于在天文学中绘制行星系统的网格。 它有助于绘制在直角轴域和极坐标轴域上均具有弯曲轴域的图形,还可以帮助绘制具有浮动轴的图形。
`axisartist`是使用自 Matplotlib 主`Axes`类派生的自定义`Axes`类,其中每个轴(左,下,上和右)由单独的艺术家管理。 由于`ax.axis`的作用类似于字典,因此`ax.axis["left"]``ax.axis["bottom"]``ax.axis["top"]``ax.axis["right"]`可以访问它们。 我们还可以根据需要定义其他轴。
# 了解`axisartist`中的属性
## 了解`axisartist`中的属性
在本秘籍中,我们将学习如何使用`AxisArtist`的基本属性和属性,例如固定轴,浮动轴,标签和刻度。 在本秘籍中,我们将不会使用这些属性绘制任何图形。
# 准备
## 准备
您需要使用以下命令导入所需的库:
......@@ -28,7 +28,7 @@ import matplotlib.pyplot as plt
import mpl_toolkits.axisartist as AxisArtist
```
# 操作步骤
## 操作步骤
以下是绘制所需图形的步骤:
......@@ -107,7 +107,7 @@ ax.set_title('AxisArtist Demo', pad=50, loc='right')
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -159,13 +159,13 @@ plt.show()
新的浮动轴和固定轴的刻度与相应的主轴域的 *x**y* 轴刻度相同。 Matplotlib 当前不为这些新轴中的每一个支持不同的比例。 Matplotlib 3.0 版有望消除此限制。
# 在矩形框中定义曲线网格
## 在矩形框中定义曲线网格
在本秘籍中,我们将学习如何在使用笛卡尔坐标系的矩形轴域内创建具有自己的坐标系的曲线网格。 我们将在曲线坐标表示的两个点之间绘制一条简单的线形图。
这本质上是一个自定义开发的曲线坐标系,为此,我们必须定义从曲线坐标到笛卡尔坐标并以相反方向映射的函数。 在后续秘籍中,我们将学习`axistartist`类提供的预定义转换。
# 准备
## 准备
您需要使用以下或命令导入所需的库:
......@@ -176,7 +176,7 @@ from mpl_toolkits.axisartist import Subplot
from mpl_toolkits.axisartist.grid_helper_curvelinear import GridHelperCurveLinear
```
# 操作步骤
## 操作步骤
以下是绘制所需图形的步骤:
......@@ -189,7 +189,7 @@ fig = plt.figure(1, figsize=(7, 4))
2. 接下来,定义转换函数以将曲线坐标转换为直线坐标:
```py
# Transformation Function to convert curvilinear coordinates to rectilinear coordinates
## Transformation Function to convert curvilinear coordinates to rectilinear coordinates
def curv2rect_tr(x, y):
x, y = np.asarray(x), np.asarray(y)
return x, y - x
......@@ -198,7 +198,7 @@ def curv2rect_tr(x, y):
3. 定义转换函数以将直线坐标转换为曲线坐标:
```py
# Transformation Function to convert rectilinear coordinates to curvilinear coordinates
## Transformation Function to convert rectilinear coordinates to curvilinear coordinates
def rect2curv_tr(x, y):
x, y = np.asarray(x), np.asarray(y)
return x, y + x
......@@ -274,7 +274,7 @@ ax.text(7.5, 8.5, '(8.0, 16.0)', weight='bold', color='b')
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -304,11 +304,11 @@ plt.show()
![](img/ab14771d-37ce-416f-ad8e-3645e62cafbd.png)
# 在矩形框中定义极坐标轴域
## 在矩形框中定义极坐标轴域
在前面的秘籍中,我们学习了定义自定义变换,并使用它来绘制曲线坐标中的曲线网格线。 但是,它们都使用 *x**y* 坐标的笛卡尔坐标系。 在本秘籍中,我们将学习如何在矩形框中使用极坐标(角度和半径坐标)。 在本秘籍以及所有后续秘籍中,我们将使用 Matplotlib 提供的预构建转换。
# 准备
## 准备
您需要使用以下或命令导入必需的库:
......@@ -323,7 +323,7 @@ from mpl_toolkits.axisartist import SubplotHost, ParasiteAxesAuxTrans
import matplotlib.cbook as cbook
```
# 操作步骤
## 操作步骤
以下是绘制图形所需的步骤:
......@@ -336,7 +336,7 @@ fig = plt.figure(1, figsize=(7, 4))
2. 定义转换函数,如下所示:
```py
# PolarAxes.PolarTransform needs angle units as radian. However, we # plot the coordinate system in degrees for easier visualization
## PolarAxes.PolarTransform needs angle units as radian. However, we # plot the coordinate system in degrees for easier visualization
curv2rect_tr = Affine2D().scale(np.pi/180., 1.) +
PolarAxes.PolarTransform()
```
......@@ -344,9 +344,9 @@ curv2rect_tr = Affine2D().scale(np.pi/180., 1.) +
3. 计算角度和半径的边界值,以绘制网格线:
```py
#(25, 25) is the number of steps it takes from minimum limit to
##(25, 25) is the number of steps it takes from minimum limit to
maximum limit for x and y
# number of grid lines(circular for radius, diagonal for angle) will
## number of grid lines(circular for radius, diagonal for angle) will
be influenced by these steps
extreme_finder = angle_helper.ExtremeFinderCycle(25, 25,
lon_cycle=360,
......@@ -358,7 +358,7 @@ extreme_finder = angle_helper.ExtremeFinderCycle(25, 25,
4. 定义角度的网格定位器:
```py
# Determine grid values appropriate for the coordinate (degree,
## Determine grid values appropriate for the coordinate (degree,
minute, second).
grid_locator1 = angle_helper.LocatorDMS(18)
```
......@@ -366,7 +366,7 @@ grid_locator1 = angle_helper.LocatorDMS(18)
5. 定义角度的刻度格式器:
```py
# Use an appropriate formatter to show angle values in degree,
## Use an appropriate formatter to show angle values in degree,
minute and second format.
tick_formatter1 = angle_helper.FormatterDMS()
```
......@@ -457,7 +457,7 @@ ax.grid(True)
plt.show()
```
# 工作原理
## 工作原理
以下是上述代码的说明:
......@@ -495,13 +495,13 @@ plt.show()
![](img/375f0a3e-ca10-4321-9a2e-d04667e5776e.png)
# 将浮动轴用于矩形图
## 将浮动轴用于矩形图
在本秘籍中,我们将学习如何绘制浮动轴。 当我们必须设计一个复杂的仪表板应用时,这些功能很有用,在该应用中,我们可能必须以不同于标准水平或垂直方向的其他方向放置单个图形或绘图。
我们将绘制三个不同的图以演示浮动轴的各种功能。
# 准备
## 准备
您需要使用以下或命令导入必需的库:
......@@ -513,7 +513,7 @@ from matplotlib.transforms import Affine2D
import mpl_toolkits.axisartist.floating_axes as floating_axes
```
# 操作步骤
## 操作步骤
以下是绘制所有三个图形所需的步骤:
......@@ -576,31 +576,31 @@ axp1.text(5, 1800, 'bar plot', rotation=30, size=15, weight='bold',
8. 对箱形图重复上述所有步骤,如下所示:
```py
# Read data
## Read data
wine_quality = pd.read_csv('winequality.csv', delimiter=';')
data = [wine_quality['alcohol'], wine_quality['fixed acidity'], wine_quality['quality']]
# Define transformation function
## Define transformation function
curv2rect_tr2 = Affine2D().scale(4, 1).rotate_deg(-30)
# Define grid helper function
## Define grid helper function
grid_helper2 = floating_axes.GridHelperCurveLinear(curv2rect_tr2, extremes=(0, 4, 0, 20))
# Define main axes
## Define main axes
ax2 = floating_axes.FloatingSubplot(fig, 132, grid_helper=grid_helper2)
fig.add_subplot(ax2)
# Define parasite axes
## Define parasite axes
axp2 = ax2.get_aux_axes(curv2rect_tr2)
# Plot boxplot
## Plot boxplot
axp2.boxplot(data)
# Set the tick and grid lines
## Set the tick and grid lines
grid_helper2.grid_finder.grid_locator1._nbins = 4
grid_helper2.grid_finder.grid_locator2._nbins = 5
# Set title and labels
## Set title and labels
axp2.text(1, 21, 'box plot', rotation=-30, size=15, weight='bold', color='b')
ax2.axis["bottom"].label.set_text('X axis')
ax2.axis["bottom"].label.set_color('blue')
......@@ -611,7 +611,7 @@ ax2.axis["left"].label.set_color('red')
9. 同样,对正弦/余弦函数作图重复相同的步骤,如以下代码块所示:
```py
# Prepare data, define transformation and grid helper functions,
## Prepare data, define transformation and grid helper functions,
main axes
x = np.linspace(0, 10, 100)
curv2rect_tr3 = Affine2D().scale(1, 1).rotate_deg(10)
......@@ -619,7 +619,7 @@ grid_helper3 = floating_axes.GridHelperCurveLinear(curv2rect_tr3, extremes=(0, 1
ax3 = floating_axes.FloatingSubplot(fig, 133, grid_helper=grid_helper3)
fig.add_subplot(ax3)
# Define parasite axes, plot sine and cosine graphs, set title,
## Define parasite axes, plot sine and cosine graphs, set title,
legend and grid
axp3 = ax3.get_aux_axes(curv2rect_tr3)
axp3.plot(x, 5*np.sin(x), label='sine')
......@@ -630,7 +630,7 @@ ax3.grid()
grid_helper3.grid_finder.grid_locator1._nbins = 5
grid_helper3.grid_finder.grid_locator2._nbins = 5
# Set labels, ticks and ticklabel attributes
## Set labels, ticks and ticklabel attributes
ax3.axis["bottom"].label.set_text('X axis')
ax3.axis["bottom"].label.set_color('green')
ax3.axis["bottom"].major_ticks.set_color("green")
......@@ -651,7 +651,7 @@ plt.tight_layout()
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -702,11 +702,11 @@ plt.show()
![](img/b36e8e39-73ef-45de-ab47-93015e763a28.png)
# 使用浮动轴创建极坐标轴域
## 使用浮动轴创建极坐标轴域
在第 2 章(基本绘图入门)中,我们学习了如何在定义轴域的同时使用`pyplot``projection='polar'`选项绘制极坐标图。 在本秘籍中,我们将学习如何使用浮动轴绘制极坐标图。
# 准备
## 准备
您需要使用以下或命令导入必需的库:
......@@ -719,7 +719,7 @@ from matplotlib.projections import PolarAxes
from mpl_toolkits.axisartist.grid_finder import (FixedLocator, MaxNLocator, DictFormatter)
```
# 操作步骤
## 操作步骤
以下是绘制绘图所需的步骤:
......@@ -790,7 +790,7 @@ main_axes.set_title('Polar Plot using Floating Axes', weight='bold', color='b',
plt.show()
```
# 工作原理
## 工作原理
以下是上述代码的说明:
......@@ -809,11 +809,11 @@ plt.show()
![](img/0bba86b8-bd13-487c-bbae-32b733b6bb67.png)
# 在浮动极坐标轴域上绘制行星系统数据
## 在浮动极坐标轴域上绘制行星系统数据
在本秘籍中,我们将学习有关使用浮动轴在极坐标中绘制行星系统数据的信息。 我们将绘制两个具有不同限制和属性的图表,以展示多种可能性。 我们没有学习任何新功能或代码,只是在实际应用中应用,我们在前面的秘籍中学习的功能。
# 准备
## 准备
您需要使用以下或命令导入必需的库:
......@@ -827,7 +827,7 @@ import mpl_toolkits.axisartist.angle_helper as angle_helper
from mpl_toolkits.axisartist.grid_finder import MaxNLocator
```
# 操作步骤
## 操作步骤
以下是绘制两个图所需的步骤:
......@@ -855,9 +855,9 @@ grid_locator2 = MaxNLocator(4)
4. 如下设置角度和半径坐标的限制:
```py
# Specify angle coordinate limits in degrees
## Specify angle coordinate limits in degrees
langle, uangle = 120., 225.
# Specify radial coordinate limits in '1000 km
## Specify radial coordinate limits in '1000 km
lradius, uradius = 8, 16
```
......@@ -966,7 +966,7 @@ plt.suptitle('Planetary System Plots',size=20, weight='bold',
plt.show()
```
# 工作原理
## 工作原理
由于本秘籍中未引入任何新功能或语法,因此在此不再重复代码说明。 所有这些语句和功能已经在本章的早期秘籍中进行了说明。
......
......@@ -9,15 +9,15 @@
* 使用`inset_locator`放大图像
* 使用`inset_locator`绘制插入轴域
# 介绍
## 介绍
`axes_grid1`工具包旨在提供一组帮助器类,以在网格中绘制带有颜色条的图像,并根据图像大小正确对齐颜色条。 它可用于放大图像的一部分,绘制插入轴域(类似于图片中的图片),绘制二维图和两个变量,从属轴域和锚定艺术家中每个变量的关联直方图。
# 使用`axisartist`和`axesgrid1`工具箱绘制双生轴域
## 使用`axisartist`和`axesgrid1`工具箱绘制双生轴域
在第 4 章和“开发可视化来提高发布质量”中,我们学习了如何使用双生轴域方法在图的左右轴域上绘制两个不同的比例尺。 在第 9 章和“开发交互式绘图”中,我们学习了如何在 *y* 轴域上绘制不同的测量单位,并再次使用`twinx`方法进行交互式分析 。 在本秘籍中,我们将学习如何使用 Matplotlib `twinx`主方法以及`axisartist``axes_grid1`工具包在 *y* 轴域上绘制多个比例尺。
# 准备
## 准备
我们将首先使用 Matplotlib `twinx()`方法绘制图形。 然后,在“更多”部分中,我们将使用`axisartist``axes_grid1`工具包再次绘制图形。
......@@ -28,7 +28,7 @@ import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator
```
# 操作步骤
## 操作步骤
以下是绘制双生轴域图所需的步骤:
......@@ -127,7 +127,7 @@ ax3.tick_params(axis='y', colors=l1.get_color())
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -157,7 +157,7 @@ plt.show()
![](img/618a2a3f-086d-43dd-ade4-59de504a69dc.png)
# 更多
## 更多
现在,我们将使用`axisartist``axes_grid1`工具包绘制相同的图形。 遵循的步骤是相同的​​,因此在此我们将不描述每个步骤,而是将整个代码列出在一个块中。 此后,我们将解释这两种方法之间的主要区别。
......@@ -214,7 +214,7 @@ ax1.axis["left"].major_ticklabels.set_color(b.patches[0].get_facecolor())
ax2.axis["right"].major_ticklabels.set_color(l.get_color())
ax3.axis["right"].major_ticklabels.set_color(l1.get_color())
# setting the color for axis itself is not working in AA
## setting the color for axis itself is not working in AA
ax2.spines["right"].set_color(l.get_color())
ax3.spines["right"].set_color(l1.get_color())
......@@ -243,7 +243,7 @@ plt.show()
![](img/1b0285f8-df31-4bbc-aa77-e3c3d1256c1e.png)
# 使用`AxesDivider`绘制散点图和相关的直方图
## 使用`AxesDivider`绘制散点图和相关的直方图
在本秘籍中,我们将学习如何使用`axes_grdi1``AxesDivider`类在主轴域上绘制双变量图,并在主轴域的任意两侧绘制两个单变量图。 这有助于可视化两个变量之间的关系,以及同一图中两个变量的分布情况(尽管三个不同的轴域/曲线)。
......@@ -251,7 +251,7 @@ plt.show()
在此秘籍中,我们将在带有两个变量的主轴域上绘制散点图,并且在主轴域的顶部和右侧,将为散点图所使用的两个变量分别绘制直方图。
# 准备
## 准备
让我们导入所需的库。 应当指出,我们不是直接导入`AxesDiveder`; 相反,我们正在使用此类的帮助函数`make_axes_locatable`。 您需要使用以下命令导入库:
......@@ -262,7 +262,7 @@ from mpl_toolkits.axes_grid1 import make_axes_locatable
import pandas as pd
```
# 操作步骤
## 操作步骤
以下是绘制图形所涉及的步骤:
......@@ -333,7 +333,7 @@ axright.set_title('sepal width', size=10)
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -359,13 +359,13 @@ plt.show()
![](img/4128c59d-dd4f-4978-8840-e0e27f1edab3.png)
# 使用`AxesDivider`绘制颜色条
## 使用`AxesDivider`绘制颜色条
在本秘籍中,我们将学习如何使用`AxesDivider`绘制图像的颜色条,以确保其与图像正确对齐。 我们已经使用了`pyplot.colorbar()`很多次,但有时颜色条超出了图像边界。 使用`AxesDivider``ImageGrid`,我们将不会看到此问题,如本秘籍所示。
我们将在三个轴域上绘制图像–一个使用不带`AxesDivider`的常规`pyplot.colorbar()`; 第二个使用`AxesDivider`和右侧的垂直颜色条; 第三个再次使用`AxesDivider`,但这一次在图像顶部带有水平色条。
# 准备
## 准备
您需要使用以下命令导入所需的库:
......@@ -377,7 +377,7 @@ import numpy as np
import pandas as pd
```
# 操作步骤
## 操作步骤
以下是使用颜色条绘制图像所涉及的步骤:
......@@ -443,7 +443,7 @@ plt.tight_layout(w_pad=-1)
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -472,13 +472,13 @@ plt.show()
![](img/5b3b115d-f82a-4335-a050-635d9243408c.png)
# 使用`ImageGrid`在网格中使用颜色条绘制图像
## 使用`ImageGrid`在网格中使用颜色条绘制图像
在第 3 章,“绘制多个图形,子图形和图形”和第 6 章,“绘制高级功能”的过程中,我们学习了如何在网格上绘制具有多个网格选项的多个图。 当您尝试使用带有这些选项的网格上的颜色条来绘制图像时,颜色条对齐可能不是我们想要的方式。`axes_grid1`工具包的`ImageGrid`辅助函数可在网格中以正确对齐方式绘制带有颜色条的图像。 我们将在本秘籍中学习如何使用这些功能。
我们将在三个不同的图中连续绘制相同的相关图,但是使用网格的不同特征来演示大多数(如果不是全部)可用特征。
# 准备
## 准备
您需要使用以下命令导入所需的库:
......@@ -489,7 +489,7 @@ from mpl_toolkits.axes_grid1 import ImageGrid
import pandas as pd
```
# 操作步骤
## 操作步骤
以下是绘制所需图形所涉及的步骤:
......@@ -576,7 +576,7 @@ for i in range(4):
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -627,7 +627,7 @@ plt.show()
![](img/5c24b7bb-ae37-42a3-8558-db685c3a5372.png)
# 使用`inset_locator`放大图像
## 使用`inset_locator`放大图像
在第 6 章“带有高级功能的绘图”中,我们学习了如何使用 Matplotlib 的面向对象接口在主轴域内绘制插入轴域。 在本秘籍和下一篇秘籍中,我们将学习如何使用`axes_grid1`工具包的`inset_locator`助手函数创建插入轴域并绘制图像和其他图形。
......@@ -635,7 +635,7 @@ plt.show()
我们将在两个轴域上绘制图像,并在每个图中放大图像的不同部分。
# 准备
## 准备
您需要使用以下命令导入所需的库:
......@@ -648,7 +648,7 @@ from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes
from mpl_toolkits.axes_grid1.inset_locator import mark_inset
```
# 操作步骤
## 操作步骤
这是绘制图形的必要步骤:
......@@ -749,7 +749,7 @@ mark_inset(ax2, axins2, loc1=2, loc2=4, fc="none", ec="m")
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -779,11 +779,11 @@ plt.show()
![](img/892b95af-33ac-47ac-b03a-510722c8ff53.png)
# 使用`inset_locator`绘制插入轴域
## 使用`inset_locator`绘制插入轴域
在本秘籍中,我们将学习在主轴域上绘制散点图,并在两个插入轴域上创建两个变量中每个变量的直方图。 我们将使用熟悉的`Iris`数据集来执行此操作。
# 准备
## 准备
您需要使用以下命令导入所需的库:
......@@ -794,7 +794,7 @@ import pandas as pd
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
```
# 操作步骤
## 操作步骤
这是绘制图形的分步方法:
......@@ -878,7 +878,7 @@ ax.set_title('iris plot', size=20, color='g')
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......
......@@ -14,17 +14,17 @@
* 绘制时区
* 绘制动画地图
# 介绍
## 介绍
Cartopy 是用于在 Matplotlib 上绘制地理地图的第三方工具包。 预计到 2020 年,Cartopy 将取代 Basemap。Cartopy 具有多种功能,可满足许多不同的用户群体。 在这里,我们将尝试介绍企业中通常使用的大多数功能。
地理地图以经度和纬度绘制,均以度为单位。 经度绘制在 *x* 轴上,并且从西到 180 度(-180)到东到 180 度(180)变化。 纬度绘制在 *y* 轴上,并且从向南 90 度(-90)到向北 90 度(90)变化。 地图上的位置以其经度和纬度值标识。
# 绘制基本地图特征
## 绘制基本地图特征
在本秘籍中,我们将学习 Cartopy 提供的用于绘制地图的基本功能。 该秘籍将涵盖国家边界,沿海地区与陆地,陆地区域,海洋,河流和湖泊的边界等特征。 它还将介绍如何提供背景图像以实现更好的可视化效果。
# 准备
## 准备
您需要使用以下命令导入所需的库:
......@@ -34,7 +34,7 @@ import cartopy.crs as ccrs
import cartopy.feature as cfeature
```
# 操作步骤
## 操作步骤
以下是绘制基本地图所涉及的步骤:
......@@ -81,7 +81,7 @@ ax.text(-0.02, 0.55, 'Latitude', va='bottom', ha='center', size=15, color='b',
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -108,11 +108,11 @@ plt.show()
![](img/28b891e4-d95d-4f54-9006-8e74e5918307.png)
# 绘制投影
## 绘制投影
如先前的秘籍中所述,投影是在其中绘制地图的坐标参考系统。 Cartopy 提供了许多不同的投影,在本秘籍中,我们将绘制九个带有默认参数的投影,以演示它们的外观。 可用投影的完整列表可以在[这个页面](https://scitools.org.uk/cartopy/docs/latest/crs/projections.html)中找到。
# 准备
## 准备
您需要使用以下命令导入所需的库:
......@@ -121,7 +121,7 @@ import cartopy.crs as ccrs
import matplotlib.pyplot as plt
```
# 操作步骤
## 操作步骤
以下是绘制九种不同投影所涉及的步骤:
......@@ -197,7 +197,7 @@ fig.suptitle("Cartopy Projections - Demo", size=20, weight='bold', color='blue')
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -210,13 +210,13 @@ plt.show()
![](img/0d8599ee-c19c-4fcc-a11d-212e3eca2a00.png)
# 使用网格线和标签
## 使用网格线和标签
在本秘籍中,我们将学习如何绘制网格线以及如何管理刻度线和刻度线标签。 Cartopy 具有预定义的`gridlines()`函数来管理这些功能,该功能具有许多助手函数,可根据需要格式化标签。
我们将绘制四个图表来演示默认选项,以及当我们要以特定的自定义方式绘制标签时可能的自定义程度。
# 准备
## 准备
您需要使用以下命令导入所需的库:
......@@ -228,7 +228,7 @@ import cartopy.crs as ccrs
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
```
# 操作步骤
## 操作步骤
以下是使用各种选项设置刻度和标签格式来绘制四个图表的步骤:
......@@ -382,7 +382,7 @@ ax4.set_title('PlateCarree - Xticks & Yticks at fixed locations',
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -437,11 +437,11 @@ plt.show()
应该注意的是,刻度标签和相关格式仅针对`PlateCarree``Mercator`投影定义。 对于其他投影,`gridlines()`会在没有刻度标签的情况下进行绘图,因此我们无法在`gridlines()`上使用`draw_labels=True`参数进行投影。
# 在地图上绘制位置
## 在地图上绘制位置
在本秘籍中,我们将学习如何在地图上绘制具有给定经度和纬度参数的位置。 这样就可以根据位置之间的相对位置直观地表示位置。 我们还将学习如何在地球上沿直线和球形方向连接两个位置。
# 准备
## 准备
您需要使用以下命令导入所需的库:
......@@ -450,7 +450,7 @@ import matplotlib.pyplot as plt
import cartopy.crs as ccrs
```
# 操作步骤
## 操作步骤
这是绘制地图和全球各地的必要步骤。 您可以获取互联网上各个位置的经度和纬度信息。 在这里,我们将绘制主要城市,主要是国家的首都:
......@@ -552,7 +552,7 @@ ax.plot([-0.08, 77.1], [51.53, 28.7], color='m', transform=ccrs.Geodetic())
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -581,13 +581,13 @@ plt.show()
![](img/08d60d30-2f70-46b8-ac8c-73469e9a7ac1.png)
# 绘制具有政治边界的国家地图
## 绘制具有政治边界的国家地图
到目前为止,我们已经制作了覆盖全球的地图,这在您绘制例如全球公司办公室,跨大洲受到流行病影响的地区或跨许多国家的地震的地图时非常有用。
但是,如果要查看特定于某个地区的现象,该现象可能是一个国家,州,省甚至一个国家内的城市,则需要为地图设置较小的范围。 在本秘籍中,我们将学习如何做。
# 准备
## 准备
通常,地图数据以形状文件的形式组织和分布。 为了能够读取这些文件并在地图上绘制数据,我们需要`ShapeReader`包,通常由用于绘制地图的软件提供`ShapeReader`包,在这种情况下,该程序为 cartopy。 源映射数据是由商业和开放源代码的几个不同实体准备,组织和分发的。 Cartopy 主要支持两种此类来源:一种可从[这个页面](https://www.naturalearthdata.com/downloads/)获得。 另一个可以在[这个页面](http://www.soest.hawaii.edu/wessel/gshhg/)中找到。 您可以参考这些站点,以获取有关每个包的更多信息。
......@@ -605,7 +605,7 @@ from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
import cartopy.io.shapereader as shpreader
```
# 操作步骤
## 操作步骤
这是绘制地图所需的步骤 :
......@@ -756,7 +756,7 @@ plt.tight_layout(w_pad=5)
plt.show()
```
# 工作原理
## 工作原理
这是代码的说明:
......@@ -794,13 +794,13 @@ plt.show()
![](img/4ff08d93-29dc-451a-925a-aa4aaa8f5ef9.png)
# 使用 GeoPandas 和 Cartopy 绘制国家地图
## 使用 GeoPandas 和 Cartopy 绘制国家地图
在前面的秘籍中,我们使用`shapereader`下载文件,并使用`Reader`读取形状文件的内容并绘制它们。`shapereader``Reader`都是由 Cartopy 提供的。 在本秘籍中,我们将继续使用`shapereader`下载所需的形状文件,但使用 GeoPandas 读取并绘制形状文件的内容。 我们在第 6 章和“带有高级功能的绘图”中更早地使用了 GeoPandas 来绘制本书那部分中的地图。
我们将绘制与前面秘籍相同的三个国家地图。 但是,我们将使用两种不同类型的文件,`admin 0``admin 1`,并为每种类型绘制三个国家/地区,总共有六个图表。
# 准备
## 准备
您需要使用以下命令导入所需的库:
......@@ -812,7 +812,7 @@ from cartopy.io import shapereader
import cartopy.crs as ccrs
```
# 操作步骤
## 操作步骤
以下是绘制国家地图的步骤:
......@@ -923,7 +923,7 @@ ax6.set_title('India - Admin1')
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -947,11 +947,11 @@ plt.show()
![](img/b21b6804-0061-4da9-8865-5827fd30a19f.png)
# 绘制世界人口稠密的地方
## 绘制世界人口稠密的地方
在此秘籍中,我们将绘制全球人类居住的位置。 我们将使用*自然地球*数据网站上的相应形状文件。
# 准备
## 准备
您需要使用以下命令导入所需的库:
......@@ -961,7 +961,7 @@ import cartopy.crs as ccrs
import cartopy.io.shapereader as shpreader
```
# 操作步骤
## 操作步骤
以下是绘制地图所涉及的步骤:
......@@ -1016,7 +1016,7 @@ ax.set_title('Populated places of the world.')
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -1030,11 +1030,11 @@ plt.show()
![](img/fa284d88-4789-4693-837e-cec58e944b15.png)
# 绘制人口前五名和后五名的国家
## 绘制人口前五名和后五名的国家
在本秘籍中,我们将学习如何提取每个国家的人口数据,按人口数量对它们进行排序,并在人口图上绘制按人口计算的前五名和后五名国家。 我们将下载并使用`110m`分辨率的`admin 0`形状文件。
# 准备
## 准备
您需要使用以下命令导入所需的库:
......@@ -1044,7 +1044,7 @@ import cartopy.crs as ccrs
import cartopy.io.shapereader as shpreader
```
# 操作步骤
## 操作步骤
以下是绘制地图所需的步骤:
......@@ -1068,22 +1068,22 @@ sort_by_pop = sorted(countries, key=population)
3. 提取前五个和最后五个条目,分别代表人口不足的前五名和前五名的国家。 从网上离线获取相应的经度和纬度坐标:
```py
# get the first 5 entries that represent lowest population
## get the first 5 entries that represent lowest population
B5_countries_by_pop = sort_by_pop[:5]
B5_Country_Names = ', '.join([country.attributes['NAME_LONG'] for
country in B5_countries_by_pop])
# get the last 5 entries that represent highest population
## get the last 5 entries that represent highest population
T5_countries_by_pop = sort_by_pop[-5:]
T5_Country_Names = ', '.join([country.attributes['NAME_LONG'] for
country in T5_countries_by_pop])
#B5_Country_Names = ['French Southern and Antarctic Lands',
##B5_Country_Names = ['French Southern and Antarctic Lands',
'Falkland Islands', 'Antarctica', 'Greenland', #'Northern Cyprus']
B5_lat = [49.28, 51.796, 82.862, 71.71, 35.32]
B5_lon = [69.35, 59.523, 135, 42.60, 33.31]
#T5_Country_Names = ['Brazil', 'Indonesia', 'United States',
##T5_Country_Names = ['Brazil', 'Indonesia', 'United States',
'India', 'China']
T5_lat = [-14.2350, -0.7893, 37.0902, 20.5937, 40]
T5_lon = [-51.9253, 113.9213, -95.7129, 78.9629, 116.5]
......@@ -1139,7 +1139,7 @@ plt.text(T5_lon[4], T5_lat[4], 'China', size=12, color='m',
plt.show()
```
# 工作原理
## 工作原理
这是代码的说明:
......@@ -1165,11 +1165,11 @@ plt.show()
![](img/e654bc45-cda9-400a-a2cb-2da83f69205c.png)
# 绘制全球温度
## 绘制全球温度
在本秘籍中,我们将学习如何绘制全球给定温度的图表,以可视化它们相对彼此的外观。 您需要从[这里](http://data.nodc.noaa.gov/thredds/fileServer/woa/WOA09/NetCDFdata/temperature_annual_1deg.nc)下载用于绘制地图所需的温度文件。
# 准备
## 准备
您需要使用以下命令导入所需的库:
......@@ -1182,7 +1182,7 @@ import cartopy.crs as ccrs
from cartopy.util import add_cyclic_point
```
# 操作步骤
## 操作步骤
以下是绘制地图所需的步骤:
......@@ -1240,7 +1240,7 @@ plt.colorbar(temp_map, orientation='horizontal')
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -1258,11 +1258,11 @@ plt.show()
![](img/5755fe87-d0ac-475b-9229-e2cd52121e3e.png)
# 绘制时区
## 绘制时区
在本秘籍中,我们将学习如何在地图上绘制时区。*自然地球*数据网站上提供了时区形状文件,因此我们可以像过去一样使用`shapereader`下载它。 但是,我们已离线下载文件,并在此处使用它来演示 Cartopy 提供的另一个函数:`ShapelyFeature`
# 准备
## 准备
您需要使用以下命令导入所需的库:
......@@ -1275,7 +1275,7 @@ from cartopy.feature import ShapelyFeature
import matplotlib.ticker as mticker
```
# 操作步骤
## 操作步骤
以下是在地图上绘制时区所需的步骤:
......@@ -1345,7 +1345,7 @@ ax.set_title('Global Time Zones', size=15, color='g')
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -1368,11 +1368,11 @@ plt.show()
![](img/94042371-8c29-47b0-9b16-daf281a9af92.png)
# 绘制动画地图
## 绘制动画地图
在本秘籍中,我们将学习如何为三维可视化绘制动画地图。
# 准备
## 准备
您需要使用以下命令导入所需的库:
......@@ -1383,7 +1383,7 @@ import matplotlib.pyplot as plt
import numpy as np
```
# 操作步骤
## 操作步骤
以下是绘制动画地图并将其保存为 MP4 文件的步骤:
......@@ -1432,7 +1432,7 @@ ani.save("Geostationary.mp4")
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......
此差异已折叠。
此差异已折叠。
......@@ -8,15 +8,15 @@
* 使用对数刻度
* 使用度量单位
# 介绍
## 介绍
在上一章中,我们了解了如何分别绘制各种图形。 在本章中,我们将学习如何在同一坐标轴域上绘制多个图形,在同一图形中绘制多个坐标轴/曲线以及在一个会话中绘制多个图形。 我们还将学习如何使用对数刻度和度量单位,例如厘米,英寸等。
# 在同一轴域上绘制多个图形
## 在同一轴域上绘制多个图形
正如我们从第一章中学到的,轴域是绘制图形的空间,通常在图中看到的所有元素都是轴域的一部分。 我们在一幅图中可以有多个轴域。 在本秘籍中,我们将学习如何在同一轴域上绘制多个图表。
# 准备
## 准备
我们将使用一个**受试者工作特性****ROC**)曲线的示例,通过它可以使用多个**机器学习****ML**)算法来比较给定的分类问题,并且针对该问题选择了表现最佳的算法。 ROC 曲线用**真阳性率****TPR**)以及**假阳性率****FPR**)的阈值概率范围绘制。 目的是随着和阈值概率的变化,看到 TPR 和 FPR 的敏感性。覆盖最大 ROC **曲线下面积****AUC**)的算法是在分类准确性方面表现最佳的算法。
......@@ -29,30 +29,30 @@ import matplotlib.pyplot as plt
import pandas as pd
```
# 操作步骤
## 操作步骤
这是在同一轴域上绘制多个 ROC 曲线的代码块:
1. 使用`pandas`从各自的 Excel 表中读取各种算法的 FPR 和 TPR 数据:
```py
# K-nearest neighbor (KNN)
## K-nearest neighbor (KNN)
fpr_KNN = pd.read_excel('ROC_Curves.xlsx', 'fpr_KNN')
tpr_KNN = pd.read_excel('ROC_Curves.xlsx', 'tpr_KNN')
# Multilayer Perceptron(MLP)
## Multilayer Perceptron(MLP)
fpr_MLP = pd.read_excel('ROC_Curves.xlsx', 'fpr_MLP')
tpr_MLP = pd.read_excel('ROC_Curves.xlsx', 'tpr_MLP')
# Stochastic Gradient Descent (SGD)
## Stochastic Gradient Descent (SGD)
fpr_SGD = pd.read_excel('ROC_Curves.xlsx', 'fpr_SGD')
tpr_SGD = pd.read_excel('ROC_Curves.xlsx', 'tpr_SGD')
# Random Forest (RF)
## Random Forest (RF)
fpr_RF = pd.read_excel('ROC_Curves.xlsx', 'fpr_RF')
tpr_RF = pd.read_excel('ROC_Curves.xlsx', 'tpr_RF')
# Decision Trees (DT)
## Decision Trees (DT)
fpr_DT = pd.read_excel('ROC_Curves.xlsx', 'fpr_DT')
tpr_DT = pd.read_excel('ROC_Curves.xlsx', 'tpr_DT')
```
......@@ -83,7 +83,7 @@ plt.legend(loc='best')
plt.show()
```
# 工作原理
## 工作原理
这是代码工作方式的说明:
......@@ -99,11 +99,11 @@ plt.show()
从图中可以清楚地看出,`SGD Classifier`算法与所有其他算法相比效果不佳,因为该图表下的区域最低(或者最接近参考的参考) 虚线)。 对于该特定分类问题,MLP 算法是这五种算法中最好的,因为该曲线下的面积最高(或距参考块虚线最远)。
# 在同一图形上绘制子图
## 在同一图形上绘制子图
Matplotlib 提供了许多不同的方法和辅助函数,这些函数和辅助函数利用,`axes`方法在同一图形上绘制多个图并将它们布置为各种网格格式。 这使我们能够开发复杂的仪表板应用。
# 准备
## 准备
对于本章中的示例,我们将使用与第 2 章“基本绘图入门”中介绍的相同的`Wine Quality``Iris`数据集。
......@@ -120,7 +120,7 @@ import pandas as pd
import matplotlib.pyplot as plt
```
# 操作步骤
## 操作步骤
以下代码块在一个图中绘制了三个图:
......@@ -147,7 +147,7 @@ ax3.plot([2,4])
plt.show()
```
# 工作原理
## 工作原理
这是代码的说明:
......@@ -162,7 +162,7 @@ plt.show()
如果我们为第三个图编码了`plt.subplot(211)`,它将覆盖前两个图,因为 211 表示`2 x 1`网格中的第一个图,它将从第一行开始! 如果我们要绘制相同的三个图,但在第一列中排列两个,在第二列中排列一个,而不是第一行中当前的前两个图和第二行中的第三个图,那么我们将不得不指定绘图顺序为 221、223 和 122。 试试看作为练习!
# 更多
## 更多
由于存在许多此类可能的网格,因此我们将再看到一个示例,该示例在`2 x 2`网格中包含四个不同的图,每个图具有不同类型的图形,直方图,折线图,散点图和条形图。 在最后一个示例中,我们一直使用和`plt.subplot()`方法一个接一个地添加轴域。 在此示例中,我们将一次定义网格中的所有轴域,然后使用索引来访问每个轴域并绘制不同的图形:
......@@ -252,11 +252,11 @@ plt.show()
在这种基于索引的轴域方法中,所有图都将具有相同的大小,因此我们无法像在本秘籍开始时在示例中所做的那样来管理不同大小的图。
# 在一个会话中绘制多个图形
## 在一个会话中绘制多个图形
到目前为止,我们已经学习了如何在单个轴域和一个图形中的多个轴域上绘制多个图。 在本秘籍中,我们将学习如何在给定的会话中绘制多个图形。
# 准备
## 准备
在此示例中,我们还将使用相同的`Iris`数据集。 我们将绘制两个图形,并在每个图形中绘制多个图形。 在第一个图中,我们将使用另一种方法来创建具有不同大小图的网格。
......@@ -267,7 +267,7 @@ import matplotlib.pyplot as plt
import pandas as pd
```
# 操作步骤
## 操作步骤
以下代码块绘制了两个图形,每个图形中都有多个图形:
......@@ -356,7 +356,7 @@ plt.tight_layout(pad=5, w_pad=0.5, h_pad=1.0)
plt.show()
```
# 工作原理
## 工作原理
这是代码的说明:
......@@ -379,15 +379,15 @@ plt.show()
![](img/ac5d6629-6e4d-45f0-b668-0f1878c63d3d.png)
# 更多
## 更多
Matplotlib 还提供了另一个名为`AxesGrid`的工具包,它涵盖了更高级的网格选项,包括网格中的图像。 我们将在第 13 章“使用`axis_grid1`工具包”中进行介绍。
# 对数刻度
## 对数刻度
当数据的范围从很小的值到很大的值时,按线性比例绘制它可能无法使正确理解和数据点的相对大小。 在这种情况下,将使用对数刻度。
# 准备
## 准备
对于此示例,我们将使用一些虚拟数据来演示线性刻度和对数刻度之间的差异。
......@@ -397,7 +397,7 @@ Matplotlib 还提供了另一个名为`AxesGrid`的工具包,它涵盖了更
import matplotlib.pyplot as plt
```
# 操作步骤
## 操作步骤
以下代码块绘制了三个图形,一个以线性刻度绘制,和其他两个以对数刻度绘制。 两个对数图还演示了如何调整物理大小和数据规模:
......@@ -437,7 +437,7 @@ plt.tight_layout()
plt.show()
```
# 工作原理
## 工作原理
这是代码的说明:
......@@ -450,7 +450,7 @@ plt.show()
![](img/37bd769f-dcb8-4c69-b7ac-7378de2798e8.png)
# 更多
## 更多
让我们再举一个关于如何使用对数刻度的示例。 假设在组织中,员工根据其职位分为五类。 这五个类别中的每一个都进一步分为男人和女人。 对于这 10 个类别中的每个类别(5 名男性和 5 名女性),我们都有平均薪水和标准差。 绘制此数据以查看薪水数据如何在男女群体之间分配。
......@@ -499,13 +499,13 @@ ax.set_xticklabels(('C1', 'C2', 'C3', 'C4', 'C5'))
![](img/c96236d3-cf90-4521-9802-ebcfe7e80fbf.png)Matplotlib supports four different scales. The default is *linear,* and we have covered *log* in this recipe. You can refer to the Matplotlib documentation for the other two scales: [*symlog* and *logit*](https://matplotlib.org/examples/scales/scales.html).
# 使用度量单位
## 使用度量单位
有时,我们可能具有使用一个度量单位的数据,但是想要使用不同的度量单位来绘制图,或者有时我们可能想要对, *x**y* 轴使用不同的度量单位,例如 *x* 轴为厘米,*y* 轴为英寸。 当我们绘制角度时,度数和弧度也是如此。 Matplotlib 没有内置这些​​功能,但是 GitHub 上有一个扩展工具`basic_units.py`,可启用这些不同的度量单位。 该 Python 模块当前仅支持厘米/英寸和弧度/度。 对于其他度量单位,例如千克/磅,千米/海里等,我们将必须更新此工具模块。
`basic_units.py` is not a standard package to be installed like all other Python packages. It is a user-defined Python program that needs to be copied into your working directory. Then, in the main program, import the functions from this program similar to the way we import any other package or user-defined programs.
# 准备
## 准备
`basic_units.py`复制到工作目录后,即可开始使用那里的所有可用功能。
......@@ -518,7 +518,7 @@ from basic_units import cm, inch
import matplotlib.pyplot as plt
```
# 操作步骤
## 操作步骤
以下代码块绘制了两个图,一个是厘米,另一个是英寸,以演示两个度量单位之间的差异:
......@@ -583,7 +583,7 @@ plt.tight_layout(pad=3)
plt.show()
```
# 工作原理
## 工作原理
这是代码工作方式的说明:
......@@ -605,7 +605,7 @@ It should be noted that Matplotlib does not support sharing objects across diffe
由于在两个图上的比例都是和相同,因此线条的大小以英寸为单位要比以厘米为单位要小。
# 更多
## 更多
这是在 *x**y* 轴上使用厘米和英寸的混合的另一个示例。 我们有四个条形图,其中和相同的输入数据绘制在`2 x 2`的网格上。
......
此差异已折叠。
......@@ -13,11 +13,11 @@
* 使用原点和范围进行图像绘制
* 使用 Pandas 的地理绘图
# 使用属性循环器
## 使用属性循环器
我们在第 4 章和“开发可视化来提高发布质量”时了解到,Matplotlib 具有默认的颜色循环,当我们在给定轴域上绘制更多图形时,该颜色循环将重复出现。 通过属性循环器,我们可以在单个函数中为多个属性定义此类循环器。 如果要绘制具有重复图案的轴域,则可以使用属性循环器实现。
# 准备
## 准备
我们将在此处使用面向对象的 API。 在第 4 章“开发可视化以提高发布质量”中,在此示例中使用了`pyplot` API。 导入所需的库:
......@@ -29,7 +29,7 @@ from matplotlib.figure import Figure
from IPython.core.display import display
```
# 操作步骤
## 操作步骤
以下代码块绘制了六个领带对象; 后两个是前两个的重复。 在此示例中,它在每四个对象之后重复循环:
......@@ -79,7 +79,7 @@ ax.fill(x+6, y)
display(fig)
```
# 工作原理
## 工作原理
以下是代码的说明:
......@@ -96,7 +96,7 @@ display(fig)
![](img/6444ba0a-5623-4afa-9c3c-6859149ed488.png)
# 更多
## 更多
我们还可以在全局参数`rcParams`文件中设置属性循环器,该文件随后成为给定会话的默认循环器。
......@@ -109,11 +109,11 @@ mpl.rc('axes', prop_cycle=cycler('color', ['r', 'orange', 'c', 'y']) +\
cycler('hatch', ['x', 'xx-', '+O.', '*']))
```
# 使用路径效果
## 使用路径效果
我们在第 2 章“基本绘图入门”中学习了如何使用和`Path`方法绘制自定义绘图。 在这里,我们将学习如何在各种绘图对象上使用`path_effetcts`属性创建简单阴影和阴影阴影等效果。
# 准备
## 准备
导入所需的库:
......@@ -123,7 +123,7 @@ import numpy as np
from matplotlib.patheffects import PathPatchEffect, SimpleLineShadow, Normal
```
# 操作步骤
## 操作步骤
以下代码块在图形上绘制了 Sigmoid 曲线和文本对象,并具有和`path_effects`属性:
......@@ -164,7 +164,7 @@ plt.plot(x, y, linewidth=8, color='blue', path_effects=
plt.show()
```
# 工作原理
## 工作原理
这是代码的说明:
......@@ -184,11 +184,11 @@ plt.show()
![](img/cd175b93-7607-4031-ba95-6009d0ebb5cc.png)
# 更多
## 更多
我们已经演示了如何在此秘籍中使用预定义和自定义路径效果。 但是,Matplotlib 中提供了许多预定义的路径效果。 有关所有可能性的完整列表,请参考 [Matplotlib 文档](https://matplotlib.org/api/patheffects_api.html)
# 使用转换
## 使用转换
要引用图形上的特定点,我们需要其坐标。 Matplotlib 使用四种参考数据,轴域,图形和显示的坐标系。 在本秘籍中,我们将学习如何使用这些坐标系以及如何从一个坐标系转换为另一个坐标系:
......@@ -203,11 +203,11 @@ plt.show()
我们将有两个秘籍,一个用来演示数据坐标的转换以显示坐标,另一个演示数据的轴域和混合坐标系统。
# 转换数据坐标来显示坐标
## 转换数据坐标来显示坐标
在本秘籍中,我们将演示如何转换数据坐标以显示坐标。
# 准备
## 准备
导入所需的库:
......@@ -216,7 +216,7 @@ import matplotlib.pyplot as plt
import numpy as np
```
# 操作步骤
## 操作步骤
以下代码绘制了一个正弦波,并在数据和显示坐标中标注了图形上的一个点:
......@@ -284,7 +284,7 @@ disp = ax.annotate('display = (%.1f, %.1f)' % (xdisplay, ydisplay),
plt.show()
```
# 工作原理
## 工作原理
这是代码的说明:
......@@ -309,15 +309,15 @@ plt.show()
请注意,箭头未完全对准同一点。 这是因为各种输出设备的默认设置有所不同。 这就是为什么不经常使用显示坐标的原因。 它们仅在需要捕获键盘或鼠标事件的交互式绘图中有用。
# 更多
## 更多
在标注的上下文中,有许多选项可以指定图上某个点的坐标。 有关选项的完整列表,请参阅 [Matplotlib 文档](https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.annotate.html)
# 使用轴域和混合坐标系转换
## 使用轴域和混合坐标系转换
在本秘籍中,我们将学习如何使用,轴域和混合坐标系。
# 准备
## 准备
导入所需的库:
......@@ -330,7 +330,7 @@ from scipy.stats import norm
from matplotlib.ticker import MultipleLocator
```
# 操作步骤
## 操作步骤
以下代码块绘制了两个图表,以演示轴域和数据的混合坐标系:
......@@ -362,9 +362,9 @@ ellipse = patches.Ellipse((0.5, 0.5), 0.6, 0.3, transform=ax1.transAxes,
facecolor='blue', alpha=0.3)
ax1.add_patch(ellipse)
# remove the comment below to check if Ellipse remains at the same place,
# since it is on axes co-ordinates
#ax.set_xlim(10,40)
## remove the comment below to check if Ellipse remains at the same place,
## since it is on axes co-ordinates
##ax.set_xlim(10,40)
```
5. 在第二个轴域上定义,并在其上绘制两个具有不同均值的正态分布,但标准差相同:
......@@ -405,7 +405,7 @@ ax2.add_patch(rect)
plt.show()
```
# 工作原理
## 工作原理
这是代码的说明:
......@@ -430,11 +430,11 @@ plt.show()
![](img/5a9b3039-e1f1-45ab-9256-d38f8e6b8ec9.png)
# 控制轴域位置
## 控制轴域位置
在第 3 章和“绘制多个图表,子图和图形”中,我们了解了用于创建各种图形布局的`plt.subplot()``plt.subplots()``plt.subplot2grid()`函数。 我们将在本章稍后再学习一个函数`GridSpec()`。 它们每个都为设计和所需的图形布局提供了更高的灵活性。 但是,它们都带有预定义的参数,使用这些参数可以控制图中的轴域位置。 用户可以获得的最大灵活性是能够指定精确的坐标和放置在和图形布局中的轴域的大小。 这就是我们将从本秘籍中学到的东西。
# 准备
## 准备
我们将在此秘籍中使用或面向对象的 API。 导入所需的库:
......@@ -446,7 +446,7 @@ from matplotlib.figure import Figure
from IPython.core.display import display
```
# 操作步骤
## 操作步骤
以下代码块绘制了四个图形,第四个是三个轴域的子集,因此它是其他轴域内的轴域(重叠):
......@@ -518,7 +518,7 @@ ax4.set(xlabel='y', ylabel='x', title='inset axes')
display(fig)
```
# 工作原理
## 工作原理
这是代码的说明:
......@@ -537,15 +537,15 @@ display(fig)
![](img/243f448a-cb93-4a9e-a046-172641c2433f.png)
# 用于图形布局的`GridSpec`
## 用于图形布局的`GridSpec`
`GridSpec()`是用于复杂图形布局的另一个强大函数。`plt.subplot()``plt.subplot2grid()`实例化图形后,一次添加一个图,并且在中指定图形布局,每个子图中的行数和列数,其后是图的序列号,从右到上到下。 但是`plt.subplots()`一次就定义了整个图形布局,就行数和列数而言,然后使用和对应索引访问了每个图/轴域。`GridSpec()`允许在图形布局中创建多个网格,每个网格类似于`plt.subplots()`。 在本秘籍中,我们将学习如何使用`GridSpec()`以及如何将`GridSpec()`关键字参数与`plt.subplots()`一起使用。
# 使用`GridSpec`
## 使用`GridSpec`
在本秘籍中,我们将学习如何将`GridSpec()`用于图形布局。
# 准备
## 准备
导入所需的库:
......@@ -556,7 +556,7 @@ import matplotlib.patches as patches
from matplotlib.gridspec import GridSpec
```
# 操作步骤
## 操作步骤
以下代码块使用`GridSpec()`定义了两个`3 x 3`网格。 在`grid1`中,我们绘制了四个图形,每个图形具有不同的宽度和高度。 在`grid2`中,我们使用宽度和高度比绘制了九个图,以使高度在同一行中对所有图都是,相同,而宽度是,对于列中的所有图形都相同:
......@@ -650,7 +650,7 @@ for row in range(3):
plt.show()
```
# 工作原理
## 工作原理
代码的工作方式如下:
......@@ -674,7 +674,7 @@ plt.show()
![](img/f7270c1c-d7b7-49e5-924b-511127fe1eae.png)
# 更多
## 更多
在前面的示例中,我们使用`width_ratios``height_ratios`参数使用`GridSpec()`定义所需的网格。 可以将相同的参数传递给`plt.subplots()`以绘制我们在前面的示例中创建的相似网格。 这是代码:
......@@ -684,7 +684,7 @@ heights = [1, 3, 2]
t = np.arange(0.0, 1.0, 0.01)
s = np.sin(2*np.pi*t)
### Passing keyword specs to plt
#### Passing keyword specs to plt
gs_kw = dict(width_ratios=widths, height_ratios=heights)
fig, axes = plt.subplots(ncols=3, nrows=3, figsize=(10,8), gridspec_kw=gs_kw)
......@@ -704,11 +704,11 @@ plt.show()
![](img/151a82de-45b4-4ce3-b361-aba1f1c2054a.png)
# `GridSpec`对齐
## `GridSpec`对齐
当我们创建多个网格并将其并排放置在图中时,有时它们可​​能在,顶部,底部或两者处未对齐。 在本秘籍中,我们将学习如何避免此类对齐问题。
# 准备
## 准备
我们将为此示例使用一个误差线形图示例。 我们还将学习如何创建恒定误差线,对称和非对称误差线以及误差线采样。
......@@ -719,7 +719,7 @@ import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
```
# 操作步骤
## 操作步骤
以下代码块绘制了五个图,其中第一个网格中有三个,第二个网格中有两个。 我们在第一个网格上绘制恒定误差线以及对称和非对称误差线,在第二个网格上绘出所有误差线和采样误差线:
......@@ -830,7 +830,7 @@ gs2.update(top=top, bottom=bottom)
plt.show()
```
# 这个怎么运作 ...
## 这个怎么运作 ...
这是代码的说明:
......@@ -854,13 +854,13 @@ plt.show()
![](img/e4533f46-d1e9-45c8-ba33-b8e8fa14ac97.png)
# 约束布局
## 约束布局
约束布局类似于紧密布局,但是使用了一种不同的算法,该算法被认为更加准确和高效。 但是,在撰写本文时,它仍在测试中,因此可能会或可能不会继续。
对于此秘籍,我们将使用与上一个秘籍相同的误差线,但使用具有受约束布局的单个网格。
# 准备
## 准备
导入所需的库:
......@@ -869,7 +869,7 @@ import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
```
# 操作步骤
## 操作步骤
以下代码块在同一网格中绘制了五个误差线形图,并使用受约束的布局来确保图之间的正确对齐和适当的间距,以使标签或刻度上没有重叠:
......@@ -961,7 +961,7 @@ fig.set_constrained_layout_pads(w_pad=2./72., h_pad=2./72.,
plt.show()
```
# 工作原理
## 工作原理
大部分解释已在先前的秘籍中给出:
......@@ -976,11 +976,11 @@ plt.show()
![](img/9fe68e0e-dd8a-4983-b6a4-7e78f683c9cb.png)
# 使用`GridSpecFromSubplotSpec`
## 使用`GridSpecFromSubplotSpec`
`GridSpecFromSubplotSpec()`是可用于多个网格中图形布局的另一种方法。 这有点类似于`subplot2grid()`方法,我们在第 3 章和“绘制多个图表,子图和图形”中了解到。 我们还将看到`GridSpecFromSubplotSpec()`创建的复杂网格如何利用`constrained_layout`更好地对齐图中所有网格中的所有图。
# 准备
## 准备
导入所需的库:
......@@ -989,7 +989,7 @@ import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec, GridSpecFromSubplotSpec
```
# 操作步骤
## 操作步骤
以下代码块在一张图中绘制了不同格数和大小的三个网格:
......@@ -1037,7 +1037,7 @@ fig.set_constrained_layout_pads()
plt.show()
```
# 工作原理
## 工作原理
在此示例中,我们没有绘制任何图形,只是绘制单元格以演示如何使用,`GridSpecFromSubplotSpec()`方法:
......@@ -1054,11 +1054,11 @@ plt.show()
作为练习,您可以尝试使用严格的`layout()`替换约束布局选项。 即使对所有可用参数(例如`pad``w_pad``h_pad`)进行了任何级别的优化,也可能无法获得与`constrained_layout`一样清晰的对齐方式和间距。
# 为图像方向使用原点和范围
## 为图像方向使用原点和范围
我们已经学习了如何使用`imshow()`方法绘制二维彩色图像。 默认情况下,`imshow()`使用轴域左上角的作为数据坐标的原点`(0, 0)`,并相对于这些坐标填充图像。 如果我们想将其更改为左下角,并沿每个轴扩展数据限制,则`imshow()`方法的圆点和范围参数会有所帮助。
# 准备
## 准备
导入所需的库:
......@@ -1068,7 +1068,7 @@ import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator
```
# 操作步骤
## 操作步骤
以下代码块在两个图中绘制了一张鸟图像六次,其中是默认参数,而是可选原点和范围参数,每个参数都有不同的选项来演示这些参数如何影响图像的方向:
......@@ -1126,7 +1126,7 @@ plt.tight_layout()
plt.show()
```
# 工作原理
## 工作原理
这是此代码如何工作的说明:
......@@ -1145,11 +1145,11 @@ plt.show()
![](img/6df7d2f7-6aaf-4c70-8a99-599630f717bd.png)
# 使用 GeoPandas 的地理绘图
## 使用 GeoPandas 的地理绘图
在本秘籍中,我们将学习如何使用 Matplotlib 随附的`geopandas`包绘制地理地图。 Matplotlib 支持用于高级地理地图的第三方第三方包,例如`Basemap`(将于 2020 年停用)和`Cartopy`(替代底图)。 我们将在第 14 章“使用 Cartopy 绘制地理地图”中学习使用 Cartopy。
# 准备
## 准备
导入所需的库:
......@@ -1158,7 +1158,7 @@ import geopandas as gpd
import matplotlib.pyplot as plt
```
# 操作步骤
## 操作步骤
以下代码块突出显示了全球各地气象站的位置。 这些站监视天气和气候变化:
......@@ -1208,7 +1208,7 @@ world_borders.boundary.plot(ax=ax,color='#cccccc',linewidth=0.6)
plt.show()
```
# 工作原理
## 工作原理
这是代码的说明:
......
......@@ -11,15 +11,15 @@
* 使用小数,常规数学表达式和符号
* 二维空间中的词嵌入
# 介绍
## 介绍
如果您想将用户的注意力吸引到绘图的特定区域,想要提供其他信息或为绘图的某些部分提供说明,则的标注和文本会很方便。 它们还有助于创建故事绘图,并为任何正式演示提供对数据的更多见解。 在本章中,我们将学习如何使用这些功能。
# 将数学表达式与字体字典配合使用
## 将数学表达式与字体字典配合使用
在本秘籍中,我们将学习如何使用字体字典将数学表达式嵌入文本中,以将相同的属性应用于绘图上的所有文本,包括标题,标签和文本表达式。
# 准备
## 准备
导入所需的库:
......@@ -28,7 +28,7 @@ import numpy as np
import matplotlib.pyplot as plt
```
# 操作步骤
## 操作步骤
以下代码块绘制了一个衰减的指数函数。 首先,我们定义具有所有必需属性的字体字典,然后将其应用于图形上的每个文本元素,包括标题以及 *x**y* 标签。 这样可以确保图形上的文本外观和感觉一致:
......@@ -64,7 +64,7 @@ plt.subplots_adjust(left=0.15)
plt.show()
```
# 工作原理
## 工作原理
这是代码的说明:
......@@ -85,11 +85,11 @@ plt.show()
![](img/281a7536-ba83-4694-a2da-05ab0e6b6bef.png)
# 在极坐标图上标注点
## 在极坐标图上标注点
在本秘籍中,我们将学习如何标注极坐标图上的特定点。
# 准备
## 准备
导入所需的库:
......@@ -98,7 +98,7 @@ import numpy as np
import matplotlib.pyplot as plt
```
# 操作步骤
## 操作步骤
以下代码块绘制了一个极坐标图,并在其上标注了一个点:
......@@ -138,7 +138,7 @@ ax.annotate('a polar annotation',
plt.show()
```
# 工作原理
## 工作原理
这是代码的说明:
......@@ -158,11 +158,11 @@ plt.show()
![](img/c5ba1257-e7dc-4263-baa0-388d93d75611.png)
# 使用`ConnectionPatch`
## 使用`ConnectionPatch`
在本秘籍中,我们将学习如何使用`ConnectionPatch()`方法连接同一图形上的两个点或同一图形上的两个不同图形。 当试图显示绘图上两个点之间的关系时,这很方便。
# 准备
## 准备
导入所需的库:
......@@ -171,7 +171,7 @@ from matplotlib.patches import ConnectionPatch
import matplotlib.pyplot as plt
```
# 操作步骤
## 操作步骤
以下代码块绘制了两个轴域,四个点以及它们之间的连通性。 这是一种没有任何文本的标注:
......@@ -245,7 +245,7 @@ ax2.set_ylim(0, .5)
plt.show()
```
# 工作原理
## 工作原理
这是代码的说明:
......@@ -267,11 +267,11 @@ plt.show()
您可以用任何描述连接点之间关系的文字替换 A,B,C 和 D!
# 使用文本框
## 使用文本框
在本秘籍中,我们将学习如何嵌入文本框以标识图中的不同聚类。 我们将使用一个熟悉的`Iris`数据集,其中包含三个数据簇。
# 准备
## 准备
导入所需的库:
......@@ -281,7 +281,7 @@ import pandas as pd
import matplotlib.pyplot as plt
```
# 操作步骤
## 操作步骤
以下代码块在两个不同的轴域上两次绘制`Iris`数据。 一个使用常规图例来指示三个具有不同颜色和标签的不同群集。 另一个在点群集中使用文本框指示类:
......@@ -336,7 +336,7 @@ plt.legend()
plt.show()
```
# 工作原理
## 工作原理
这是代码的说明:
......@@ -360,7 +360,7 @@ plt.show()
![](img/ccf69b95-4483-4fed-b166-cec2f4a9f934.png)
# 更多
## 更多
在此示例中,我们使用了预定义的`"round"` `boxstyle`。 有许多预定义的选项,例如`"circle"`,`"darrow"`,`"larrow"`,`"rarrow"`,`"square"`,`"sawtooth"`和`"roundtooth"`。
......@@ -438,11 +438,11 @@ plt.show()
![](img/0e514918-053b-4808-87ec-d7a5feab510c.png)
# 绘制积分曲线下的区域
## 绘制积分曲线下的区域
在本秘籍中,我们将学习如何在曲线下绘制定义的区域,以及如何将等式作为文本嵌入到绘图中。
# 准备
## 准备
导入所需的库:
......@@ -452,7 +452,7 @@ import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
```
# 操作步骤
## 操作步骤
以下代码块绘制了一个三阶`y = x ** 3`的多项式,并绘制了该曲线下 *x* 轴上两点之间的面积,这是受两点限制的函数的积分:
......@@ -512,7 +512,7 @@ ax.set_yticks([])
plt.show()
```
# 工作原理
## 工作原理
这是代码的说明:
......@@ -541,11 +541,11 @@ plt.show()
![](img/60779841-1cdf-45da-9536-ed2ea0507690.png)
# 定义自定义标记
## 定义自定义标记
在第 2 章和“基本绘图入门”中,我们学习了如何使用 Matplotlib 提供的预定义标记。 在这里,我们将学习如何定义我们自己的标记并使用它们绘制正弦曲线。
# 准备
## 准备
导入所需的库:
......@@ -554,7 +554,7 @@ import matplotlib.pyplot as plt
import numpy as np
```
# 操作步骤
## 操作步骤
以下是绘制每个标记的正弦曲线的代码:
......@@ -592,7 +592,7 @@ for i,marker in enumerate(custom_markers):
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -604,11 +604,11 @@ plt.show()
![](img/4e3d79eb-7d36-4f8d-b122-083b829881b2.png)
# 小数,常规数学表达式和符号
## 小数,常规数学表达式和符号
在本秘籍中,我们将学习如何将小数,二项式,符号和数学表达式嵌入绘图以及属性(例如标签和标题)。 在每个图上绘制的函数与其中嵌入的各种文本元素均不相关。 它们全部旨在演示如何在图上打印各种文本元素。
# 准备
## 准备
导入所需的库:
......@@ -617,7 +617,7 @@ import matplotlib.pyplot as plt
import numpy as np
```
# 操作步骤
## 操作步骤
下面的代码块连续绘制两个图表,每个图表中有两个函数,并且每个图表上都有各种文本元素:
......@@ -707,7 +707,7 @@ plt.tight_layout()
plt.show()
```
# 工作原理
## 工作原理
现在让我们看看这段代码是如何工作的:
......@@ -751,7 +751,7 @@ plt.show()
![](img/97cda4ab-fba5-4d94-b260-a87aa8fd06a2.png)
# 更多
## 更多
让我们举一个实际的例子,结合使用文本框和数学符号。
......@@ -823,7 +823,7 @@ plt.show()
![](img/2c573ca2-241b-4b8d-bbef-78d307057f72.png)
# 二维的词嵌入
## 二维的词嵌入
对于**自然语言处理****NLP**)应用,由于机器只能处理数字数据,因此需要以数字格式表示单词。 在数字数组中表示单词的过程称为“单词嵌入”,因为这些数组(单词表示形式)中的每一个都是 n 维空间中的一个点,其中`n`是维数/特征数(数组)代表每个单词。
......@@ -833,7 +833,7 @@ plt.show()
对于同一示例,我们还将在第 11 章和“使用 mplot3d 工具包”的 3D 图中看到三维表示形式和相应的图。
# 准备
## 准备
导入所需的库。 请注意,`pickle`是一个 Python 包,用于以二进制格式保存和检索文件。 我们将在这里使用它来加载以前保存的二维单词表示形式和一个单词字典,该单词字典将数字表示形式映射到将在绘图上显示的文本单词:
......@@ -842,7 +842,7 @@ import matplotlib.pyplot as plt
import pickle
```
# 操作步骤
## 操作步骤
以下步骤实现了所需的逻辑:
......@@ -892,7 +892,7 @@ ax.set_ylabel('Y')
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......
......@@ -9,17 +9,17 @@
* 管理 Web 应用的透明度
* 创建多页 PDF 报告
# 介绍
## 介绍
Matplotlib 创建的报告和仪表板可以以不同的方式使用。 它们可以在上游 Web 应用中使用,它们可以作为 PDF 文件分发,可以嵌入到 GUI 工具箱中,或者可以交互方式在线使用。
在本章中,我们将学习如何以各种格式保存报告,以便可以将它们分发给使用者以直接使用(例如 PDF 格式),也可以嵌入到其他应用(例如 GUI 工具箱)中。
# 以多种格式保存图形
## 以多种格式保存图形
Matplotlib 支持 PNG,SVG,SVGZ,PDF,PS 和 EPS 格式以保存图形。 我们需要在计算机上拥有各自的阅读器,才能查看这些输出格式。 在本秘籍中,我们将学习如何以所有这些格式保存直方图。
# 准备
## 准备
导入所需的库:
......@@ -28,7 +28,7 @@ import matplotlib.pyplot as plt
import numpy as np
```
# 操作步骤
## 操作步骤
以下代码块绘制了一个直方图,并将其保存为 Matplotlib 支持的所有格式:
......@@ -62,7 +62,7 @@ for extension in file_ext:
plt.show()
```
# 工作原理
## 工作原理
这是代码的说明:
......@@ -85,17 +85,17 @@ plt.show()
![](img/b11c8378-5878-4e7f-927d-a9b63e45f8ba.png)
# 更多
## 更多
`plt.savefig()`调用中,可以使用`facecolor``edgecolor`和许多其他选项来修改图形,然后再将其保存为所选格式。 我们将在以下秘籍中探讨其中一些内容。
默认情况下,Matplotlib 查看文件名中指定的文件扩展名,以决定图形需要保存的格式。 您也可以使用·参数指定输出格式,在这种情况下,它将忽略指定的文件扩展名,并以·参数指定的格式保存图形。 但是,当您尝试打开文件阅读器时,文件阅读器可能会与文件扩展名不匹配以及其实际保存格式混淆。
# 保存图形时避免截断
## 保存图形时避免截断
当您使用所有默认选项保存图形时,有时它可能会被截断。 在本秘籍中,我们将学习如何避免此类问题。
# 准备
## 准备
导入所需的库:
......@@ -104,7 +104,7 @@ import matplotlib.pyplot as plt
import numpy as np
```
# 操作步骤
## 操作步骤
以下代码块绘制了一个直方图,并使用`bbox_inches='tight'`参数将其保存为默认参数,然后添加`pad_inches=1`
......@@ -147,7 +147,7 @@ for extension in file_ext:
plt.show()
```
# 工作原理
## 工作原理
这是代码的解释:
......@@ -187,11 +187,11 @@ plt.show()
现在,您可以在框的所有侧面看到更多的空间。
# 保存部分图形
## 保存部分图形
有时,我们可能只想保存图形的一部分,尤其是当图形具有多个网格时。 在本秘籍中,我们将学习如何做。
# 准备
## 准备
导入所需的库:
......@@ -201,7 +201,7 @@ import matplotlib.pyplot as plt
from matplotlib.transforms import Bbox
```
# 操作步骤
## 操作步骤
以下代码块在同一图中的两个轴域上绘制了极坐标图和直方图。 然后,它分别保存每个图,以演示保存图的一部分而不是整个图:
......@@ -268,7 +268,7 @@ plt.show()
plt.close()
```
# 工作原理
## 工作原理
这是代码的说明:
......@@ -294,7 +294,7 @@ plt.close()
![](img/f999c538-0191-4ad2-b1f3-e8f086f17cc9.png)
# 管理图像分辨率
## 管理图像分辨率
当输出文件中的图形需要打印在纸上时,打印输出的质量很重要。 关于照片购物的详细说明超出了本书的范围,但在这里我们将进行足够的介绍,以了解可用的参数,同时保存会影响打印输出质量的图形。
......@@ -308,7 +308,7 @@ plt.close()
`plt.savefig()`方法具有`dpi`参数,该参数与图形大小一起以像素数确定图像(图形)的大小。 在这里,DPI 是错误的称呼; 理想情况下,它应该是 PPI。
# 准备
## 准备
导入所需的库:
......@@ -317,7 +317,7 @@ import matplotlib.pyplot as plt
import numpy as np
```
# 操作步骤
## 操作步骤
以下代码块绘制了一个直方图,并保存了两个不同的`dpi`参数以进行比较:
......@@ -358,7 +358,7 @@ plt.savefig('histogram_100.png', dpi=100)
plt.show()
```
# 工作原理
## 工作原理
这是代码的说明:
......@@ -376,11 +376,11 @@ plt.show()
应该注意的是,与我们之前用`dpi=300``figsize=(6, 4)`保存的图形相比,刻度标签和网格线已经变得更小。 当您在较小的区域上展开相同数量的像素(宽度和高度)时,像素的密度将很高,质量也将很高。 因此,在创建和保存图形时,请选择图形大小和 DPI 设置以根据所需打印输出的质量为图形的宽度和高度创建尽可能多的像素。 宽度和高度的像素数越高,打印输出的质量越好。
# 管理 Web 应用的透明度
## 管理 Web 应用的透明度
通常,Matplotlib 绘图和图形默认情况下具有白色背景,可以使用`facecolor`参数将其更改为我们想要的任何颜色。 如果我们必须将这些数字嵌入到其他任何应用中,则该背景色将保留下来。 但是,Matplotlib `savefig()`方法提供了一个选项,可以使用透明参数来保存没有此背景色的图形。 在本秘籍中,我们将学习如何使用此选项。
# 准备
## 准备
我们将绘制四个图,将它们保存为普通模式和透明选项,然后将其嵌入 HTML 页面中以查看它们的外观。
......@@ -392,7 +392,7 @@ import numpy as np
import pandas as pd
```
# 操作步骤
## 操作步骤
以下代码块绘制了四个图形,并将它们保存为`.png`格式:
......@@ -485,7 +485,7 @@ plt.savefig('iris_Transparent.png', dpi=300, transparent=True)
plt.show()
```
# 工作原理
## 工作原理
所有这些图对我们来说已经很熟悉了,因此无需解释绘制它们的代码。 但是,以下是保存绘图的代码的说明:
......@@ -508,11 +508,11 @@ plt.show()
在第二个 HTML 页面中,绘图没有任何背景色,因此 HTML 背景颜色在每个绘图中均可见。
# 创建多页 PDF 报告
## 创建多页 PDF 报告
在本秘籍中,我们将学习如何创建包含多张包含多个图形的多页 PDF 文档。 如果您必须为特定用户或部门创建一堆报告并将其作为一个文档发送,这将很方便。
# 准备
## 准备
我们将创建三个图形,每个图形有两个图,并将每个图形放置在 PDF 文档的一页中。
......@@ -527,7 +527,7 @@ import matplotlib.pyplot as plt
import calendar
```
# 操作步骤
## 操作步骤
以下代码块绘制了所需的图表,并将它们作为三个单独的页面保存到 PDF 文档中。 所有这些图都已在较早的章节中使用过,因此绘制每个图的细节已经为您所熟悉。 在这里,重点是如何排列这些图表以将其保存在 PDF 文档的各个页面中:
......@@ -693,7 +693,7 @@ with PdfPages('pdf_reports.pdf') as pdf:
Set_Doc_Properties()
```
# 工作原理
## 工作原理
这是代码的说明:
......
此差异已折叠。
......@@ -10,7 +10,7 @@
* 使用嵌入在 Matplotlib 应用中的 Qt GUI 的滑块和按钮小部件
* 将 Matplotlib 嵌入 Qt GUI 应用中
# 介绍
## 介绍
GUI 本身是一个非常大的主题,每个 GUI 框架/工具包都需要单独的一本书来全面地介绍它。 因此,对每个 GUI 框架功能的详细讨论超出了本书的范围。 此处的目的是演示某些 GUI 框架如何利用 Matplotlib 的可视化功能。
......@@ -22,7 +22,7 @@ GUI 本身是一个非常大的主题,每个 GUI 框架/工具包都需要单
Matplotlib 支持许多 GUI 框架。 我们基于 Tkinter,wxPython 和 Qt 的流行程度以及它们带有标准发行版(例如 Anaconda)的事实选择了 Tkinter,wxPython 和 Qt,因此与其他 GUI 框架不同,不需要进一步的安装和配置。 但是,Matplotlib 接口类似于所有 GUI 框架,因此从这三个 GUI 框架中学习可以轻松扩展到其他 GUI 框架。
# Matplotlib 和 GUI 应用之间的接口
## Matplotlib 和 GUI 应用之间的接口
在继续具体秘籍之前,重要的是了解内部工作原理,了解 Matplotlib 和, 后端 GUI 工具包有效。 这使您更容易理解三种操作模式之间的区别:
......@@ -46,7 +46,7 @@ Matplotlib 中的以下三个对象与该接口有关:
在第三种操作模式中,由于两个原因,我们将完全消除对`pyplot`的使用,从而彻底取消对`FigureManager`的使用。 首先,默认情况下`pyplot`假定打开和关闭应用,而在这种模式下,我们需要 GUI 来控制应用流。 其次,`FigureManager`的所有功能都是现在由 GUI 应用控制。 因此,在这种模式下,GUI 工具包功能控制着应用的打开,关闭以及 GUI 工具包与 Matplotlib 之间的交互。 这些功能因一个 GUI 工具箱的不同而异,因此没有通用的语法或代码。
# 使用 Matplotlib 的滑块和按钮小部件
## 使用 Matplotlib 的滑块和按钮小部件
我们在上一章中学习了 Matplotlib 的`Button`小部件,但是滑块是一个新的小部件,我们将在这里学习。 但是,此秘籍的目的是演示如何仅通过更改后端即可在不进行任何代码更改的情况下跨 GUI 框架使用 Matplotlib 小部件应用。 我们还将在所有 GUI 框架中使用相同的极坐标图,以便我们可以看到它们工作方式上的差异,而不是迷失在图本身的细节中!
......@@ -54,7 +54,7 @@ Matplotlib 中的以下三个对象与该接口有关:
我们将使用`Quit`按钮通过关闭图形对象和窗口对象来退出应用。
# 准备
## 准备
让我们设置要使用的后端。 这是为不同的 GUI 框架更改的唯一代码,以跨,三个选定的 GUI 框架来运行此绘图:
......@@ -70,7 +70,7 @@ import matplotlib.pyplot as plt
from matplotlib.widgets import Button, Slider
```
# 操作步骤
## 操作步骤
这是编码所需逻辑的所需步骤:
......@@ -147,7 +147,7 @@ exit.on_clicked(close)
plt.show()
```
# 工作原理
## 工作原理
这是代码的说明:
......@@ -172,11 +172,11 @@ plt.show()
![](img/99df5e58-a805-4bcb-b91f-a240f2db328d.png)
# 使用 Tkinter GUI 的滑块和按钮小部件
## 使用 Tkinter GUI 的滑块和按钮小部件
在本秘籍中,我们将学习如何使用,Tkinter GUI 的滑块和按钮小部件代替 Matplotlib 小部件。 该绘图的功能与先前秘籍的完全相同。 Matplotlib 仍具有程序控制流程,我们仍将使用`plt.figure()`来调用,后端和关联的小部件。 此外,我们将调用 Tkinter 的`tk.Scale`缩放器和`tk.Button`按钮小部件,带有关联的回调函数,代替了我们在前面的秘籍中使用的 Matplotlib 的滑块和按钮小部件。
# 准备
## 准备
设置后端:
......@@ -193,7 +193,7 @@ import numpy as np
import matplotlib.pyplot as plt
```
# 操作步骤
## 操作步骤
以下是实现逻辑所需的步骤:
......@@ -279,7 +279,7 @@ button.pack(side=tk.BOTTOM)
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -317,11 +317,11 @@ plt.show()
![](img/de2c80c6-65fd-4f58-bf5a-7f352b2ed3a0.png)
# 将 Matplotlib 嵌入到 Tkinter GUI 应用中
## 将 Matplotlib 嵌入到 Tkinter GUI 应用中
在本秘籍中,我们将学习如何将 Matplotlib 嵌入到 Tkinter GUI 应用中。 在这里,应用流程的控制将通过 Tkinter 进行。 在这里,我们将不使用, `pyplot`模块和相关的`plt.figure()`方法。 相反,我们调用 Tkinter 应用并将 Matplotlib 的画布作为小部件嵌入。
# 准备
## 准备
在这里,我们将不会设置后端,因为应用本身将从 GUI 的启动。
......@@ -335,7 +335,7 @@ from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk)
```
# 操作步骤
## 操作步骤
以下是实现逻辑要遵循的步骤:
......@@ -418,7 +418,7 @@ button.pack(side=tk.BOTTOM)
tk.mainloop()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -448,13 +448,13 @@ tk.mainloop()
![](img/90cbe6b1-0b9b-4303-ad86-ecf896202263.png)
# 使用 WxPython GUI 的滑块和按钮小部件
## 使用 WxPython GUI 的滑块和按钮小部件
在本秘籍中,我们将学习如何使用 wxPython 的滑块和按钮小部件代替 Matplotlib 小部件,就像我们使用 Tkinter 小部件一样。
wxPython 是 wxWidgets 模块的包装。 它还与标准 Python 发行版(如 Anaconda)打包在一起。
# 准备
## 准备
将后端设置为`wxAgg`
......@@ -471,7 +471,7 @@ import numpy as np
import matplotlib.pyplot as plt
```
# 操作步骤
## 操作步骤
以下是实现所需逻辑的步骤:
......@@ -552,7 +552,7 @@ sizer.Insert(2, n_slider, 0, wx.ALIGN_RIGHT)
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -594,11 +594,11 @@ plt.show()
![](img/7084b34e-0905-4c8a-8ba4-a53b8aba36f3.png)
# 将 Matplotlib 嵌入到 wxPython GUI 应用中
## 将 Matplotlib 嵌入到 wxPython GUI 应用中
在本秘籍中,我们将学习如何在 wxPython GUI 应用中嵌入 Matplotlib 图。 我们将使用与本章相同的数据和绘图。
# 准备
## 准备
导入所需的库:
......@@ -610,7 +610,7 @@ from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
from matplotlib.backends.backend_wxagg import NavigationToolbar2WxAgg
```
# 操作步骤
## 操作步骤
以下是实现逻辑所需的步骤:
......@@ -725,7 +725,7 @@ window.Show()
app.MainLoop()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -763,13 +763,13 @@ app.MainLoop()
![](img/3165cd55-b76d-4159-b5ab-6d2d9396a894.png)
# 使用 Qt GUI 的滑块和按钮小部件
## 使用 Qt GUI 的滑块和按钮小部件
在本秘籍中,我们将学习如何利用, Qt GUI 滑块和按钮小部件代替 Matplotlib 小部件。 此代码以及和下一个秘籍中的代码均适用于, Qt4 和 Qt5 GUI 版本。
Qt GUI 非常类似于,`wxPython` GUI。 我们将使用`QHBoxLayout``QVBoxLayout`代替和`sizer`; 代替`fig.canvas.manager.window`,我们将拥有`fig.canvas.setLayout`; 并以`connect`代替`Bind`
# 准备
## 准备
1. 将后端设置为`Qt5`
......@@ -790,7 +790,7 @@ else:
from matplotlib.backends.backend_qt4agg import FigureCanvas
```
# 操作步骤
## 操作步骤
以下是实现逻辑的步骤:
......@@ -886,7 +886,7 @@ fig.canvas.setLayout(vbox)
plt.show()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......@@ -922,11 +922,11 @@ plt.show()
![](img/74290ed2-5bc5-4b8b-9dbe-f6afc18b4dab.png)
# 将 Matplotlib 嵌入到 Qt GUI 应用中
## 将 Matplotlib 嵌入到 Qt GUI 应用中
在本秘籍中,我们将学习如何在`Qt` GUI 应用中嵌入 Matplotlib 画布。
# 准备
## 准备
导入所需的库:
......@@ -947,7 +947,7 @@ else:
as NavigationToolbar)
```
# 操作步骤
## 操作步骤
以下是实现逻辑的步骤:
......@@ -1057,7 +1057,7 @@ window.show()
qApp.exec_()
```
# 工作原理
## 工作原理
这是前面代码的解释:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册