✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。
🍎个人主页: 小嗷犬的博客
🍊个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。
🥭本文内容:Python Matplotlib库:基本绘图补充
@TOC
1.引言
上期我们讲了 Matplotlib 库的基本语法,并以折线图为例,绘制了我们的第一幅图表。(参见: Python 数据可视化:Matplotlib库的使用)这期我们来说说如何用 Matplotlib 库绘制其他常用图表。
2.散点图
plot()
是 Matplotlib 库中绘制折线图的方法,而绘制散点图,我们会使用scatter()
,它的语法格式如下:
plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs)
参数说明:
参数 | 说明 |
---|---|
x ,y |
长度相同的数组,也就是我们即将绘制散点图的数据点,输入数据。 |
s |
点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小。 |
c |
点的颜色,默认蓝色 'b',也可以是个 RGB 或 RGBA 二维行数组。 |
marker |
点的样式,默认小圆圈 'o'。 |
cmap |
Colormap,默认 None,标量或者是一个 colormap 的名字,只有 c 是一个浮点数数组的时才使用。如果没有申明就是 image.cmap。 |
norm |
Normalize,默认 None,数据亮度在 0-1 之间,只有 c 是一个浮点数的数组的时才使用。 |
vmin ,vmax |
亮度设置,在 norm 参数存在时会忽略。 |
alpha |
透明度设置,0-1 之间,默认 None,即不透明。 |
linewidths |
标记点的长度。 |
edgecolors |
颜色或颜色序列,默认为 'face',可选值有 'face', 'none', None。 |
plotnonfinite |
布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。 |
**kwargs |
其他参数。 |
代码实例:
统计各班身高体重分布:
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["SimHei"] # 设置字体为黑体
plt.rcParams["axes.unicode_minus"]=False # 防止负号乱码
plt.figure(figsize=(16, 9))
plt.suptitle("各班同学的身高体重分布图")
x1 = [60,42,56,44,60,38,55,48]
x2 = [61,51,55,46,81,44,66,51]
x3 = [70,45,75,60,63,58,71,49]
y1 = [163,153,164,156,165,156,168,157]
y2 = [170,159,171,159,171,160,172,161]
y3 = [178,165,178,165,180,168,180,168]
plt.subplot(221)
plt.scatter(x1,y1,c='b')
plt.title("一班")
plt.xlabel("体重")
plt.ylabel("身高")
plt.subplot(222)
plt.scatter(x2,y2,c='g')
plt.title("二班")
plt.xlabel("体重")
plt.ylabel("身高")
plt.subplot(223)
plt.scatter(x3,y3,c='r')
plt.title("三班")
plt.xlabel("体重")
plt.ylabel("身高")
plt.subplot(224)
plt.scatter(x1,y1,c='b')
plt.scatter(x2,y2,c='g')
plt.scatter(x3,y3,c='r')
plt.title("汇总图")
plt.xlabel("体重")
plt.ylabel("身高")
plt.legend(["一班","二班","三班"])
plt.show()
效果图:
3.柱状图
在
Matplotlib 库中,我们使用
bar()
方法来绘制柱状图,它的语法格式如下:
plt.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
参数说明:
参数 | 说明 |
---|---|
x |
浮点型数组,柱形图的 x 轴数据。 |
height |
浮点型数组,柱形图的高度。 |
width |
浮点型数组,柱形图的宽度。 |
bottom |
浮点型数组,底座的 y 坐标,默认 0。 |
align |
柱形图与 x 坐标的对齐方式,'center' 以 x 位置为中心,这是默认值。<br/> 'edge':将柱形图的左边缘与 x 位置对齐。<br/>要对齐右边缘的条形,可以传递负数的宽度值及 align='edge'。 |
**kwargs |
其他参数。 |
或者使用
barh()
绘制横向的柱状图,语法格式如下:
plt.barh(y, width, height=0.8, left=None, *, align='center', **kwargs)
参数说明:
参数 | 说明 |
---|---|
y |
浮点型数组,柱形图的 y 轴数据。 |
width |
浮点型数组,柱形图的宽度。 |
height |
浮点型数组,柱形图的高度。 |
left |
浮点型数组,底座的 x 坐标,默认 0。 |
align |
柱形图与 y 坐标的对齐方式,'center' 以 y 位置为中心,这是默认值。<br/> 'edge':将柱形图的左边缘与 y 位置对齐。<br/>要对齐上边缘的条形,可以传递负数的宽度值及 align='edge'。 |
**kwargs |
其他参数。 |
代码实例:
对比参赛人员的表现分:
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"] # 设置字体为黑体
plt.rcParams["axes.unicode_minus"] = False # 防止负号乱码
plt.figure(figsize=(8, 7))
plt.suptitle("参赛人员的表现分")
people = ('Tom', 'Dick', 'Harry', 'Slim', 'Jim')
performance = (4, 5, 8, 3, 6)
plt.bar(people, performance)
plt.show()
效果图:
4.火柴图
在
Matplotlib 库中,我们可以使用
stem()
方法来绘制火柴图,它的语法格式如下:
plt.stem([locs,] heads, linefmt=None, markerfmt=None, basefmt=None)
参数说明:
参数 | 说明 |
---|---|
locs |
对于垂直火柴图,为火柴的 x 坐标。对于水平火柴图,为火柴的 y 坐标。 |
heads |
对于垂直火柴图,为火柴的 y 坐标。对于水平火柴图,为火柴的 x 坐标。 |
linefmt |
线条格式字符,可指定线条的颜色和样式。 |
markerfmt |
标记格式字符,可指定火柴头的颜色和样式。 |
basefmt |
基线格式字符,可指定基线的颜色和样式。 |
orientation |
默认为 'vertical',如果为 'vertical',将生成垂直火柴图,否则将生成水平火柴图。 |
bottom |
默认为0,基线的 y/x 坐标(取决于方向)。 |
label |
图例中火柴的标签。 |
代码实例:
对比参赛人员的表现分:
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"] # 设置字体为黑体
plt.rcParams["axes.unicode_minus"] = False # 防止负号乱码
plt.figure(figsize=(8, 7))
plt.suptitle("参赛人员的表现分")
x = ("张三", "李四", "王五", "赵六", "孙七")
y = (4, 5, 8, 3, 6)
plt.stem(x, y, linefmt="r-.",markerfmt="gs",basefmt="b-")
plt.show()
效果图:
5.阶梯图
在
Matplotlib 库中,我们可以使用
step()
方法来绘制阶梯图,它的语法格式如下:
plt.step(x, y, [fmt], *, data=None, where='pre', **kwargs)
参数说明:
参数 | 说明 |
---|---|
x ,y |
节点的 x,y 坐标值。 |
fmt |
格式字符串,与plot() 方法的format_string 参数类似。 |
data |
两个Iterables,包含已标记数据的标签名称。 |
where |
设置阶梯所在位置,取值范围为{'pre', 'post', 'mid'},默认值为'pre'。 |
**kwargs |
同plot() 。 |
代码实例:
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"] # 设置字体为黑体
plt.rcParams["axes.unicode_minus"] = False # 防止负号乱码
plt.figure(figsize=(8, 7))
x = list(range(1, 6))
y = (4, 5, 8, 3, 6)
plt.step(x, y, "b-.s")
plt.show()
效果图:
6.填充
在
Matplotlib 库中,我们可以使用
fill_between()
方法来填充一段区间,它的语法格式如下:
plt.fill_between(x, y1, y2=0, where=None, interpolate=False, step=None, *, data=None, **kwargs)
参数说明:
参数 | 说明 |
---|---|
x |
节点的 x 坐标值。 |
y1 |
第一条曲线节点的 y 坐标值。 |
y2 |
第二条曲线节点的 y 坐标值。 |
where |
排除填充区间。 |
**kwargs |
其他参数。 |
代码实例:
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["SimHei"] # 设置字体为黑体
plt.rcParams["axes.unicode_minus"]=False # 防止负号乱码
plt.figure(figsize=(16, 9))
plt.suptitle("函数图")
f1 = lambda x:x**0.5
f2 = lambda x:x
f3 = lambda x:x**2
x = list(range(0,6))
y1 = [f1(i) for i in x]
y2 = [f2(i) for i in x]
y3 = [f3(i) for i in x]
plt.plot(x,y1,'b-v')
plt.plot(x,y2,'g--1')
plt.plot(x,y3,'r-.s')
plt.fill_between(x,y1,y2,color='b',alpha=0.2)
plt.fill_between(x,y2,y3,color='r',alpha=0.2)
plt.title("对比图")
plt.legend(["√x","x","x^2"])
plt.show()
效果图: