Matplotlib详解
相关教程
【Python】Numpy详解
【Python】Pandas详解
【Python】Matplotlib详解
一、Matplotlib介绍
数据分析三剑客之一的Matplotlib,是Python中的图形绘图库,即:Python中最常用的数据可视化库之一。它提供了丰富的绘图功能,使得用户可以轻松地创建各种类型的图表和可视化数据。
二、Matplotlib的安装及导入
-
Matplotlib安装:在终端处输入以下命令
pip install matplotlib
-
Matplotlib导入:大多数Matplotlib实用程序位于PyPlot子模块下,因此导入库格式:
import matplotlib.pyplot as plt
三、plot()函数介绍
plot()函数的基本格式:plt.plot(x, y, format_string, **kwargs)
x
和y
:【必要参数】,分别是横坐标和纵坐标的数据,可以是列表、数组等可迭代对象。如果只提供y
,则x
默认是从0
开始的整数序列。format_string
:【可选参数】,用于指定线条的格式,包括颜色、线型、标记等。例如,'r-'
表示红色实线,'bo'
表示蓝色圆点标记。**kwargs
:【可选参数】,用于更详细地设置线条的属性,如线宽、标记大小、颜色等。
在实际应用中,常见的参数类型主要有以下几种【额外配置】:
-
color:设置线条颜色,默认为蓝色。
-
linestyle:设置线条样式,默认为实线。
-
marker:设置数据点的符号【标记】,默认为
圆形
。注意:可以添加
ms参数
表示标记的大小,mec参数
表示标记的颜色。如:plt.plot(x,y,marker=‘*’,ms=20,mec=“r”),【表示标记为星形,标记颜色为红色,标记大小为20】
-
linewidth:设置线条宽度,默认为1.0。
1)标记参数
一般用marker参数进行配置
标记
符号 标记类型 “o” 圆形 “*” 星形 “.” 像素点 “,” 像素点,比 '.'
更小“x” 叉号 “X” 实心叉号 “+” 加号 “P” 实心加号 “s” 正方形 “D” 菱形 “d” 瘦菱形 “p” 五边形 “h” 六边形 “^” 上三角形 “v” 下三角形 “<” 左三角形 “>” 右三角形 “1” 下三角(另一种样式) “2” 上三角(另一种样式) “3” 左三角(另一种样式) “4” 右三角(另一种样式) “l” 垂直线 “_” 水平线 2)线颜色参数
一般用color参数进行配置
颜色
符号 颜色 “r” 红色 “g” 绿色 “b” 蓝色 “y” 黄色 “c” 青色 “m” 品红色 “k” 黑色 “w” 白色 2)线条样式参数
一般用linestyle参数进行配置
线条样式
符号 线条类型 “-” 实线 “–” 虚线 “-.” 点划线 “:” 点线
四、常用汇总
4.1:函数总结
Matplotlib在绘制图形时,其最常用的场景:绘制点 和 绘制线。
方法名 | 说明 |
---|---|
plt.plot() | 绘制线性图表 |
plt.show() | 显示图表 |
plt.title() | 设置总标题(图表名称) 含有 loc参数 定位标题位置【标题】(left|right) |
plt.xlabel() | 设置x轴名称【标签】 |
plt.ylabel() | 设置y轴名称【标签】 |
plt.text() | 添加文本内容 如: plt.text(200,250,"y=x") ,表明在(200,250)出添加y=x 标记 |
plt.grid() | 显示网格 axis参数,其中axis='x’表明显示竖线,axis='y’表明显示横线 |
plt.legend() | 显示图列 |
plt.xticks() | 设置 x 轴刻度 |
4.2:中文字的配置项
可以通过以下【固定】配置来实现中文字的显示
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置显示中文字体
plt.rcParams['axes.unicode_minus'] = False # 设置正常显示符号
字体说明:
中文字体 | 说明 |
---|---|
‘SimHei’ | 中文黑体 |
‘Kaiti’ | 中文楷体 |
‘LiSu’ | 中文隶书 |
‘FangSong’ | 中文仿宋 |
‘YouYuan’ | 中文幼圆 |
STSong | 华文宋体 |
五、绘图操作
1)直线图
1.1:一般直线图
此处,我们将绘制一条从(0,6)至(0,250)的线。
# 1. 导入必要的库
import matplotlib.pyplot as plt
import numpy as np
# 2. 定义坐标数据
# 从位置 (0,0) 至位置 (6,250) 处绘画一条线
x=np.array([0,6]) # x轴:0~6
y=np.array([0,250]) # y轴:0~250
# 3. 绘制线
plt.plot(x,y)
# 4. 显示图表
plt.show()

