数据可视化——
- 数据分析阶段:理解和洞察数据之间的关系;
- 算法调试阶段:发现问题,优化算法;
- 项目总结阶段:展示项目成果。
Matplotlib:绘制图表的第三方库,可以快速方便地生成高质量的图表
Matplotlib绘图基础
- 安装Matplotlib库
pip install matplotlib
- 导入Matplotlib库中的pyplot子库
import matplotlib.pyplot as plt
Figure对象
使用Figure对象进行绘图,相当于一个画布,因此在使用时应该首先创建一个figure对象;
figure(num, figsize, dpi, facecolor, edgecolor, frameon)
- num:图形编号或名称,取值为数字/字符串
- figsize:绘图对象的宽和高,单位为英寸
- dpi:绘图对象的分辨率,缺省值为80
- facecolor:背景颜色
- edgecolor:边框颜色
- frameon:表示是否显示边框
常用颜色:
颜色 | 缩略字符 |
---|---|
blue | b |
green | g |
red | r |
yellow | y |
black | k |
white | w |
cyan | c |
magenta | m |
划分子图:subplot(行数, 列数, 子图序号)
从左到右,从上到下;
设置中文字体:plt.rcParams["font.sans-serif"]="SimHei"
中文字体 | 英文描述 |
---|---|
宋体 | SimSum |
黑体 | SimHei |
微软雅黑 | Microsoft YaHei |
微软正黑体 | Microsoft JhengHei |
楷体 | KaiTi |
仿宋 | FangSong |
隶书 | LiSu |
幼圆 | YouYuan |
恢复标准默认配置:plt.rcdefaults()
添加标题:
- 添加全局标题
suptitle(标题文字)
- 添加子标题
title(标题文字) # 标题文字为字符串,不能省略
suptitle()
函数的主要参数:
参数 | 说明 | 默认值 |
---|---|---|
x | 标题位置的x坐标 | 0.5 |
y | 标题位置的y坐标 | 0.98 |
color | 标题颜色 | 黑色 |
backgroundcolor | 标题背景颜色 | 12 |
fontsize | 标题字体大小 | |
fontweight | 字体粗细 | normal |
fontstyle | 设置字体类型 | |
horizontalalignment | 标题水平对齐方式 | center |
verticalalignment | 标题的垂直对齐方式 | top |
子标题可以使用fontdict
字典传递,注意字典中的关键字是字符串类型,要加上引号;
tight_layout()
函数:检查坐标轴标签、刻度标签、和子图标题,自动调整子图,使之填充整个绘图区域,并消除子图之间的重叠。
散点图(Scatter):是数据在直角坐标系中的分布图
- 原始数据分布的规律
- 数据变化的趋势
- 数据分组
scatter()函数
——scatter(x, y, scale, color, marker, label)
一般来说,散点图中有多个点,因此,通常由python列表或者numpy数组给出所有的x和y;
参数 | 说明 | 默认值 |
---|---|---|
x | 数据点的x坐标 | 不可省略 |
y | 数据点的y坐标 | 不可省略 |
scale | 数据点的大小 | 36 |
color | 数据点的颜色 | |
marker | 数据点的样式 | ‘o’(圆点) |
label | 图例文字 |
text()函数
——text(x,y,s,fontsize,color)
参数 | 说明 | 默认值 |
---|---|---|
x | 文字的x坐标 | 不可省略 |
y | 文字的y坐标 | 不可省略 |
s | 显示的文字 | 不可省略 |
fontsize | 文字的大小 | 12 |
color | 文字的颜色 | 黑色 |
增加图例:
sctter()
函数的label属性中指定图例内容- 再用
legend(loc,fontsize)
显示图例
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = 'SimHei' # 设置默认字体为中文黑体
plt.rcParams['axes.unicode_minus'] = False # 坐标轴设置
""" 设置中文字体为默认字体后,坐标轴上的符号可能会显示出错
设置上面的参数为False后,pyplot会根据数据的分布区间,自动加上坐标轴"""
# 标准正态分布
n = 1024 # 随机点个数
x1 = np.random.normal(0, 1, n) # 生成数据点x坐标
y1 = np.random.normal(0, 1, n) # 生成数据点y坐标
# 增加均匀分布的点
x2 = np.random.uniform(-4, 4, (1, n))
y2 = np.random.uniform(-4, 4, (1, n))
plt.scatter(x2, y2, color='yellow', marker='o', label='均匀分布')
plt.scatter(x1, y1, color='blue', marker='*', label='正态分布') # 绘制散点图
plt.legend()
plt.title('标准正态分布', fontsize=20) # 设置标题
# plt.text(2.5, 2.5, '均 值:0\n标准差:1') # 设置文本
# 设置坐标轴范围
plt.xlim(-4, 4)
plt.ylim(-4, 4)
# 设置坐标轴标签
plt.xlabel('横坐标x', fontsize=14)
plt.ylabel('纵坐标y', fontsize=14)
plt.show()
折线图和柱状图
折线图(Line Chart):散点图的基础上,将相邻的点用线段相连接
- 描述变量变化的趋势
plot()
函数——plot(x,y,color,marker,label,linewidth,markersize)
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = 'SimHei' # 设置默认字体为中文黑体
n = 24 # 随机点个数
y1 = np.random.randint(27, 37, n) # 生成数据点y1坐标
y2 = np.random.randint(40, 60, n) # 生成数据点y2坐标
"""
x可省略,y不可省略,matplotlib会自动根据数据点的个数给出数字序列,作为x坐标
"""
plt.plot(y1, label='温度')
plt.plot(y2, label='湿度')
# 设置坐标轴范围
plt.xlim(0, 23)
plt.ylim(20, 70)
# 设置坐标轴标签
plt.xlabel('小时', fontsize=14)
plt.ylabel('测量值', fontsize=14)
plt.title('24小时温度湿度统计', fontsize=20) # 设置标题
plt.legend()
plt.show()
柱状图(Bar Chart):由一系列高度不等的柱形条纹表示数据分布的情况
- 数据的统计和分析
bar()
函数——bar(left,height,width,facecolor,edgecolor,label)
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei' # 设置默认字体为中文黑体
plt.rcParams['axes.unicode_minus'] = False # 坐标轴设置
y1 = [32,35,16,30,24,45,40,33,28,17,24,20] # 生成数据点y1坐标
y2 = [-23,-35,-26,-35,-45,-43,-35,-32,-23,-17,-22,-28] # 生成数据点y2坐标
plt.bar(range(len(y1)),y1,width=0.8,facecolor='green',edgecolor='white',label='统计量1')
plt.bar(range(len(y2)),y2,width=0.8,facecolor='red',edgecolor='white',label='统计量2')
plt.title('柱状图', fontsize=20) # 设置标题
plt.legend()
plt.show()