pyplot 模块是命令式函数的集合,允许你与 MATLAB 大致相同的方式使用 matplotlib。每个 pyplot 函数都适用于对象
Figure
并允许对其进行修改。例如,有创建对象Figure
、创建施工区域、表示线、添加标签等功能。pyplot 依赖于状态(
stateful
)。它跟踪对象Figure
及其构建区域的状态。函数在当前对象上执行。
简单的交互式图表
为了熟悉matplotlib 库和 pyplot 本身,让我们开始创建一个简单的交互式绘图。在 matplotlib 中,这个操作非常简单。三行代码就够了。
但首先您需要导入包pyplot
并将其指定为plt
.
import matplotlib.pyplot as plt
在 Python 中,通常不需要构造函数。一切都是隐含定义的。因此,当您导入一个包时,已经创建了一个plt
具有所有图形功能的实例,可以开始使用了。你只需要使用一个函数plot()
来传递你想要绘制的函数。
因此,传递需要表示为整数序列的值就足够了。
plt.plot([1,2,3,4])
plt.show()
可以设置多个属性。其中之一是标题,它是通过title()
.
plt.axis([0,5,0,20])
plt.title('My first plot')
plt.plot([1,2,3,4],[1,4,9,16],'ro')
plt.show()
matplotlib 和 NumPy
甚至 matplot 这个完全图形化的库也是基于 NumPy 的。您已经看到了如何将列表作为参数传递的示例。这对于呈现数据和设置轴的边界都是必要的。在内部,这些列表被转换为NumPy 数组。
这样您就可以直接添加 NumPy 数组作为输入。由 pandas 处理的数据数组可以供 matplotlib 使用,无需进一步处理。
例如,考虑如何将三种趋势转移到一张图表中。让我们sin
从模块中获取一个函数math
。后者必须首先导入。要沿正弦曲线生成点,您需要使用 NumPy 库。让我们使用函数 沿 x 轴生成一组点arrange()
,对于轴,我们将y
使用函数map()
。在它的帮助下,它可以应用于sin()
数组的所有元素(没有循环for
)。
import math
import numpy as np
t = np.arange(0,2.5,0.1)
y1 = np.sin(math.pi*t)
y2 = np.sin(math.pi*t+math.pi/2)
y3 = np.sin(math.pi*t-math.pi/2)
plt.plot(t,y1,'b*',t,y2,'g^',t,y3,'ys')
plt.show()
正如在上图中所看到的,该图表表示具有不同颜色和标签的三种不同趋势。在这种情况下,当函数的趋势很明显时,图形并不是最合适的表示——最好使用线条。要使用不仅仅是颜色来分隔它们,可以使用由点和连字符组合而成的图案。
plt.plot(t,y1,'b--',t,y2,'g',t,y3,'r-.')
plt.show()
使用参数linewidth
,您可以更改线条的粗细。
plt.plot([1,2,4,2,1,0,1,2,1,4], linewidth=2.0)
plt.show()
使用多个图形和轴
到目前为止,所有 pyplot 命令都专注于在单个对象内绘图。但 matplotlib 允许您同时管理多个Figure
,并且在一个对象内可以显示子图。
使用 pyplot 时,需要牢记当前对象Figure
和当前轴(对象上的图形)的概念。
此外,还有一个示例,其中一个上有两个子图表Figure
。该函数subplot()
除了将对象划分为不同的区域进行绘制外,还用于将命令集中在特定的子图上。
传递的参数subplot()
指定拆分模式并确定当前子图。该时间表将是唯一受团队影响的时间表。函数参数subplot()
由三个整数组成。第一个确定对象应垂直分割成的部分数量。二是横向划分。第三个数字表示与命令相关的当前子图表。
接下来,将显示正弦趋势(正弦和余弦),最好将画布垂直分成两个水平子图。数字 211 和 212 被转移到图表中。
t = np.arange(0,5,0.1)
y1 = np.sin(2*np.pi*t)
y2 = np.sin(2*np.pi*t)
plt.subplot(211)
plt.plot(t,y1,'b-.')
plt.subplot(212)
plt.plot(t,y2,'r--')
plt.show()
现在,对两个垂直子图执行相同的操作。我们将 121 和 122 作为参数传递。
t = np.arange(0.,1.,0.05)
y1 = np.sin(2*np.pi*t)
y2 = np.cos(2*np.pi*t)
plt.subplot(121)
plt.plot(t,y1,'b-.')
plt.subplot(122)
plt.plot(t,y2,'r--')
plt.show()
在图表中添加两个标签。他们将描述每个轴上的值的类型。
plt.axis([0,5,0,20])
plt.title('My first plot')
plt.xlabel('Counting')
plt.ylabel('Square values')
plt.plot([1,2,3,4],[1,4,9,16],'ro')
plt.show()
借助关键字,可以更改文本的特征。例如,可以通过选择不同的字体并增加其大小来更改标题。还可以更改轴标签的颜色以突出显示整个图表的标题。
plt.axis([0,5,0,20])
plt.title('My first plot', fontsize=20, fontname='Times New Roman')
plt.xlabel('Counting', color='gray')
plt.ylabel('Square values',color='gray')
plt.plot([1,2,3,4],[1,4,9,16],'ro')
plt.show()
为图表的每个点添加一个标签。由于函数中的前两个参数是坐标,因此沿轴的所有点的坐标y
都会略有偏移。
plt.axis([0,5,0,20])
plt.title('My first plot', fontsize=20, fontname='Times New Roman')
plt.xlabel('Counting', color='gray')
plt.ylabel('Square values',color='gray')
plt.text(1,1.5,'First')
plt.text(2,4.5,'Second')
plt.text(3,9.5,'Third')
plt.text(4,16.5,'Fourth')
plt.plot([1,2,3,4],[1,4,9,16],'ro')
plt.show()
plt.axis([0,5,0,20])
plt.title('My first plot', fontsize=20, fontname='Times New Roman')
plt.xlabel('Counting', color='gray')
plt.ylabel('Square values',color='gray')
plt.text(1,1.5,'First')
plt.text(2,4.5,'Second')
plt.text(3,9.5,'Third')
plt.text(4,16.5,'Fourth')
plt.text(1.1,12,r'$y = x^2$', fontsize=20, bbox={'facecolor':'yellow','alpha':0.2})
plt.plot([1,2,3,4],[1,4,9,16],'ro')
plt.show()
还允许使用关键字来完成图形文本。例如,您可以添加描述趋势的公式和彩色框。
plt.axis([0,5,0,20])
plt.title('My first plot', fontsize=20, fontname='Times New Roman')
plt.xlabel('Counting', color='gray')
plt.ylabel('Square values',color='gray')
plt.text(1,1.5,'First')
plt.text(2,4.5,'Second')
plt.text(3,9.5,'Third')
plt.text(4,16.5,'Fourth')
plt.text(1.1,12,r'$y = x^2$', fontsize=20, bbox={'facecolor':'yellow','alpha':0.2})
plt.grid(True)
plt.plot([1,2,3,4],[1,4,9,16],'ro')
plt.show()
还可以在图表中添加网格。为了更好地理解图表上每个点的位置,这通常是必要的。
这是一个简单的操作。grid()
使用函数,作为参数传递就足够了True
。
plt.axis([0,5,0,20])
plt.title('My first plot', fontsize=20, fontname='Times New Roman')
plt.xlabel('Counting', color='gray')
plt.ylabel('Square values',color='gray')
plt.text(1,1.5,'First')
plt.text(2,4.5,'Second')
plt.text(3,9.5,'Third')
plt.text(4,16.5,'Fourth')
plt.text(1.1,12,r'$y = x^2$', fontsize=20, bbox={'facecolor':'yellow','alpha':0.2})
plt.grid(True)
plt.plot([1,2,3,4],[1,4,9,16],'ro')
plt.legend(['First series'])
plt.show()
图表还必须有图例。pyplot 提供了legend()
添加此元素的功能。
需要将字符串传递给将在图例中显示的函数。在此示例中,文本First series
表征了输入的数据数组。
import matplotlib.pyplot as plt
plt.axis([0,5,0,20])
plt.title('My first plot', fontsize=20, fontname='Times New Roman')
plt.xlabel('Counting', color='gray')
plt.ylabel('Square values',color='gray')
plt.text(1,1.5,'First')
plt.text(2,4.5,'Second')
plt.text(3,9.5,'Third')
plt.text(4,16.5,'Fourth')
plt.text(1.1,12,r'$y = x^2$', fontsize=20, bbox={'facecolor':'yellow','alpha':0.2})
plt.grid(True)
plt.plot([1,2,3,4],[1,4,9,16],'ro')
plt.plot([1,2,3,4],[0.8,3.5,8,15],'g^')
plt.plot([1,2,3,4],[0.5,2.5,4,12],'b*')
plt.legend(['First series','Second series','Third series'], loc=2)
plt.show()
默认情况下,图例添加在右上角。要更改此行为,您需要使用多个关键字参数。因此,要选择一个位置,只需传递一个值从 0 到 10 的参数就足够了loc
。每个数字都表示一个角。值 1 为默认值,即右上角。在以下示例中,我们将图例移动到左上角,使其不与图表上的点相交。
职位代码 | 位置 |
---|---|
0 | 最好的 |
1 | 右上角 |
2 | 左上角 |
3 | 左下角 |
4 | 右下角 |
5 | 案件 |
6 | 左中 |
7 | 就在中心 |
8 | 底部中心 |
9 | 顶部中心 |
10 | 在中心 |