1.2:直线图【额外配置】
在上述直线的基础上进行一些额外的配置:线颜色为红色,线条样式为点线,标记【点】为星型。
# 1. 导入必要的库
import matplotlib.pyplot as plt
import numpy as np
# 2. 定义坐标数据
# 从位置 (0,0) 至位置 (6,250) 处绘画一条线
x=np.array([0,6]) # x轴:0~6
y=np.array([0,250]) # y轴:0~250
# 3. 绘制线
# 额外配置【可选】:颜色为红色,线条样式为点线,标记【点】为星型
plt.plot(x,y,color="r",linestyle=":",marker="*")
# 4. 显示图表
plt.show()

2)曲线图
import matplotlib.pyplot as plt
import numpy as np
# 2. 定义坐标数据
x=np.arange(-10,11) # x轴:从-10~10(不包含11)
y= x**2 # y轴:关于x的二元一次函数
# 3. 绘制线
plt.plot(x,y)
# 4. 显示图表
plt.show()

3)折线图
3.1:一般折线图
绘制折线图,先从位置(1,3)到(2,8),然后到(6,1),最后到(8,10)。
# 导入必要的库
import matplotlib.pyplot as plt
import numpy as np
# 定义坐标数据
x=np.array([1,2,6,8]) # x轴
y=np.array([3,8,1,10]) # y轴
plt.plot(x,y) # 绘制线
plt.show() # 显示图表

3.2:折线图【标题与标签】
当我们需要显示中文标签时,需要添加:plt.rcParams['font.sans-serif'] = ['KaiTi']
进行中文配置。
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['KaiTi'] # 设置显示中文字体
plt.rcParams['axes.unicode_minus'] = False # 设置正常显示符号
# 定义坐标数据
x=np.array([80,85,90,95,100,105,110,115,120])
y=np.array([240,270,280,290,290,310,305,315,320])
plt.title("运动数据",loc="left") # 设置总标题(左对齐)
plt.xlabel("平均脉搏") # 设置x轴名称
plt.ylabel("卡路里消耗量") # 设置y轴名称
plt.plot(x,y) # 绘制线
plt.show() # 显示图表

4)无线图(点)【不推荐】
注意:【不推荐】此处的用法,通常使用散点图进行表示。
import matplotlib.pyplot as plt
import numpy as np
x=np.array([80,85,90,95,100,105,110,115,120])
y=np.array([240,270,280,290,290,310,305,315,320])
# 使用快捷字符串符号参数"o",表示“环”
plt.plot(x,y,'o')
plt.grid() # 显示网格
plt.show()

5)多表图
5.1:基本写法
通过subplot()函数,可以在一张图中绘制多个图。
subplot()函数
subplot()函数采用3个参数来描述图形的布局。
基本格式:
subplot(nrows, ncols, index, **kwargs)
参数讲解:
nrows
和ncols
分别表示子图的【行数】和【列数】,index
表示子图的位置索引,从左上角开始,从左到右、从上到下依次计数。例如:
subplot(2, 2, 1)
表示在一个 2 行 2 列的子图布局中创建第一个子图。
此处,我们绘制一个一行两列的多表图形,具体代码如下:
import matplotlib.pyplot as plt
import numpy as np
# 1、plot1
x=np.array([0,1,2,3])
y=np.array([3,8,1,10])
# 图有一行两列, 该子图是【第一个图】
plt.subplot(1,2,1)
plt.plot(x,y)
# 2、plot2
x=np.array([0,1,2,3])
y=np.array([10,20,30,40])
# 图有一行两列, 该子图是【第二个图】
plt.subplot(1,2,2)
plt.plot(x,y)
plt.show() # 显示图表

