【机器学习科学库】全md文档笔记:Matplotlib详细使用方法(已分享,附代码)

news/发布时间2024/5/15 23:35:19

本系列文章md笔记(已分享)主要讨论人工智能相关知识。主要内容包括,了解机器学习定义以及应用场景,掌握机器学习基础环境的安装和使用,掌握利用常用的科学计算库对数据进行展示、分析,学会使用jupyter notebook平台完成代码编写运行,应用Matplotlib的基本功能实现图形显示,应用Matplotlib实现多图显示,应用Matplotlib实现不同画图种类,学习Numpy运算速度上的优势,知道Numpy的数组内存块风格,了解Numpy与Pandas的不同,学习Pandas的使用,应用crosstab和pivot_table实现交叉表与透视表,应用Pandas实现数据的读取和存储,并且了解完整机器学习项目的流程。

仓库里完整资料代码:

请移步这里获取文档和代码

感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~


共 7 章,33 子模块

Matplotlib

学习目标

  • 应用Matplotlib的基本功能实现图形显示
  • 应用Matplotlib实现多图显示
  • 应用Matplotlib实现不同画图种类

3.2 基础绘图功能 — 以折线图为例

学习目标

  • 目标

  • 掌握给图形添加辅助功能(如:标注、x,y轴名称、标题等)

  • 知道图形的保存

  • 知道如何多次plot绘制图形

  • 知道如何多个坐标系显示图形
  • 知道折线图的应用场景

1 完善原始折线图 — 给图形添加辅助功能

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

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

效果:

上海1

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

```python import matplotlib.pyplot as plt import random

画出温度变化图

0.准备x, y坐标的数据

x = range(60) y_shanghai = [random.uniform(15, 18) for i in x]

1.创建画布

plt.figure(figsize=(20, 8), dpi=80)

2.绘制折线图

plt.plot(x, y_shanghai)

3.显示图像

plt.show() ```

上海2

1.2 添加自定义x,y刻度

  • plt.xticks(x, **kwargs)

x:要显示的刻度值

  • plt.yticks(y, **kwargs)

y:要显示的刻度值

```python

增加以下两行代码

构造x轴刻度标签

x_ticks_label = ["11点{}分".format(i) for i in x]

构造y轴刻度

y_ticks = range(40)

修改x,y轴坐标的刻度显示

plt.xticks(x[::5], x_ticks_label[::5]) plt.yticks(y_ticks[::5]) ```

上海3

如果没有解决过中文问题的话,会显示这个样子:

中文问题

1.3 中文显示问题解决

解决方案一:

下载中文字体(黑体,看准系统版本)

  • 步骤一:下载 SimHei 字体(或者其他的支持中文显示的字体也行)

  • 步骤二:安装字体

  • linux下:拷贝字体到 usr/share/fonts 下:

python sudo cp ~/SimHei.ttf /usr/share/fonts/SimHei.ttf

  • windows和mac下:双击安装

  • 步骤三:删除~/.matplotlib中的缓存文件

python cd ~/.matplotlib rm -r *

  • 步骤四:修改配置文件matplotlibrc

python vi ~/.matplotlib/matplotlibrc

将文件内容修改为:

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

解决方案二:

在Python脚本中动态设置matplotlibrc,这样也可以避免由于更改配置文件而造成的麻烦,具体代码如下:

```python from pylab import mpl

设置显示中文字体

mpl.rcParams["font.sans-serif"] = ["SimHei"] ```

有时候,字体更改后,会导致坐标轴中的部分字符无法正常显示,此时需要更改axes.unicode_minus参数:

```python

设置正常显示符号

mpl.rcParams["axes.unicode_minus"] = False ```

1.4 添加网格显示

为了更加清楚地观察图形对应的值

python plt.grid(True, linestyle='--', alpha=0.5)

1.5 添加描述信息

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

通过fontsize参数可以修改图像中字体的大小

python plt.xlabel("时间") plt.ylabel("温度") plt.title("中午11点0分到12点之间的温度变化图示", fontsize=20)

1.6 图像保存

```python

保存图片到指定路径

plt.savefig("test.png") ```

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

完整代码:

