plot
函数的功能
plot
函数是matplotlib
中最常见的绘图函数,作用是以x
为自变量y
为因变量绘制的带结点标记的线条或以x,y
为坐标的坐标点(Plot y versus x as lines and/or markers)。
下面通过实例简单演示plot
函数的功能。
根据下图可知,plot
函数可以绘制带结点标记的线,也可以线和标记点任选其一。
plot
函数相当于根据y=f(x)
关系,先以x,y
为坐标绘制结点,然后用直线连接结点。
import numpy as np
import matplotlib.pyplot as plt
plt.subplot(221)
# 带标记点的线
plt.plot([1, 2, 3, 4], [1, 4, 9, 16], marker='o')
plt.subplot(222)
# 只有线,没有标记点
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.subplot(223)
# 没有线,只有标记点
plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'o')
plt.subplot(224)
# 绘制y=sin(x)线
x = np.arange(-4,4,0.05)
y = np.sin(x)
plt.plot(x, y)
plt.show()
plot
函数中x
,y
参数的基本取值
plot
函数的基本调用签名为plot([x], y, [fmt], *, data=None, **kwargs)
x
,y
参数即为线条结点或坐标点的x,y
坐标。x
,y
参数取值非常灵活,这也是plot
函数的一大特色。
x
,y
参数可以是标量,也可以是类似数组的数据结构(列表,numpy数组,pandas dataframe等),通常为1维数组,数组的维度最好一致。
import numpy as np
import matplotlib.pyplot as plt
plt.subplot(221)
# xy为标量
plt.plot(1, 2, marker='o')
plt.subplot(222)
# xy为列表
plt.plot([1, 2, 3, 4], [1, 4, 9, 16], marker='o')
plt.subplot(223)
# xy为numpy数组
x = np.arange(-4,4,0.5)
y = np.sin(x)
plt.plot(x, y)
plt.subplot(224)
# xy在第一维度上必须一致
plt.plot([1, 2, 3, 4], [[1], [4], [9],[16]], 'o')
plt.show()
plot
函数中x
参数的默认值
根据plot
函数调用签名可知x
参数是可选的,默认值为range(len(y))
下面的案例中x
参数省略了,根据下图可知4个结点的x坐标为0,1,2,3
,符合range(len([1, 2, 3, 4]))
的取值。
import matplotlib.pyplot as plt
# 只有y参数,x默认为range(len(y))
plt.plot([1, 2, 3, 4],marker='o')
plt.show()
plot
函数中x
,y
为带标签的数据
plot
函数的基本调用签名为plot([x], y, [fmt], *, data=None, **kwargs)
带标签的数据可以理解为可以用data['i']
方式访问的数据,可以是字典、pandas dataframe、numpy数组等。这时x
,y
参数的即为data
参数值对应的标签数据。
下面以字典为例简单说明如何使用带标签的数据。
import matplotlib.pyplot as plt
# d为带标签的数据
d = {'x': [1, 2, 3], 'y': [1, 2, 3]}
# x,y参数分别为d['x'],d['y'],data参数为d
plt.plot('x', 'y', data=d, marker='o')
plt.show()
对于dataframe来说,假设有一个表格,其中有很多列,每一个列有一个标签。当我们想使用其中的两列作图的时候,将表格整体传入,只要指定了标签,plot
函数就会帮自动把这两列取出来作图。
plot
函数绘制多组数据
plot
函数绘制多组数据有三种方法:
-
多次调用
plot
函数
例如:
plot(x1,y1)
plot(x2,y2)
-
在
plot
函数中调用多组x
,y
参数
例如:plot(x1,y1,x2,y2)
-
在
plot
函数中使用2维数组作为x
,y
参数
import numpy as np
import matplotlib.pyplot as plt
x1 = [1, 2, 3]
y1 = [1, 2, 3]
x2 = [4, 5, 6]
y2 = [4, 5, 6]
plt.figure(figsize=(9, 3.1))
# 多次调用plot函数
plt.subplot(131)
plt.plot(x1, y1)
plt.plot(x2, y2)
# 传递多组xy参数
plt.subplot(132)
plt.plot(x1, y1, x2, y2)
# 传递2维数组为xy参数,第1列为x,其余列为y
plt.subplot(133)
x = np.array([[0, 1, 2, 3],
[3, 4, 5, 6],
[6, 7, 8, 9],
[9, 10, 11, 12]])
plt.plot(x[:, 0], x[:, 1:])
plt.tight_layout()
plt.show()