机器学习--Matplotlib

机器学习–Matplotlib

Matplotlib

image-20240118214913326

  • 是专门用于开发2D图表(包括3D图表)
  • 以渐进、交互式方式实现数据可视化

简单的Matplotlib画图 以折线图为例

matplotlib.pyplot模块

matplotlib.pytplot包含了一系列类似于matlab的画图函数。

import matplotlib.pyplot as plt

图形绘制流程:

1.创建画布 – plt.figure()

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

2.绘制图像 – plt.plot(x, y)

以折线图为例

3.显示图像 – plt.show()

折线图绘制与显示

举例:展现上海一周的天气**,**比如从星期一到星期日的天气温度如下:

import matplotlib.pyplot as plt
# 1.创建画布
plt.figure(figsize=(10, 10), dpi=100)
# 2.绘制折线图
plt.plot([1, 2, 3, 4, 5, 6 ,7], [17,17,18,15,11,11,13])
# 3.显示图像
plt.show()

Matplotlib图像结构

image-20240118215512281

例子:一个完整的流程

我们通过天气温度变化的绘图来融合所有的基础API使用

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

image-20240118215640044

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

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()

image-20240118215720144

添加自定义x,y刻度

  • plt.xticks(x, **kwargs)
    • x:要显示的刻度值
  • plt.yticks(y, **kwargs)
    • y:要显示的刻度值
# 增加以下两行代码
# 构造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])

image-20240118215825132

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

中文显示问题解决

解决方案一:

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

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

步骤二:安装字体

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

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

windows和mac下:双击安装

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

cd ~/.matplotlib
rm -r *

步骤四:修改配置文件matplotlibrc

vi ~/.matplotlib/matplotlibrc

将文件内容修改为:

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

解决方案二:

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

from pylab import mpl
\# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]

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

# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False

添加网格显示

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

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

添加描述信息

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

  • 通过fontsize参数可以修改图像中字体的大小
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点0分到12点之间的温度变化图示", fontsize=20)

image-20240118220308250

图像保存

# 保存图片到指定路径

plt.savefig("test.png")

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

完整代码:

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()

例子:在一个坐标系中绘制多个图像

多次plot

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

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

image-20240118220602425

# 增加北京的温度数据
y_beijing = [random.uniform(1, 3) for i in x]
# 绘制折线图
plt.plot(x, y_shanghai)
# 使用多次plot可以画多个折线
plt.plot(x, y_beijing, color='r', linestyle='--')

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

设置图形风格

颜色和线的类型

颜色标记描述
‘r’红色
‘g’绿色
‘b’蓝色
‘c’青色
‘m’品红
‘y’黄色
‘k’黑色
‘w’白色
类型简写说明
‘solid’ (默认)‘-’实线
‘dotted’‘:’点虚线
‘dashed’‘–’破折线
‘dashdot’‘-.’点划线
‘None’‘’ 或 ’ ’不画线

显示图例

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

# 绘制折线图
plt.plot(x, y_shanghai, label="上海")
\# 使用多次plot可以画多个折线
plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")

\# 显示图例
plt.legend(loc="best")

完整代码

# 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()

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

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

image-20240118221403417

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

  • matplotlib.pyplot.subplots(nrows=1, ncols=1, **fig_kw) 创建一个带有多个axes(坐标系/绘图区)的图
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_方法名()**相当于面向对象的画图方法

# 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()

折线图的应用场景

  • 呈现公司产品(不同区域)每天活跃用户数
  • 呈现app每天下载数量
  • 呈现产品新功能上线后,用户点击次数随时间的变化
  • 拓展:画各种数学函数图像
    • 注意:plt.plot()除了可以画折线图,也可以用于画各种数学函数图像
image-20240118221623760
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()

小结

  • 添加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.可是画出一些数学函数图像

更详细的教程:Matplotlib 教程 | 菜鸟教程 (runoob.com)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

7.【CPP】String类

一.汉字的编码 我们知道计算机存储英文字母,标点,数字用的是ascall码,128种用一个字节表示绰绰有余。而汉字远远不止128种,因此汉字需要两个字节表示。 1.gbk编码中汉字占两个字节。 2.utf-8中,一个汉字占三个字节。…

Java - 深入四大限流算法:原理、实现与应用

文章目录 Pre概述简单计数器原理实现测试优缺点 滑动窗口算法原理实现测试优缺点 漏桶算法原理实现测试优缺点 令牌桶算法原理实现测试优缺点 小结 Pre 深入理解分布式技术 - 限流 并发编程-25 高并发处理手段之消息队列思路 应用拆分思路 应用限流思路 SpringBoot - 优雅…

(上) C语言中的语句分类及分支语句:if语句、switch语句介绍

目录 前言 一、语句的分类 1. 空语句 2. 表达式语句 3. 函数调用语句 4. 复合语句 5. 控制语句 二、分支语句 1. if语句 (1) if的使用 (2) else的使用 (3) 分支中包含多条语句 (4) 嵌套if (5) 悬空else问题 2. switch语句 (1) if语句和switch语句的对比 (2) s…

摇臂MG995舵机模块实战教程

简介 舵机也叫伺服电机,最早用于船舶上实现其转向功能,由于可以通过程序连续控制其转角,因而被广泛应用智能小车以实现转向以及机器人各类关节运动中。舵机(英文叫Servo):它由直流电机、减速齿轮组、传感器…

计算机网络——面试问题