```python import matplotlib.pyplot as plt import random from pylab import mpl

设置显示中文字体

mpl.rcParams["font.sans-serif"] = ["SimHei"]

设置正常显示符号

mpl.rcParams["axes.unicode_minus"] = False

0.准备数据

x = range(60) y_shanghai = [random.uniform(15, 18) for i in x]

1.创建画布

plt.figure(figsize=(20, 8), dpi=100)

2.绘制图像

plt.plot(x, y_shanghai)

2.1 添加x,y轴刻度

构造x,y轴刻度标签

x_ticks_label = ["11点{}分".format(i) for i in x] y_ticks = range(40)

刻度显示

plt.xticks(x[::5], x_ticks_label[::5]) plt.yticks(y_ticks[::5])

2.2 添加网格显示

plt.grid(True, linestyle="--", alpha=0.5)

2.3 添加描述信息

plt.xlabel("时间") plt.ylabel("温度") plt.title("中午11点--12点某城市温度变化图", fontsize=20)

2.4 图像保存

plt.savefig("./test.png")

3.图像显示

plt.show() ```

2 在一个坐标系中绘制多个图像

2.1 多次plot

需求:再添加一个城市的温度变化

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

```python

增加北京的温度数据

y_beijing = [random.uniform(1, 3) for i in x]

绘制折线图

plt.plot(x, y_shanghai)

使用多次plot可以画多个折线

plt.plot(x, y_beijing, color='r', linestyle='--') ```

我们仔细观察,用到了两个新的地方,一个是对于不同的折线展示效果,一个是添加图例。

2.2 设置图形风格

|颜色字符|风格字符| |---|---| |r 红色|- 实线| |g 绿色|- - 虚线| |b 蓝色|-. 点划线| |w 白色|: 点虚线| |c 青色|' ' 留空、空格| |m 洋红|| |y 黄色|| |k 黑色|

2.3 显示图例

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

```python

绘制折线图

plt.plot(x, y_shanghai, label="上海")

使用多次plot可以画多个折线

plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")

显示图例

plt.legend(loc="best") ```

|Location String|Location Code| |---|---| |'best'|0| |'upper right'|1| |'upper left'|2| |'lower left'|3| |'lower right'|4| |'right'|5| |'center left'|6| |'center right'|7| |'lower center'|8| |'upper center'|9| |'center'|10|

完整代码:

```python

0.准备数据

x = range(60) y_shanghai = [random.uniform(15, 18) for i in x] y_beijing = [random.uniform(1,3) for i in x]

1.创建画布

plt.figure(figsize=(20, 8), dpi=100)

2.绘制图像

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

2.1 添加x,y轴刻度

构造x,y轴刻度标签

x_ticks_label = ["11点{}分".format(i) for i in x] y_ticks = range(40)

刻度显示

plt.xticks(x[::5], x_ticks_label[::5]) plt.yticks(y_ticks[::5])

2.2 添加网格显示

plt.grid(True, linestyle="--", alpha=0.5)

2.3 添加描述信息

plt.xlabel("时间") plt.ylabel("温度") plt.title("中午11点--12点某城市温度变化图", fontsize=20)

2.4 图像保存

plt.savefig("./test.png")

2.5 添加图例

plt.legend(loc=0)

3.图像显示

plt.show() ```

2.4 练一练

练习多次plot流程(从上面复制代码,到自己电脑,确保每人环境可以正常运行),

同时明确每个过程执行实现的具体效果

3 多个坐标系显示— plt.subplots(面向对象的画图方法)

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

image-20190317134820901

可以通过subplots函数实现(旧的版本中有subplot,使用起来不方便),推荐subplots函数

  • matplotlib.pyplot.subplots(nrows=1, ncols=1, **fig_kw) 创建一个带有多个axes(坐标系/绘图区)的图

```python Parameters:

nrows, ncols : 设置有几行几列坐标系 int, optional, default: 1, Number of rows/columns of the subplot grid.

Returns:
fig : 图对象 axes : 返回相应数量的坐标系

设置标题等方法不同: set_xticks set_yticks set_xlabel set_ylabel ```

关于axes子坐标系的更多方法:参考https://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes

  • 注意:plt.函数名()相当于面向过程的画图方法,axes.set_方法名()相当于面向对象的画图方法。