5.2:标题与大标题
可以使用title()函数
为每个子图添加标题;使用suptitle()函数
为整个多表图行添加大标题。
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置显示中文字体
plt.rcParams['axes.unicode_minus'] = False # 设置正常显示符号
# 1、plot1
x=np.array([0,1,2,3])
y=np.array([3,8,1,10])
# 图有一行两列, 该子图是【第一个图】
plt.subplot(1,2,1)
plt.plot(x,y)
plt.title("跑步数据") # 显示子图标题
# 2、plot2
x=np.array([0,1,2,3])
y=np.array([10,20,30,40])
# 图有一行两列, 该子图是【第二个图】
plt.subplot(1,2,2)
plt.plot(x,y)
plt.title("游泳数据") # 显示子图标题
plt.suptitle("我的运动") # 显示大标题
plt.show() # 显示图表

6)散点图
绘制散点图时,通常依赖plt.scatter()函数,该函数包含很多参数,具体如下:
- s参数:点的大小
- color|c参数:点的颜色,取值可以为[‘b’, ‘c’, ‘g’, ‘k’, ‘m’, ‘r’, ‘w’, ‘y’]
- alpha参数:点的透明度,取值为0~1
- marker参数:点的形状,默认状态下为“o”,常见的还有[‘v’, ‘>’, ‘<’, ‘*’, ‘s’, ‘p’, ‘h’, ‘x’, ‘+’]
import matplotlib.pyplot as plt
import numpy as np
# 定义坐标数据
x=np.array([5,3,6,1,4,2,7,9,8,13])
y=np.array([32,4,52,56,13,134,98,87,107,119])
# 绘制散点图(颜色为蓝色,大小为50,透明度为0.5)
plt.scatter(x,y,c="b",s=50,alpha=0.5)
# 显示图表
plt.show()

7)柱状图
我们一般通过plt.bar()函数来绘制柱状图。
基本格式:np.bar(x, y, width, bottom=None, *, align=‘center’, data=None, **kwargs)
参数 | 说明 |
---|---|
x | x轴的数据序列 |
y | y轴的数据序列 |
color | 柱状图填充的颜色 |
edgecolor | 图形边缘颜色 |
width | 柱状图的宽度(0~1)【默认0.8】,应用于垂直柱状图 |
barth | 柱状图的高度(0~1),应用于水平柱状图,类比修改垂直柱状图的宽度 |
label | 解释每个图形代表的含义 |
-
一般的柱形图
import matplotlib.pyplot as plt import numpy as np # 定义坐标数据 x=np.array(['A','B','C','D']) y=np.array([23,9,4,17]) # 绘制柱状图 plt.bar(x,y) # 显示图表 plt.show()
-
柱状图头部添加数据
import matplotlib.pyplot as plt import numpy as np x=np.array(['A','B','C','D']) y=np.array([23,9,4,17]) bars=plt.bar(x,y) # 在每个柱子顶部添加数据【固定写法】 for bar in bars: height = bar.get_height() # 获取柱子高度 # 在柱子顶部添加文本 plt.text(bar.get_x() + bar.get_width() / 2, height, str(height), ha='center', va='bottom') plt.show()
-
并行柱状图
import matplotlib.pyplot as plt import numpy as np # 1、定义两组数据的类别标签 x = np.array(['A', 'B', 'C', 'D']) # 第一组数据 y1 = np.array([23, 9, 4, 17]) # 第二组数据 y2 = np.array([15, 10, 8, 12]) # 2、设置柱子宽度 bar_width = 0.36 # 3、设置两组柱子的位置偏移量 index = np.arange(len(x)) # 3、绘制柱子 # 绘制第一组柱子 bars1 = plt.bar(index, y1, width=bar_width, label='Group 1') # 绘制第二组柱子,通过调整位置实现并排 bars2 = plt.bar(index + bar_width, y2, width=bar_width, label='Group 2') # 在柱子顶部添加数据【固定写法】 # 针对第一组柱子 for bar in bars1: height = bar.get_height() plt.text(bar.get_x() + bar.get_width() / 2, height, str(height), ha='center', va='bottom') # 针对第二组柱子 for bar in bars2: height = bar.get_height() plt.text(bar.get_x() + bar.get_width() / 2, height, str(height), ha='center', va='bottom') # 4、添加轴标签(x轴) plt.xticks(index + bar_width / 2, x) # 显示图列 plt.legend() plt.show()
-
水平柱状图
将bar()函数修改为barh()函数,并将其中的width参数改为height参数。
import matplotlib.pyplot as plt import numpy as np # 1、定义两组数据的类别标签 x = np.array(['A', 'B', 'C', 'D']) y1 = np.array([23, 9, 4, 17]) # 第一组数据 y2 = np.array([15, 10, 8, 12]) # 第二组数据 # 2、设置柱子宽度 bar_width = 0.36 # 3、设置两组柱子的位置偏移量 index = np.arange(len(x)) # 3、绘制柱子 # 绘制第一组柱子 bars1 = plt.barh(index, y1, height=bar_width, label='Group 1') # 绘制第二组柱子,通过调整位置实现并排 bars2 = plt.barh(index + bar_width, y2, height=bar_width, label='Group 2') # 4、添加轴标签(y轴) plt.yticks(index + bar_width / 2, x) # 显示图列 plt.legend() plt.show()
8)直方图
在绘制直方图时,一般用plt.hist()函数来创造直方图。
基本格式:plt.hist(x, bins=bins, color=”b”, histtype=’bar’,label=’label’, rwidth =rwidth)
具体各参数说明如下:
参数 | 说明 |
---|---|
x | 连续型数据的输入值 |
color | 柱体的颜色 |
label | 图例内容 |
rwidth | 柱体宽度 |
histtype | 柱体类型 |
bins | 用于确定柱体的个数或是柱体边缘范围 |
具体写法如下:
import matplotlib.pyplot as plt
import numpy as np
# 通过Numpy随机生成一个包含250个值的数组,其中值将集中在170,标准差为10
x=np.random.normal(170,10,250)
# 生成直方图
plt.hist(x)
# 显示图表
plt.show()