1 从输⼊ URL 到⻚⾯展示到底发⽣了什么? 1. 先检查浏览器缓存⾥是否有缓存该资源,如果有直接返回;如果没有进⼊下⼀ 步⽹络请求。 2. ⽹络请求前,进⾏ DNS 解析 ,以获取请求域名的 IP地址 。 3. 浏览器与服务器…

Sqoop与Kafka的集成:实时数据导入

将Sqoop与Kafka集成是实现实时数据导入和流处理的关键步骤之一。Sqoop用于将数据从关系型数据库导入到Hadoop生态系统中,而Kafka则用于数据流的传输和处理。本文将深入探讨如何使用Sqoop与Kafka集成,提供详细的步骤、示例代码和最佳实践,以确…

Git与GitHub零基础教学

大家好,我是星恒,这个帖子给大家分享的是git和github的全套教程,包含github初始,git常用命令以及基本使用,git的ssh链接github,github使用token登录,github和idea的配合,一些平时常用…

适合初学者的 机器学习 资料合集(可快速下载)

AI时代已经来临,机器学习成为了当今的热潮。但是,很多人在面对机器学习时却不知道如何开始学习。 今天,我为大家推荐几个适合初学者的机器学习开源项目,帮助大家更好地了解和掌握机器学习的知识。这些项目都是开源的,…

EtherNet/IP开发:C++开发CIP源代码

① 介绍一下CIP CIP是一种考虑到自动化行业而设计的通用协议。然而,由于其开放性,它可以并且已经应用于更多的领域。CIP网络库包含若干卷: 第1卷介绍了适用于所有网络自适应的CIP的常见方面。本卷包含通用对象库和设备配置文件库&#xff0…

信息安全的脆弱性及常见安全攻击

目录 信息安全概述信息安全现状及挑战传统安全防护逐步失效 安全风险能见度不足看不清资产看不见新型威胁看不见内网潜藏风险 常见的网络安全术语信息安全的脆弱性及常见安全攻击网络环境的开放性协议栈的脆弱性及常见攻击常见安全风险 协议栈自身的脆弱性网络的基本攻击模式 链…

Dubbo的几个序列化方式

欢迎订阅专栏,会分享Dubbo里面相关的技术实现 这篇文章就不详细的介绍每种序列化方式的实现细节,大家可以自行去问度娘,我也会找一些资料。需要注意的是,这个先后顺序不表示性能优越 ObjectInput、ObjectOutput 这两是Dubbo序列…

Linux_清理docker磁盘占用

文章目录 前言一、docker system 命令1. docker system df(本文重点使用)2. docker system prune(本文重点使用)3. docker system info4. docker system events 二、开始清理三、单独清理Build Cache四、单独清理未被使用的网络 前…

如何理解 GO 语言的接口 - 鸭子模型

个人认为,要理解 Go 的接口,一定先了解下鸭子模型。 鸭子模型 那什么鸭子模型? 鸭子模型的解释,通常会用了一个非常有趣的例子,一个东西究竟是不是鸭子,取决于它的能力。游泳起来像鸭子、叫起来也像鸭子…

【Emgu CV教程】5.6、几何变换之LinearPolar()极坐标变换

LinearPolar()线性极坐标转换函数用于将图像从笛卡尔坐标系转换为极坐标系,太难懂了,还是简单的说吧 笛卡尔坐标系就是平面直角坐标系,用X轴、Y轴表示的图像,最常用的表示方式,比如灰度图Point(360,100) 230&#xff…

数据结构与算法教程,数据结构C语言版教程!(第五部分、数组和广义表详解)四

第五部分、数组和广义表详解 数组和广义表,都用于存储逻辑关系为“一对一”的数据。 数组存储结构,99% 的编程语言都包含的存储结构,用于存储不可再分的单一数据;而广义表不同,它还可以存储子广义表。 本章重点从矩阵…

【工具使用】Keil5软件使用-基础使用篇

一、概述 本文面向未接触过Keil的新手,如果是职场老手可跳过此篇。为了快速上手,本文会跳过很多细节及解释,如需要了解原理,请移步进阶篇。 二、 软件介绍 Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调…

【Git不走弯路】(二)提交与分支的本质

1. 前言 提交与分支是Git中两个基本对象,对初学者而言需要花些时间理解。正如我们之前所说,计算机中很多新概念是新瓶装旧酒。计算机技术来源于需求,服务于需求,需求是计算机技术的出发点和落脚点。梳理清楚工程实践中&#xff0…

【开源】基于JAVA的停车场收费系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 停车位模块2.2 车辆模块2.3 停车收费模块2.4 IC卡模块2.5 IC卡挂失模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 停车场表3.2.2 车辆表3.2.3 停车收费表3.2.4 IC 卡表3.2.5 IC 卡挂失表 四、系统实现五、核心代码…

2023.1.21 关于 Redis 主从复制详解

目录 引言 单点问题 分布式系统 ​​​​​​​​​​​​​​主从模式 配置 Redis 主从结构 断开主从关系 切换主从关系 补充知识点一 只读 网络延迟 拓扑结构 一主一从 一主多从 树形主从结构 主从复制的基本流程 数据同步 replicationid offset pzync 运…

transdata笔记:手机数据处理

1 mobile_stay_duration 每个停留点白天和夜间的持续时间 transbigdata.mobile_stay_duration(staydata, col[stime, etime], start_hour8, end_hour20) 1.1 主要参数 staydata停留数据(每一行是一条数据)col 列名,顺序为[‘starttime’,…