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

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

时间:2024-02-26 21:25:58浏览次数:28  
标签:md plt plot -- axes Matplotlib label 文档 ticks

本系列文章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 准备数据并画出初始折线图

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:要显示的刻度值

  
  
# 增加以下两行代码
  
  

  
  
# 构造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 下:

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




* windows和mac下:双击安装


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

```python
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

1.4 添加网格显示

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

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

1.5 添加描述信息

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

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

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

1.6 图像保存

  
  
# 保存图片到指定路径
  
  
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()

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

2.1 多次plot

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

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

  
  
# 增加北京的温度数据
  
  
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()将图例显示出来。
  
  
# 绘制折线图
  
  
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

完整代码:

  
  
# 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(坐标系/绘图区)的图
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()

4 折线图的应用场景

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

  • 呈现app每天下载数量

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

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

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

代码:

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

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

仓库里完整资料代码:

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

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

标签:md,plt,plot,--,axes,Matplotlib,label,文档,ticks
From: https://www.cnblogs.com/yinuo112/p/18035369

相关文章

  • isaac sim 文档翻译
    目录4.1.HelloWorld4.1.1.LearningObjectives4.1.2.GettingStarted4.1.3.CodeOverview4.1.3.1.SingletonWorld4.1.4.AddingtotheScene4.1.5.InspectingObjectProperties4.1.5.1.ContinuouslyInspectingtheObjectPropertiesduringSimulation4.1.6.Addin......
  • 【Django开发】0到1开发美多shop项目:用户登录模块开发。全md文档笔记(附代码 文档)
    本系列文章md笔记(已分享)主要讨论django商城项目相关知识。项目利用Django框架开发一套前后端不分离的商城项目(4.0版本)含代码和文档。功能包括前后端不分离,方便SEO。采用Django+Jinja2模板引擎+Vue.js实现前后端逻辑,Nginx服务器(反向代理)Nginx服务器(静态首页、商品详情页、uwsg......
  • 前端根据生成的文档流下载、预览文档
    下载:axios({  url:`url`,  method:"post",  data:{   参数...  },  responseType:"blob", }).then((res)=>{constlink=document.createElement("a");   letblob=newBlob([res.data],{type:"......
  • MDC300-16-ASEMI电源控制柜MDC300-16
    编辑:llMDC300-16-ASEMI电源控制柜MDC300-16型号:MDC300-16品牌:ASEMI封装:M25最大重复峰值反向电压:1600V最大正向平均整流电流(Vdss):300A功率(Pd):大功率芯片个数:6引脚数量:5类型:整流模块、整流桥正向浪涌电流:600A正向电压:1.35V最大输出电压(RMS):封装尺寸:如图工作温度:-40......
  • 在MFC MDI项目中创建子窗口并显示
    该项目是基于MFCMDI向导创建的项目,建议创建MDI项目的类向导中,在最后选择生成的类中,view类基于CFormView,要在MDI项目中创建自定义的子窗口并显示在矿建窗口中使用以下步骤:1、使用类向导创建基于MFC的类,基类选择CFormView(这个有类似对话框的功能),当然也可以使用CView。2、创建完成......
  • 【国产化】禁止使用不安全的密码算法:DES、RC2,RSA(1024位及以下),MD5,SHA1
    一、引言随着互联网的普及和技术的发展,网络安全问题日益严重。密码算法作为网络安全的基石,其安全性直接关系到用户数据的安全。一些不安全的密码算法不断被曝光,给用户带来了极大的安全隐患。二、不安全的密码算法1.DESDES(DataEncryptionStandard)是一种对称加密算法,自1977年......
  • 【机器学习算法】KNN鸢尾花种类预测案例和特征预处理。全md文档笔记(已分享,附代码)
    本系列文章md笔记(已分享)主要讨论机器学习算法相关知识。机器学习算法文章笔记以算法、案例为驱动的学习,伴随浅显易懂的数学知识,让大家掌握机器学习常见算法原理,应用Scikit-learn实现机器学习算法的应用,结合场景解决实际问题。包括K-近邻算法,线性回归,逻辑回归,决策树算法,集成学习,聚......
  • Elastic学习之旅(4)ES文档CRUD操作
    大家好,我是Edison。上一篇:ES必备基础概念一览ES文档CRUD介绍和MongoDB一样,文档的CRUD是我们学习ES的必备操作,下图展示了ES文档的CRUD概要:从上图可以知道,ES文档除了CRUD外,还多了一个Index操作,它的功能Create类似,但又有点不同:Create-如果ID存在,则会失败;否则新增成功;Ind......
  • Java基础12:JavaDoc生成文档
    JavaDoc1.javadoc命令是用来生成自己API文档的2.参数信息2.1@author作者名2.2@version版本号2.3@since指明需要最早使用的jdk版本2.4@param参数名2.5@return返回值情况2.6@throws异常抛出情况 ......
  • 全能代码生成器,自动生成前后端代码、生成项目框架、生成JavaBean、生成数据库文档、自
    TableGo_20240224v8.4.0正式版发布,此次版本累计更新如下: 1、TableGo专属LOGO上线 2、生成数据库文档ER图新增备注+字段名的生成配置 3、生成自定义文件功能新增临时参数配置,用于使用临时数据生成自定义文件 4、新增基于Excel数据生成自定义文件,可导入Excel数据生成程序代码......