9)饼图
一般用plt.pie()函数来创造饼图。
基本格式:plt.pie(size,explode,labels,autopct,startangle,shadow,color)
函数
具体各参数说明如下:
参数 | 说明 |
---|---|
size | 各部分的百分比 |
labels | 每部分饼片的文本标签 |
colors | 设置每个柱体的颜色 |
shadow | 是否绘制饼片的阴影【True|False】 |
startangle | 起始角度,即:第一个饼片逆时针旋转的角度 |
autopct | 每部分饼片对应的数值百分比样式,固定形式:autopct="%1.1f%%" |
explode | 分离程度,即:设置距离圆心的距离【可视化】 |
-
一般饼图
import matplotlib.pyplot as plt import numpy as np labels=["Apples","Oranges","Bananas","Peaches"] # 标签 size=np.array([35,25,25,15]) # 各部分的百分比 plt.pie(size,labels=labels) plt.legend() # 图列 plt.show() # 显示图表
-
显示百分比样式饼图
import matplotlib.pyplot as plt import numpy as np labels=["Apples","Oranges","Bananas","Peaches"] # 标签 size=np.array([35,25,25,15]) # 各部分的百分比 # 起始角度为90度,显示百分比样式 plt.pie(size,labels=labels,autopct="%1.1f%%",startangle=90) plt.legend() # 图列 plt.show() # 显示图表
-
强调某几部分饼片的可视性(explode)
import matplotlib.pyplot as plt import numpy as np labels=["Apples","Oranges","Bananas","Peaches"] # 标签 size=np.array([35,25,25,15]) # 各部分的百分比 # 起始角度为90度,显示百分比样式,添加阴影,分离程度【可视化】 # 分离程度【可视化】:0表示不分离,0.2表示一定的分离 plt.pie(size,labels=labels,autopct="%1.1f%%",startangle=90, shadow=True, explode = [0.2,0,0.2,0]) plt.legend() # 图列 plt.show() # 显示图表