```python

0.准备数据

x = range(60) y_shanghai = [random.uniform(15, 18) for i in x] y_beijing = [random.uniform(1, 5) for i in x]

1.创建画布

plt.figure(figsize=(20, 8), dpi=100)

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100)

2.绘制图像

plt.plot(x, y_shanghai, label="上海")

plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")

axes[0].plot(x, y_shanghai, label="上海") axes[1].plot(x, y_beijing, color="r", linestyle="--", label="北京")

2.1 添加x,y轴刻度

构造x,y轴刻度标签

x_ticks_label = ["11点{}分".format(i) for i in x] y_ticks = range(40)

刻度显示

plt.xticks(x[::5], x_ticks_label[::5])

plt.yticks(y_ticks[::5])

axes[0].set_xticks(x[::5]) axes[0].set_yticks(y_ticks[::5]) axes[0].set_xticklabels(x_ticks_label[::5]) axes[1].set_xticks(x[::5]) axes[1].set_yticks(y_ticks[::5]) axes[1].set_xticklabels(x_ticks_label[::5])

2.2 添加网格显示

plt.grid(True, linestyle="--", alpha=0.5)

axes[0].grid(True, linestyle="--", alpha=0.5) axes[1].grid(True, linestyle="--", alpha=0.5)

2.3 添加描述信息

plt.xlabel("时间")

plt.ylabel("温度")

plt.title("中午11点--12点某城市温度变化图", fontsize=20)

axes[0].set_xlabel("时间") axes[0].set_ylabel("温度") axes[0].set_title("中午11点--12点某城市温度变化图", fontsize=20) axes[1].set_xlabel("时间") axes[1].set_ylabel("温度") axes[1].set_title("中午11点--12点某城市温度变化图", fontsize=20)

# 2.4 图像保存

plt.savefig("./test.png")

# 2.5 添加图例

plt.legend(loc=0)

axes[0].legend(loc=0) axes[1].legend(loc=0)

3.图像显示

plt.show() ```

4 折线图的应用场景

  • 呈现公司产品(不同区域)每天活跃用户数

  • 呈现app每天下载数量

  • 呈现产品新功能上线后,用户点击次数随时间的变化

  • 拓展:画各种数学函数图像

  • 注意:plt.plot()除了可以画折线图,也可以用于画各种数学函数图像

代码:

```python import numpy as np

0.准备数据

x = np.linspace(-10, 10, 1000) y = np.sin(x)

1.创建画布

plt.figure(figsize=(20, 8), dpi=100)

2.绘制函数图像

plt.plot(x, y)

2.1 添加网格显示

plt.grid()

3.显示图像

plt.show() ```

5 小结

  • 添加x,y轴刻度【知道】

  • plt.xticks()

  • plt.yticks()
  • 注意:在传递进去的第一个参数必须是数字,不能是字符串,如果是字符串吗,需要进行替换操作

  • 添加网格显示【知道】

  • plt.grid(linestyle="--", alpha=0.5)

  • 添加描述信息【知道】

  • plt.xlabel()

  • plt.ylabel()
  • plt.title()

  • 图像保存【知道】

  • plt.savefig("路径")

  • 多次plot【了解】

  • 直接进行添加就OK

  • 显示图例【知道】

  • plt.legend(loc="best")

  • 注意:一定要在plt.plot()里面设置一个label,如果不设置,没法显示

  • 多个坐标系显示【了解】

  • plt.subplots(nrows=, ncols=)

  • 折线图的应用【知道】

  • 1.应用于观察数据的变化

  • 2.可是画出一些数学函数图像

未完待续, 同学们请等待下一期

仓库里完整资料代码:

请移步这里获取文档和代码

感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.bcls.cn/VEdL/5177.shtml

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

Jmeter学习系列之八:控制器Controllers 的入门介绍

一、Controllers 简介 Jmeter有两种类型的控制器:Samplers(取样器)和Logical Controllers(逻辑控制器);它们驱动着测试的进行取样器:让jmeter发送请求到服务器以及接收服务器的响应数据逻辑控制…

Wagtail安装运行并结合内网穿透实现公网访问本地网站界面

文章目录 前言1. 安装并运行Wagtail1.1 创建并激活虚拟环境 2. 安装cpolar内网穿透工具3. 实现Wagtail公网访问4. 固定的Wagtail公网地址 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂,风趣幽默&#xf…

数学建模【粒子群算法】

一、粒子群算法简介 这里通过共享信息的鸟群来引出粒子群算法 场景:一群鸟在森林随机寻找食物,目标是找到食物量最多的位置关键:鸟群通过叫声交流,随时共享自己的位置和发现的食物量这样鸟群就知道当前在哪个位置食物的量最多每…

开关电源PFC电路原理详解及matlab仿真

PFC全称“Power Factor Correction”,意为“功率因数校正”。PFC电路即能对功率因数进行校正,或者说能提高功率因数的电路。是开关电源中很常见的电路。 在电学中,功率因数PF指有功功率P(单位w)与视在功率S&#xff08…

HarmonyOS—LocalStorage:页面级UI状态存储

LocalStorage是页面级的UI状态存储,通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。LocalStorage也可以在UIAbility实例内,在页面间共享状态。 本文仅介绍LocalStorage使用场景和相关的装饰器:LocalStorageProp和LocalS…

