ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

机器学习听课 | Matplotlib | 02

2020-12-25 22:32:35  阅读:172  来源: 互联网

标签:02 plot 显示 plt Matplotlib 折线图 绘图 听课


目录

Matplotlib之HelloWorld

什么是Matplotlib


(1) 是专门用于开发2D图表(包括3D图表,但是不擅长)
(2) 使用起来简单方便
(3) 以渐进,交互式方式实现数据可视化

为什么要学习Matplotlib

可视化是在整个数据挖掘过程的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法.
(1) 能将数据进行可视化,更直观的呈现
(2) 使数据更加客观,更具说服力.

例如下图,左边是使用数字展示,右边是使用图像展示,显然是右图更加直观清晰.

实现一个简单的Matplotlib画图

matplotlib实现画图的三个步骤:
(1) 创建画布 plt.figure([figsize=(..,..),dpi=..])
(2) 绘制图像 plt.plot(x,y)
(3) 显示图像 plt.show()

Matplotlib三层结构

容器层

容器层主要由Canvas,Figure,Axes组成.
(1) Canvas是位于最底层的系统层,在绘图的过程中充当画板的角色,即放置画布(Figure)的工具.
(2) FigureCanvas上方的第一层,也是需要用户来操作的应用层的第一层.
我们不需要关注Canvas. 做比喻的话, Canvas就是画板,Figure就是画纸.
(3) Axes是应用层的第二层,在绘图过程中相当于画布上的绘图区的角色.
* figure: 指整个图形(可以通过plt.figure()设置画布的大小和分辨率等)
* axes(坐标系/绘图区): 数据的绘图区域
* axis(坐标轴): 坐标系中的一条轴,包含大小限制,刻度和刻度标签

辅助显示层

辅助显示层为Axes(绘图区)内的除了根据数据绘制出的图像以外的内容.
主要包括Axes的外观facecolor,边框线spines,坐标轴axis,坐标轴名称axis label
坐标轴刻度axis tick,坐标轴刻度标签tick label,网格线grid,图例legend,标题title

该层的设置可使图像显示更加直观更加容易被用户理解,但又不会对图像产生实质的影响.

图像层

图像层指Axes内通过plot,scatter,bar,histogram,pie等函数根据数据绘制出的图像.

折线图(plot)与基础绘图功能

折线图绘制与保存图片

为了更好地理解所有基础绘图功能,我们通过天气温度变化的绘图来融合所有的基础API使用.

matplotlib.pyplot模块

matplotlijb.pyplot包含了一系列类似于matlab的画图函数.
它的函数作用于当前图像figure的当前坐标系axes.

import matplotlib.pyplot as plt

折线图绘制与显示

展示上海一周的天气,比如从星期一到星期天的天气温度

可以看到这样的显示效果并不好,我们可以加入更多的功能.

设置画布属性与图片保存

plt.figure(figsize=(),dpi=...)
# figsize: 指定图的长宽
# dpi: 图像的清晰度
# 返回fig对象

plt.savefig(path)
# 保存图片路径

例:

# 1.创建画布,并设置画布属性
plt.figure(figsize=(20, 8), dpi=80)
# 2.保存图片到指定路径
plt.savefig("test.png")

注意: plt.show()会释放figure资源,如果在显示图像之后保存图片只能保存空图片.

完善原始折线图1 -- 辅助显示层

案例: 显示温度变化状况
需求: 画出某城市11点到12点1小时内每分钟的温度变化折线图,温度范围在15度~18度.

效果如下图:

准备数据并画出初始折线图

添加自定义x,y刻度

plt.xticks(x,x_label)
# x: 要显示的刻度值(必须是数值)

plt.yticks(y,y_label)
# y: 要显示的刻度值(必须是数值)

中文显示问题解决

(1) 临时解决方法
在使用中文之前加上以下两行代码

matplotlib.rcParams['font.sans-serif']=['SimHei']
matplotlib.rcParams['axes.unicode_minus']=False

