当前位置: 首页 > news >正文

Matplotlib绘图从零入门到实践(含各类用法详解)

一、引入

Matplotlib 是一个Python的综合库,用于在 Python 中创建静态、动画和交互式可视化。
本教程包含笔者在使用Matplotlib库过程中遇到的各类完整实例与用法还有遇到的库理论问题,可以根据自己的需要在目录中查询对应的用法、实例以及第四部分关于理论的讨论。
教程参考了Eric Matthes的Python Crash Course中的Matplotlib部分和Matplotlib官方示例。
如果你希望了解更详细的用法和实例,可以查看Matplotlib官方网站和Python Crash Course。

二、用法部分

①基础类

1.安装Matplotlib

sudo pip install matplotlib  # in Linux

2.引用Matplotlib常用模块

import matplotlib.pyplot as plt  # 引入matplotlib的pyplot模块

3.绘制图形

values = [1, 2, 3, 4, 5]  # x值列表
squares = [1, 4, 9, 16, 25]  # y值列表
plt.plot(values, squares)  # 绘图

4.查看图形

plt.show()  # 打开matplotlib查看器,显示绘制的图形

5.保存图形

plt.savefig("file_name.png",bbox_inches="tight")#保存文件,bbox_inches可选择是否紧凑裁剪

②调节设置类

1.线宽调节

plt.plot(x, y, linewidth=5)  # 线宽设置为5

2.设置标题

Figure标题

figure标题在整个figure的上部正中。

fig.suptitle("figure_suptitle")  # 为Figure设置标题

Axes标题

ax.set_title("title")  # 为Axes设置标题

一般情况标题

对于不区分axes和figure的情况,比如一个figure里只有一个axes,以下命令也可以使用

plt.title("title", fontsize=24)  # 设置标题,字体大小设置为24

3.设置轴标签

plt.xlabel("Value", fontsize=14)  # 设置图标题x轴标签,字体大小设置为14
plt.ylabel("Square of Value", fontsize=14)  # 设置y轴标签,字体大小设置为14

4.设置轴刻度

plt.tick_params(axis="both", which="major", labelsize=14)  # 设置各轴刻度为等距,标签大小设置为14,major为应用参数的刻度组

5.隐藏坐标轴

若对图像有洁净的追求,希望隐去坐标轴,可以使用

plt.axis("off")  # 隐藏坐标轴

6.设置figure尺寸

plt.figure(figsize=(10, 6))  # 设置figure尺寸,单位为英寸

7.设置轴

ax为一个axes artist,设置x轴与y轴的限幅,并设置x轴和y轴的标签

ax.set(xlim=[0, 3], ylim=[-4, 10], xlabel='Time [s]', ylabel='Z [m]')

8.设置标签

为点设置格式化标签

需要格式化的标签时,为label添加f

scat = ax.scatter(t[0], z[0], c="b", s=5, label=f'v0 = {v0} m/s')  # 需要格式化的标签时,为label添加f

9.设置图例

ax.legend()  # 将添加过label的artists添加到四角的图例上

③数值处理类

1.生成x值和对应y值[规律]

法1:range()

和法3类似,法3更优

values = list(range(1, 101))  # list搭配range生成多个数的列表
squares = [value ** 2 for value in values]  # 根绝values生成squares

法2:numpy.linspace()

注:该方法引用Numpy库

x = np.linspace(0, 2 * np.pi, 200)  # np.linspace(起始点,终止点,采样个数)
y = np.sin(x)

法3:np.arange()

和法1类似,优势在于不用再转一次列表。
注:该方法引用Numpy库

x = np.arange(0.0, 2.0, 0.01)

2.生成x值和对应y值[随机]

④常见图形类

1.生成点

plt.scatter(values, squares, color="red", s=10)  # 绘制散点图,s为点大小,color为颜色

2.生成线

生成线的本质是生成足够多的点,使之连结,在视觉上呈现线的感觉。

x = np.linspace(0, 2 * np.pi, 200)  # 生成足够多的x
y = np.sin(x)  # 生成足够多对应的y
plt.plot(x, y)  # 绘图

⑤美化类

1.颜色映射

颜色映射可以将数值大小映射为颜色深浅,从而绘制出数值与颜色相关的图像,比如温度低的位置颜色浅,温度高的地方颜色深。

法1:数值颜色映射

plt.scatter(x, y, c=y, cmap="Reds")  # 颜色映射
# https://matplotlib.org/stable/gallery/color/colormap_reference.html#sphx-glr-gallery-color-colormap-reference-py