springboot197基于springboot的毕业设计系统的开发

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的毕业设计系统的开发 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 …

在openEuler中通过KVM可视化安装华为FusionCompute的VRM节点

一、说明 本文是华为FusionCompute云平台配置的延续,是在CNA(ComputingNode Agent,计算节点代理)主机安装配置完成后,详细安装VRM(Virtual Resource Manager,虚拟资源管理器)节点的…

【Vue3】插槽使用和animate使用

插槽使用 插槽slot匿名插槽具名插槽插槽作用域简写 动态插槽transition动画组件自定义过渡class类名如何使用animate动画库组件动画生命周期appear transition- group过渡列表 插槽slot 插槽就是子组件中提供给父组件使用的一个占位符父组件可以在这个占位符智能填充任何模板代…

Google的firebase简介

文章目录 firebase简介firebase的一些特点 firebase简介 Firebase是一项由Google提供的云服务,旨在帮助开发者构建高质量的应用程序。Firebase 提供了各种工具和服务,涵盖了应用开发的多个方面,包括实时数据库、认证、云存储、云函数、推送通…

Java学习笔记------继承

继承 Java中提供了一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立继承关系 如图,Student和Teacher类中除了study()和teacher()两个成员函数不同,其他重复了&…

猫毛过敏却想养猫时?如何缓解猫毛过敏?宠物空气净化器推荐

作为一个新养猫的主人,一开始并没有发现对猫咪过敏。直到养了半年才意识到这个问题,而此时我已经和猫咪有了深厚的感情。我不想放弃我的猫咪,但是留着它的话,我经常会因为流眼泪、打喷嚏、眼睛发红等过敏症状而影响日常生活&#…

Web安全之浅见

备注:这是我在2017年在自己的网站上写的文章,今天迁移过来。 昨天去参加了公司组织的一个关于网络安全的培训,了解了很多关于网络安全方面的知识,也才意识到网络安全是一项极其重要的领域。 本篇文章主要聊聊Web安全。不过我对于网…

【云原生】Spring Cloud Gateway的底层原理与实践方法探究

🎉🎉欢迎光临🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟特别推荐给大家我的最新专栏《Spring 狂野之旅:从入门到入魔》 🚀 本…

[算法沉淀记录] 排序算法 —— 堆排序

排序算法 —— 堆排序 算法基础介绍 堆排序(Heap Sort)是一种基于比较的排序算法,它利用堆这种数据结构来实现排序。堆是一种特殊的完全二叉树,其中每个节点的值都必须大于或等于(最大堆)或小于或等于&am…

Linux的进程

在Linux中,可以使用多种方式来结束进程。以下是8种常见的方式: 终端中断(Ctrl C):在终端中运行的程序可以通过按下Ctrl C组合键来发送SIGINT信号,终止该进程的执行。 kill命令:使用kill命令可…

数字货币风暴:比特币价格突破历史新高,引发金融市场震荡

比特币价格在2023年突破了历史新高,达到了一个令人惊讶的水平,引发了金融市场的震荡和广泛的关注。这一价格的飙升引发了对数字货币的热议,以及对其未来发展的种种猜测。 许多人认为,比特币价格飙升的原因之一是对数字资产的日益…

QT C++实现点击按键弹出窗口并显示图片/视频|多窗口应用程序的设计和开发

一、介绍 首先,QT界面开发中主要大体分为2种多窗口的形式: 嵌入式: 新生成的窗口嵌入在主窗口内部独立窗口: 以弹窗形式的新窗口生成和展示 这里就讲解最简单的:点击案件后,跳出一个新窗口 二、代码实…

PHP WebSocket:技术解析与实用指南

本文旨在帮助初学者掌握在PHP中使用WebSocket的关键概念和技术。我们将深入讨论从建立连接、绑定到监听等各方面的操作,并提供易于理解和实践的指导。 一、socket协议的简介 WebSocket是什么,有什么优点 WebSocket是一个持久化的协议,这是…

【Java EE初阶二十三】servlet的简单理解

1. 初识servlet Servlet 是一个比较古老的编写网站的方式,早起Java 编写网站,主要使用 Servlet 的方式,后来 Java 中产生了一个Spring(一套框架),Spring 又是针对 Servlet 进行了进一步封装,从而让我们编写网站变的更简单了;Sprin…

Android全新UI框架之常用ComposeUI组件

在Compose中,每个组件都是一个带有Composable注解的函数,被称为Composable。Compose已经预置了很多基于MD设计规范的Composable组件。 在布局方面,Compose提供了Column、Row、Box三种布局组件(感觉跟flutter差不多),类似于传统视图…
推荐文章