一、Matplotlib绘制图形
我们已经学习过了 NumPy 的统计分析,数据的各项指标都可以以真实的数据提供出来, 有的同学可能有疑问?
我们为什么要进行可视化?而可视化在数据分析中又占什么样的地位?我们之前大致说过,可视化可以将我们的数据更加直观的表现出来,方便我们得到数据分析的结论,那么还有什么作用吗?那么我们一起来一下这一组数据
观察上面这一组数据,并没有发现什么规律,但是我们可以对其进行统计指标计算,来得到:
而观察统计指标中的均值、标准差,会发现整个的 x_ *、y __ * 数据的均值、标准差都是 基本一样的,那么到底可不可以得到,整个 x_ * 数据的规律是一样的?整个 y_ * 数据的规律 是一样的?
那么我们对该数据进行可视化,来绘制图形来查看该数据的分布情况,会发现:
而观察数据的分布散点,可以得到:该数据的分布规律并不相同。那么根据指标所得到 的规律只是显示着该数据的某些指标相同,但是真实的规律还得需要图形的支撑,不然不足 以提供强大的说服力
那么到底如何实现图像可视化?接下来我们一起来学习 Matplotlib 可视化库
二、Matplotlib 数据可视化基础
对 Matplotlib 认识
Matplotlib 是一个 Python 的 2D 绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形
Matplotlib 绘图流程
1、创建画布与创建子图
第一部分主要作用是构建出一张空白的画布,并可以选择是否将整个画布划分为多个部 分,方便在同一幅图上绘制多个图形的情况。最简单的绘图可以省略第一部分,而后直接在默认的画布上进行图形绘制
函数名称 | 函数作用 |
---|---|
plt.figure | 创建一个空白画布,可以指定画布大小,像素 |
figure.add_subplot | 创建并选中子图,可以指定子图的行数,列数,与选中图片编号 |
plt.subplots_adjust | 调整子图之间的间距,wspace 为调整宽度,hspace 为调整高度 |
2、添加画布内容
第二部分是绘图的主体部分,其中添加标题,坐标轴名称,绘制图形等步骤是并列的, 没有先后顺序,可以先绘制图形,也可以先添加各类标签,但是添加图例一定要在绘制图形之后
函数名称 | 函数作用 |
---|---|
plt.title | 在当前图形中添加标题,可以指定标题的名称、位置、颜色、字体大小等参数 |
plt.xlabel | 在当前图形中添加 x 轴名称,可以指定位置、颜色、字体大小等参数 |
plt.ylabel | 在当前图形中添加 y 轴名称,可以指定位置、颜色、字体大小等参数 |
plt.xlim | 指定当前图形 x 轴的范围,只能确定一个数值区间,而无法使用字符串标识 |
plt.ylim | 指定当前图形 y 轴的范围,只能确定一个数值区间,而无法使用字符串标识 |
plt.xticks | 指定 x 轴刻度的数目与取值 |
plt.yticks | 指定 y 轴刻度的数目与取值 |
plt.legend | 指定当前图形的图例,可以指定图例的大小、位置、标签 |
3、存与展示图形
第三部分主要用于保存和显示图形
函数名称 | 函数作用 |
---|---|
plt.savafig | 保存绘制的图片,可以指定图片的分辨率、边缘的颜色等参数 |
plt.show | 在本机显示图形 |
现在人们对于旅游、出行越来越热衷,一旦出现周末、小假期,基本都会出行旅游,所以对于天气的依赖越来越重要,以 xx 城市下一周天气温度走势为例,来理解绘图三部曲, 以下为某城市下一周天气
温度表:
某城市下一周天气温度表
日期 | 周一 | 周二 | 周三 | 周四 | 周五 | 周六 | 周日 |
---|---|---|---|---|---|---|---|
xx 城市天气温度(℃) | 15 | 20 | 22 | 23 | 20 | 18 | 16 |
以下为绘制出的效果图:
代码实现:
# 导包
import matplotlib.pyplot as plt
import numpy as np
# 1、创建画布
# figsize : 画布大小,元组形式,可以给定画布的宽、高
# dpi :像素大小
# 返回值:画布对象
plt.figure()
# 2、绘图及修饰
# 以下一周某城市的天气温度走势 来理解绘图流程
# 折线图
# 折线图 ---要素:点 --->坐标(x,y)
# (x1,y1) (x2,y2) ...(xn,yn) ---n个点的坐标
# 注意:在绘制折线图时,要求单独传入横坐标、纵坐标,绘制的时候会一一对应
# 准备 横轴数组 ---周一、周二、....、周日
# 注意:如果横轴为中文,绘制的时候,需要用序号来代替中文,后续再替换过来
x = np.arange(1, 8)
# 准备 纵轴数组
y = np.array([15, 20, 22, 23, 20, 18, 16])
# 绘制折线图
plt.plot(x, y)
# 3、图形展示
plt.show()
三、折线图绘制
折线图(line chart)是一种将数据点按照顺序连接起来的图形。可以看作是将散点图,按照 x 轴坐标顺序连接起来的图形
折线图的主要功能是查看因变量y随着自变量x改变的趋势,最适合用于显示随时间(根 据常用比例设置)而变化的连续数据。同时还可以看出数量的差异,增长趋势的变化
可以使用 plt.pyplot 绘制折线图
matplotlib.pyplot.plot(*args, **kwargs)
plot 函数在官方文档的语法中只要求填入不定长参数,实际可以填入的主要参数主要
如下:
参数名称 | 说明 |
---|---|
x,y | 接收 array,表示 x 轴和 y 轴对应的数据。无默认 |
color | 接收特定 string,指定线条的颜色。默认为 None |
linestyle | 接收特定 string。指定线条类型,默认为“-“ |
marker | 接收特定 string。表示绘制的点的类型。默认为 None |
alpha | 接收 0-1 的小数。表示点的透明度。默认为 None |
在 pyplot 中几乎所有的默认属性都是可以控制的,例如视图窗口大小以及每英寸点数、 线条宽度、颜色和样式、坐标轴、坐标和网格属性、文本、字体等
1、线条的常用参数的取值:
rc参数名称 | 解释 | 取值 |
---|---|---|
lines.linewidth | 线条宽度 | 取 0-10 之间的数值,默认为 1.5 |
lines.linestyle | 线条样式 | 可取“-”,“–”,“-.”,“:”四种,默认为“-” |
lines.marker | 线条上点的形状 | 可取“o”,“D”,“h”,“.”,“,” ,“S”等 20 种,默认为 None |
lines.markersize | 点的大小 | 取 0-10 之间的数值,默认为 1 |
2、常用线条样式解释:
linestyle 取值 | 意义 |
---|---|
- | 实线 |
– | 长虚线 |
-. | 点线 |
: | 短虚线 |
3、点的样式解释:
marker 取值 | 意义 |
---|---|
‘o’ | 圆圈 |
‘D’ | 菱形 |
‘h’ | 六边形 1 |
‘H’ | 六边形 2 |
‘-’ | 水平线 |
‘8’ | 八边形 |
‘p’ | 五边形 |
‘,’ | 像素 |
‘+’ | 加号 |
‘None’ | 无 |
‘.’ | 点 |
‘s’ | 正方形 |
‘*’ | 星号 |
‘d’ | 小菱形 |
‘v’ | 一角朝下的三角形 |
‘<’ | 一角朝左的三角形 |
‘>’ | 一角朝右的三角形 |
‘^’ | 一角朝上的三角形 |
‘\’ | 竖线 |
‘x’ | X |
4、常用颜色说明
颜色缩写 | 代表的颜色 |
---|---|
b | 蓝色 |
g | 绿色 |
r | 红色 |
c | 青色 |
m | 品红 |
y | 黄色 |
k | 黑色 |
w | 白色 |
另外需要注意:
由于默认的 pyplot 字体并不支持中文字符的显示,因此需要通过设置 font.sans-serif 参数改变绘图时的字体,使得图形可以正常显示中文,同时,由于更改字体后,会导致坐标 轴中的部分字符无法显示,因此需要同时更改 axes.unicode_minus 参数
支持中文代码示例:
# 默认不支持中文 ---修改RC参数
plt.rcParams['font.sans-serif'] = 'SimHei'
# 增加字体之后变得不支持负号,需要修改RC参数让其继续支持负号
plt.rcParams['axes.unicode_minus'] = False
如果需要更改画布颜色、坐标轴字体颜色、坐标轴、边框颜色等,也可以去更改 rcParams 参数
代码示例:
# 颜色对照表
# https://tool.oschina.net/commons?type=3
# 如果需要更改画布颜色、坐标轴字体颜色、坐标轴、边框颜色等,也可以去更改 rcParams 参数
# x轴字体颜色
plt.rcParams['xtick.color'] = '#FFFFFF'
# y轴字体颜色
plt.rcParams['ytick.color'] = '#FFFFFF'
# 背景颜色
plt.rcParams['axes.facecolor'] = '#0D0434'
# 边框颜色
plt.rcParams['axes.edgecolor'] = '#FFFFFF'
# 保存的画布的颜色
plt.rcParams['savefig.facecolor'] = '#0D0434'
更多设置可查看:matplotlibrc 文件
以 xx 城市、yy 城市下一周天气温度走势为例,绘制折线图,以下为 xx 城市、yy 城市
下一周天气温度表:
xx 城市和 yy 城市下一周天气温度表
日期 | 周一 | 周二 | 周三 | 周四 | 周五 | 周六 | 周日 |
---|---|---|---|---|---|---|---|
xx 城市天气温度(℃) | 15 | 20 | 22 | 23 | 20 | 18 | 16 |
yy 城市天 气温度(℃) | -10 | -8 | -12 | -10 | -8 | -6 | -1 |
以下为绘制出的效果图:
代码实现:
# 导包
import matplotlib.pyplot as plt
import numpy as np
# 1、创建画布
# figsize : 画布大小,元组形式,可以给定画布的宽、高
# dpi :像素大小
# 返回值:画布对象
plt.figure()
# 默认不支持中文 ---修改RC参数
plt.rcParams['font.sans-serif'] = 'SimHei'
# 增加字体之后变得不支持负号,需要修改RC参数让其继续支持负号
plt.rcParams['axes.unicode_minus'] = False
# 如果需要更改画布颜色、坐标轴字体颜色、坐标轴、边框颜色等,也可以去更改 rcParams 参数
# x轴字体颜色
plt.rcParams['xtick.color'] = '#FFFFFF'
# y轴字体颜色
plt.rcParams['ytick.color'] = '#FFFFFF'
# 背景颜色
plt.rcParams['axes.facecolor'] = '#045332'
# 边框颜色
plt.rcParams['axes.edgecolor'] = '#FFFFFF'
# 保存的画布的颜色
plt.rcParams['savefig.facecolor'] = '#0D0434'
# 2、绘图及修饰
# 以下一周某城市的天气温度走势 来理解绘图流程
# 折线图
# 折线图 ---要素:点 --->坐标(x,y)
# (x1,y1) (x2,y2) ...(xn,yn) ---n个点的坐标
# 注意:在绘制折线图时,要求单独传入横坐标、纵坐标,绘制的时候会一一对应
# 准备 横轴数组 ---周一、周二、....、周日
# 注意:如果横轴为中文,绘制的时候,需要用序号来代替中文,后续再替换过来
x = np.arange(1, 8)
# 准备 纵轴数组
y1 = np.array([15, 20, 22, 23, 20, 18, 16])
y2 = np.array([-10, -8, -12, -10, -8, -6, 1])
# 绘制折线图
# 如果想要一张图中绘制多条折线,那么只需要多绘制几次就可以了
# color : 线的颜色
# linestyle : 线的样式
#