如果按照点的先后顺序颜色映射,需要先为规则c生成数值列表

法2:顺序颜色映射

points_number = list(range(101))  # 生成0~100的cmap顺序列表
plt.scatter(x, y, c=points_number, cmap="Blues", s=5)  # 按照顺序颜色映射

⑥动画类

在主代码中写出绘画0时刻的图的代码

三、实例部分

查看github或gitee上的实例代码

四、理论部分

1.Artist、Figure、Axes、Axis的区别

Artist

基本上,图形上可见的所有内容都是Artist,包括Figure、Axes和Axis对象。
Text对象、Line2D对象、collections对象、Patch 对象等也是Artist。
当 Figure 被渲染时,所有的 Artists 都被绘制到画布上。
大多数Artist和Axes挂钩,不能在Axes间切换也不能被Axes共享。

Figure

Figure是整个图形,可以看做窗口,一个Figure可以包含多个Axes。
Figure可以用pyplot.figure()单独创建

fig = plt.figure()  # 创建无Axes的空Figure窗口
fig, ax = plt.subplots()  # 创建带有一个Axes的Figure

Figure也可以用pyplot.subplots()和Axes一起创建。

Axes

Axes 是附加到 Figure 的 Artist,它包含一个用于绘制数据的区域。
Axes通常用pyplot.subplots()和Figure一起创建。
使用axes_name.plot()来绘制数据

fig, ax = plt.subplots()  # 创建带有一个Axes的Figure
ax.plot([1, 2, 3, 4], [1, 4, 2, 3])  # 在Axes上绘制数据

一个Figure上可以有多个Axes。

fig, axs = plt.subplots(2, 2)  # 创建一个带有2X2个Axes的Figure

Axis

一个Axes通常包含两个带有刻度和刻度标签Axis,在3D情况下,一个Axes包含3个Axis,这和我们日常生活中的xyz坐标系含有x、y、z轴是相同的概念。

2.输入数据的要求

Matplotlib要求输入的数据格式为numpy的array,也就是numpy数组。

List与Array区别

list是python的内置数据类型,而 array数组需要导入numpy库,不属于内置类型。
list中的数据类不必相同的,即每个元素可以是不同的数据类型。
而array则是由numpy封装,存放的元素都是相同的数据类型。

Matrix的输入

矩阵Matrix无法直接作为数据输入,需要先通过numpy.asarray()转化为"类数组"才能输入Matplotlib

a = np.matrix([[1, 2], [3, 4]])  # a为numpy矩阵Matrix
a_asarray = np.asarray(a)  # a转化为类数组a_asarray
http://www.lryc.cn/news/25422.html

相关文章:

  • C语言 入门教程||C语言 指针||C语言 字符串
  • Nacos2.x+Nginx集群配置
  • Android源码分析 - InputManagerService与触摸事件
  • python库--urllib
  • 美团前端二面常考react面试题及答案
  • 环境搭建04-Ubuntu16.04更改conda,pip的镜像源
  • 【C++进阶】四、STL---set和map的介绍和使用
  • JavaSE学习进阶 day1_01 static关键字和静态代码块的使用
  • 苹果笔可以不买原装吗?开学必备性价比电容笔
  • 数据库连接与properties文件
  • Linux上的校验和验证
  • 杂记——14.git在idea上的使用及其实际开发介绍
  • 记一次Nodejs减低npm版本的踩坑日记
  • 【iOS】—— 初识RAC响应式编程
  • Java——面向对象
  • 电影《毒舌律师》观后感
  • 【活学活用掌握trap命令】
  • 计算机组成原理4小时速成6:输入输出系统,io设备与cpu的链接方式,控制方式,io设备,io接口,并行串行总线
  • MyBatis源码分析(三)SqlSession的执行主流程
  • 环境搭建01-Ubuntu16.04如何查看显卡信息及安装NVDIA显卡驱动
  • 内网渗透测试理论学习之第四篇内网渗透域的横向移动
  • 20 | k8s v1.20集群搭建master和node
  • 《商用密码应用与安全性评估》第一章密码基础知识1.1应用概念
  • 【博学谷学习记录】超强总结,用心分享丨人工智能 深度学习 神经网络基础知识点总结
  • Python+tkinter添加滚动条
  • 大V龚文祥造谣董明珠恋情被禁言
  • 深入浅出Reactjs
  • 《C++ Primer Plus》第18章:探讨 C++ 新标准(1)
  • PCB板漏孔、漏槽怎么办?看工程师避坑“SOP”
  • mysql数据库同步方案:springboot+集成cannal