(2) 从配置上解决
首先没有字体需要先现在字体,然后反映在对应的地方.
一般是下载SimHei字体.
linux下载完字体后需要拷贝到usr/share/fonts
windows下载完字体后直接安装即可.

删除~/.matplotlib中的缓存文件

cd ~/.matplotlib
rm -r *

修改配置文件matplotlibrc

vi ~/.matplotlib/matplotlibrc

将文件内容修改为

font.family         : sans-serif
font.sans-serif         : SimHei
axes.unicode_minus  : False

添加网格显示

plt.grid(True[,linestyle='--',alpha=0.5])
# 增加网格,更加清楚的看到网格对应的值

添加描述信息

添加x轴,y轴描述信息以及标题

plt.xlabel(...)
plt.ylabel(...)
plt.title(...)

完善原始折线图2 -- 图像层

多次plot

需求: 在添加一个城市的问题变化

收集到北京当天温度变化情况,温度在1度到3度.
怎么去添加另一个在同一个坐标轴(绘图区)当中的不同图形?
其实很简单,只需要再次plot即可,但是需要区分线条.
如下图所示:

plt.legend(loc="best") 
# 增加图例

plt.plot(x,y[,color=..,linestyle=..,label=..])
# 绘制折线图

设置风格

显示图例

注意: 如果只在plt.plot()中设置label还不能最终显示出图例,还需要通过plt.legend()将图例显示出来.

plt.legend(loc="best")

完整代码:

import random

# 多次plot
# 0.创建数据
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
y_beijing = [random.uniform(-5, 5) for i in x]

# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)

# 2.绘制图
plt.plot(x, y_shanghai, label="上海", color="r", linestyle="--")
plt.plot(x, y_beijing, label="北京")

# 2.1 添加x,y轴的刻度
x_labels_ticks = ["11点{}分".format(i) for i in x]
y_labels_ticks = range(-10, 30)

plt.xticks(x[::5], x_labels_ticks[::5])
plt.yticks(y_labels_ticks[::5])

# 2.2 添加网格线
plt.grid(linestyle="--", alpha=0.5)

# 2.3 添加描述信息
plt.xlabel("时间", fontsize=16)
plt.ylabel("温度", fontsize=16)
plt.title("某城市11点-12点温度变化", fontsize=20)

# 2.4 增加图例
plt.legend(loc="best")

# 3.显示
plt.show()

多个坐标系(绘图区)显示

显示多个绘图区,这里推荐使用plt.subplots(),面向对象的画图方法

如果我们想要将上海和北京的天气图显示在同一个图的不同坐标,效果如下:

fig,axes = subplots(nrow=x,ncol=y[,figsize=(..),dpi=...])
# fig 图对象
# axes/ax 一个绘图区的数组

# 设置标题等方法不同
set_xticks()
set_yticks()
set_xlabel()
set_ylabel()
set_title()

折线图的应用场景

折线图就是用来展示变量之间的关系
比如:
呈现公司产品(不同区域)每天活跃用户数
呈现app每天下载数量
呈现新功能上线后,用户点击次数随时间的变化

注意: plt.plot还可以画各种数学的函数图像

常见图形绘制

(1) 折线图
能够显示数据的变化趋势,反映事物的变化情况(变化)
plt.plot()
(2) 散点图
判断变量之间是否存在数量关系趋势,展示离群点(分布规律)
plt.scatter()
(3) 柱状图
绘制离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别(统计/对比)
plt.bar(x,width,align="center")
(4) 直方图
绘制连续性的数据展示,展示一组或多组的分布状况(统计)
plt.hist(x,bins)
(5) 饼图
用于表示不同分类情况的占比,通过弧度大小来对比各种分类
plt.pie(x,labels,autopct,colors)

标签:02,plot,显示,plt,Matplotlib,折线图,绘图,听课
来源: https://www.cnblogs.com/Rowry/p/14191017.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有