目录
Matplotlib基础绘图
(一)、pyplot绘图基础语法与常用参数
1、pyplot基础语法
(1) 创建画布与创建子图
函数/方法名称 |
函数/方法作用 |
plt.figure |
创建一个空白画布,可以指定画布大小、像素 |
figure.add_subplot() |
创建并选中子图,可以指定子图的行数、列数和选中图片的编号 |
(2) 添加画布内容
添加标题、添加坐标轴名称、绘制图形等步骤是并列的,是没有先后顺序的。
函数名称 |
函数作用 |
plt.title |
在当前图形中添加标题,可以指定标题的名称、位置、颜色、字体大小等参数 |
plt.xlabel |
在当前图形中添加x轴标签,可以指定位置、颜色、字体大小等参数 |
plt.ylabel |
在当前图形中添加y轴标签,可以指定位置、颜色、字体大小等参数 |
函数名称 |
函数作用 |
plt.xlim |
指定当前图形x轴的范围,只能确定一个数值区间,而无法使用字符串标识 |
plt.ylim |
指定当前图形y轴的范围,只能确定一个数值区间,而无法使用字符串标识 |
plt.xticks |
获取或设置x轴的当前刻度位置和标签 |
plt.yticks |
获取或设置y轴的当前刻度位置和标签 |
plt.legend |
指定当前图形的图例,可以指定图例的大小、位置、标签 |
(3) 保存与显示图形
在pyplot中,主要用于保存和显示图形常用函数只有两个,如下表
函数名称 |
函数作用 |
plt.savefig |
保存绘制的图形,可以指定图形的分辨率、边缘的颜色等参数 |
plt.show |
在本机显示图形 |
案例代码
import numpy as np
import matplotlib.pyplot as plt
# %matplotlib inline表示在行中显示图片,在命令行运行报错
data = np.arange(0, 1.1, 0.01)
plt.title('lines') # 添加标题
plt.xlabel('x') # 添加x轴的名称
plt.ylabel('y') # 添加y轴的名称
plt.xlim((0, 1)) # 确定x轴范围
plt.ylim((0, 1)) # 确定y轴范围
plt.xticks([0, 0.2, 0.4, 0.6, 0.8, 1]) # 规定x轴刻度
plt.yticks([0, 0.2, 0.4, 0.6, 0.8, 1]) # 确定y轴刻度
plt.plot(data, data ** 2) # 添加y=x^2曲线
plt.plot(data, data ** 4) # 添加y=x^4曲线
plt.legend(['y=x^2', 'y=x^4'])
plt.savefig('../tmp/y=x^2.jpg')
plt.show()
2. 设置pyplot的动态rc参数
pyplot使用rc配置文件来自定义图形的各种默认属性,被称为rc配置或rc参数。
所有存储在字典变量中的rc参数,都被称为rcParams。
在pyplot中,线条中常用的rc参数名称、解释与取值如下表。
rc参数名称 |
解释 |
取值 |
lines.linewidth |
线条宽度 |
取0~10之间的数值,默认为1.5 |
lines.linestyle |
线条样式 |
可取“-”“--”“-.”“:”4种。默认为“-” |
lines.marker |
线条上点的形状 |
可取“o”“D”“h”“.”“,”“S”等20种,默认为None |
lines.markersize |
点的大小 |
取0~10之间的数值,默认为1 |
lines.linestyle参数4中取值及意义如下表。
lines.linestyle取值 |
意义 |
‘-’ |
实线 |
‘--’ |
长虚线 |
‘-.’ |
点线 |
‘:’ |
短虚线 |
lines.marker参数的20种取值及其所代表的意义如下表。
lines.marker取值 |
意义 |
‘o’ |
圆圈 |
‘D’ |
菱形 |
‘h’ |
六边形1 |
‘H’ |
六边形2 |
‘-’ |
水平线 |
‘8’ |
八边形 |
‘p’ |
五边形 |
‘,’ |
像素 |
‘+’ |
加号 |
‘None’ |
无 |
‘.’ |
点 |
‘s’ |
正方形 |
‘*’ |
星号 |
‘d’ |
小菱形 |
‘v’ |
一角朝下的三角形 |
‘<’ |
一角朝左的三角形 |
‘>’ |
一角朝右的三角形 |
‘^’ |
一角朝上的三角形 |
‘\’ |
竖线 |
‘x’ |
X |
# 代码5-3
# 原图
x = np.linspace(0, 4 * np.pi) # 生成x轴数据
y = np.sin(x) # 生成y轴数据
plt.plot(x, y, label='$sin(x)$') # 绘制sin曲线图
plt.title('sin(x)')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
# 修改rc参数后的图
plt.rcParams['lines.linestyle'] = '-.'
plt.rcParams['lines.linewidth'] = 3
plt.plot(x, y, label='$sin(x)$') # 绘制三角函数
plt.title('sin(x)')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
# 无法显示中文标题
plt.plot(x, y, label='$sin(x)$') # 绘制三角函数
plt.title('sin(x)曲线')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
# 设置rc参数显示中文标题
# 设置字体为SimHei显示中文
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False # 设置正常显示符号
plt.plot(x, y, label='$sin(x)$') # 绘制三角函数
plt.title('sin(x)曲线')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
(二)、使用Matplotlib绘制进阶图形
1. 绘制散点图----scatter
散点图(Scatter Diagram)又称为散点分布图,是以一个特征为横坐标,以另一个特征为纵坐标,利用坐标点(散点)的分布形态反映特征间的统计关系的一种图形。
散点图可以提供两类关键信息,具体内容如下。
特征之间是否存在数值或数量的关联趋势,关联趋势是线性的还是非线性的。
如果某一个点或某几个点偏离大多数点,那么这些点就是离群值,通过散点图可以一目了然,从而可以进一步分析这些离群值是否在建模分析中产生较大的影响。
matplotlib.pyplot.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 |
接收float或array。表示x轴和y轴对应的数据。无默认值 |
s |
接收float或array。表示指定点的大小,若传入一维数组,则表示每个点的大小。默认为None |
c |
接收颜色或array。表示指定点的颜色,若传入一维数组,则表示每个点的颜色。默认为None |
marker |
接收特定str。表示绘制的点的类型。默认为None |
alpha |
接收float。表示点的透明度。默认为None |
filepath = 'data/2001-2019年劳动力与就业人员数据.npz'
"""
values[:, 0]表示所有行(:表示所有行)的第0列(索引从0开始计数)的所有元素。
values[:, 1]表示选择values数组中的所有行的第1列的所有元素。
"""
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei' # 设置中文显示
plt.rcParams['axes.unicode_minus'] = False
filepath = 'D:/data/2001-2019年劳动力与就业人员数据.npz'
data = np.load(filepath, encoding='ASCII', allow_pickle=True)
columns = data['arr_0'] # 提取其中的columns数组,视为数据的标签
values = data['arr_1'] # 提取其中的values数组,视为数据的存在位置
plt.figure(figsize=(12, 6), dpi=1080) # 设置画布
plt.scatter(values[:, 0], values[:, 1], marker='o') # 绘制散点图
plt.xlabel('年份(年)')
plt.ylabel('劳动力人数(万人)')
plt.ylim(70000, 85000) # 设置y轴范围
plt.xticks(range(2001, 2020, 1), labels=values[:, 0])
plt.title('2001~2019年劳动力人数散点图') # 添加图表标题
plt.show()
p = plt.figure(figsize=(12, 6), dpi=1080) # 设置画布
# 绘制散点图1
plt.scatter(values[:, 0], values[:, 3], marker='o', c='b')
# 绘制散点图2
plt.scatter(values[:, 0], values[:, 4], marker='o', c='r')
plt.xlabel('年份(年)')
plt.ylabel('人数(万人)')
plt.ylim(20000, 60000) # 设置y轴范围
plt.xticks(range(2001, 2020, 1), labels=values[:, 0])
plt.legend(['城镇就业人员', '乡村就业人员']) # 设置图例
plt.title('2001~2019年城乡就业人数散点图') # 添加图表标题
plt.show()
2. 绘制折线图----plot
折线图(Line Chart)是一种将数据点按照顺序连接起来的图形,可以看作是将散点图按照x轴坐标顺序连接起来的图形。
matplotlib.pyplot.plot(* args, scalex = True, scaley = True, data = None, ** kwargs)
x,y |
接收array。表示x轴和y轴对应的数据。无默认值 |
scalex,scaley |
接收bool。表示这些参数确定视图限制是否适合于数据限制。默认为True |
data |
接收可索引对象。表示具有标签数据的对象。默认为None |
color |
接收特定str。表示指定线条的颜色。默认为None |
linestyle |
接收特定str。表示指定线条类型。默认为“-” |
marker |
接收特定str。表示绘制的点的类型。默认为None |
alpha |
接收float。表示点的透明度。默认为None |
其中color参数的8种常用颜色的缩写如下表。
颜色缩写 |
代表的颜色 |
b |
蓝色 |
g |
绿色 |
r |
红色 |
c |
青色 |
m |
品红 |
y |
黄色 |
k |
黑色 |
w |
白色 |
p = plt.figure(figsize=(12, 6), dpi=1080) #设置画布
plt.plot(values[:, 0], values[:, 2], color='r', linestyle='-')
plt.xlabel('年份(年)')
plt.ylabel('人数(万人)')
plt.ylim(70000, 80000) # 设置y轴范围
plt.xticks(range(2001, 2020, 1), labels=values[:, 0])
plt.title('2001~2019年就业人数折线图')
plt.show()
# 代码5-8
p = plt.figure(figsize=(12, 6), dpi=1080) #设置画布
plt.plot(values[:, 0], values[:, 2], c='b', linestyle = '-',
marker = 'o') # 绘制点线图
plt.xlabel('年份(年)')
plt.ylabel('人数(万人)')
plt.ylim(70000, 80000) # 设置y轴范围
plt.xticks(range(2001, 2020, 1), labels=values[:, 0])
plt.title('2001~2019年就业人数点线图')
plt.show()
p = plt.figure(figsize=(12, 6), dpi=1080) #设置画布
plt.plot(values[:, 0], values[:, 3], 'bs-',
values[:, 0], values[:, 4], 'ro-.')
plt.xlabel('年份(年)')
plt.ylabel('人数(万人)')
plt.ylim(20000, 60000) # 设置y轴范围
plt.xticks(range(2001, 2020, 1), labels=values[:, 0])
plt.legend(['城镇就业人员', '乡村就业人员'])
plt.title('2001~2019年城乡就业人数点线图')
plt.show()
3. 绘制柱形图---bar
柱形图(Bar Chart)的核心思想是对比,常用于显示一段时间内的数据变化或显示各项之间的比较情况。
matplotlib.pyplot.bar(x, height, width = 0.8, bottom = None, *, align = 'center', data = None, ** kwargs)
参数名称 |
参数说明 |
x |
接收array或float。表示x轴数据。无默认值 |
height |
接收array或float。表示指定柱形图的高度。无默认值 |
width |
接收array或float。表示指定柱形图的宽度。默认为0.8 |
align |
接收str。表示整个柱形图与x轴的对齐方式,可选center和edge。默认为center |
color |
接收特定str或包含颜色字符串的list。表示柱形图颜色。默认为None |
columns = data['arr_0'] # 提取其中的columns数组,视为数据的标签
values = data['arr_1'] # 提取其中的values数组,视为数据的存在位置
# 绘制柱形图
labels = ['城镇就业人员', '乡村就业人员']
p = plt.figure(figsize=(6, 6), dpi=1080)
plt.bar(range(2), values[-1, 3:5], width=0.5)
plt.xlabel('类别')
plt.ylabel('就业人数(万人)')
plt.xticks(range(2), labels)
plt.title('2019年城乡就业人数柱形图')
plt.show()
4. 绘制饼图---pie
饼图(Pie Graph)是将各项的大小与各项总和的比例显示在一张“饼”中,以“饼”的大小来确定每一项的占比。
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)
参数名称 |
参数说明 |
x |
接收array。表示用于绘制饼图的数据。无默认值 |
explode |
接收array。表示指定饼块距离饼图圆心的偏移距离。默认为None |
labels |
接收list。表示指定每一项的标签名称。默认为None |
color |
接收特定str或包含颜色字符串的array。表示饼图颜色。默认为None |
autopct |
接收特定str。表示指定数值的显示方式。默认为None |
pctdistance |
接收float。表示每个饼图切片的中心与autopct生成的文本之间的比率。默认为0.6 |
labeldistance |
接收float。表示绘制的饼图标签离圆心的距离。默认为1.1 |
radius |
接收float。表示饼图的半径。默认为1 |