基础绘图
在本课中,我们将讨论 plot 命令的基本用法以及如何保存图形。
Python 的二维和三维绘图库 Matplotlib 可以在多种格式和交互环境中生成高质量的图表。使用该库,你可以创建简单的图表、条形图、散点图、等高线图、误差图等。Matplotlib 让这些操作变得非常简单,因为它易于上手。它还支持 LaTeX 格式的标签和文本。
使 Matplotlib 非常适合用于生成科学出版物图表的原因是,图表的所有方面都可以通过编程方式精确控制。这对于可重现性非常重要,同时也方便在需要使用更新的数据重新生成图表或更改其外观时进行操作。
子模块 matplotlib.pyplot 为绘图库提供了面向对象的接口。
在本课程中,我们将按照标准别名plt导入matplotlib.pyplot模块。
1import matplotlib.pyplot as plt
一个简单的例子
plot 函数接受两个输入数组,按顺序为 plot(xdata, ydata),并将 xdata 的每个元素与其对应的 ydata 进行绘制。
xdata和ydata的长度必须相等。
让我们从一个基本的绘图示例开始:
1import numpy as np 2import matplotlib.pyplot as plt 3 4x = np.linspace(0, 2, 100) 5y = x ** 2 6fig = plt.figure(figsize=(10, 5), dpi=100) 7ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) #add_axes([底部 x, 底部 y, 宽度, 高度]) 8ax1.plot(x, y, 'b') 9ax1.set_xlabel('x') 10ax1.set_ylabel('y') 11ax1.set_title('Example figure');
请注意,我们仅用一行代码 y = x ** 2 就计算了 100 个 y 值。当对数组执行数学运算时,Python 会像处理普通变量一样对待数组。数学运算会直接应用于数组中的每一个值,并且运行速度远快于逐个单独计算。
第 4 行我们生成了 x 轴的数据,第 5 行我们生成了 y 轴的数据。
绘图特性是对象。
到目前为止,我们所使用的所有绘图命令都是 matplotlib 包的一部分函数。不出所料,matplotlib 具有面向对象的设计。可以通过利用面向对象结构来创建图表。这需要多写一些代码,但最终我们获得了极大的灵活性。
使用面向对象语法时,我们首先创建一个 figure 对象,并使用 figsize 关键字参数指定大小。figsize 是一个包含图形宽度和高度(单位为英寸)的元组。我们还添加了 dpi(每英寸点数)。在上面的例子中,我们创建了一个 10×5 单位的图形,由于分辨率为 100 dpi,因此相当于 1000×500 像素。
然后,我们通过指定轴在图形中的 相对 位置,使用 add_axes 命令向图形添加一个坐标轴(注意是 axes 带 e)。左边界、底边、宽度和高度均以相对坐标表示(水平和垂直方向均从 0 到 1)。要进行绘图,我们使用坐标轴的 plot 方法。我们稍后将详细讨论此命令。
对于科学用途,必须为图形的坐标轴添加标签并提供标题。这可以通过第 9 至 11 行的基本命令完成。
plot 的参数
plot 接受大量 关键字参数。关键字参数是可选的参数,可以附加到函数中。
-
plot可以仅使用一个参数,如plot(y),它将y值沿垂直轴绘制,并从 0 开始枚举水平轴。 -
plot(x, y)绘制y对x, -
plot(x, y, formatstring)使用formatstring中定义的颜色和标记绘制y对x,其中formatstring可以:-
定义
color,例如b表示蓝色,r表示红色,g表示绿色。 -
定义
linetype,-表示实线,--表示虚线,:表示点线。 -
定义
marker,例如o表示圆形,s表示方形。你甚至可以组合它们:r--表示红色虚线,而go表示绿色圆形标记。
-
1plot(x, y, color='g', marker='o', linestyle='-', linewidth=4, markersize=15)
🛑 关键字参数可以任意顺序给出,但所有关键字参数必须放在常规参数之后。
plot(linewidth=6, [1, 2, 3], [2, 4, 3])会报错。
完整的选项列表可通过代码沙盒中的 help("matplotlib.pyplot.plot") 命令获取。
1import matplotlib.pyplot as plt 2 3help("matplotlib.pyplot.plot")
在第 8 行配置参数,以生成不同版本的图形。
1import numpy as np 2import matplotlib.pyplot as plt 3 4x = np.linspace(0, 2 *np.pi , 100) 5y = np.sin(x) 6fig = plt.figure(figsize = (10, 5)) 7ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) 8ax1.plot(x, y, color='g', marker='o', linestyle='-', linewidth=4, markersize=15) 9ax1.set_xlabel('x') 10ax1.set_ylabel('y') 11ax1.set_title('y = sin(x)');
下一课将在此课程中包含关于保存图形的重要说明。