草庐IT

Matplotlib从入门到精通01-matplotlib简介与绘图基本流程

IT从业者张某某 2023-04-13 原文

matplotlib入门案例

参考:

https://datawhalechina.github.io/fantastic-matplotlib/%E7%AC%AC%E4%B8%80%E5%9B%9E%EF%BC%9AMatplotlib%E5%88%9D%E7%9B%B8%E8%AF%86/index.html

http://c.biancheng.net/matplotlib/data-visual.html

https://www.bookstack.cn/read/huaxiaozhuan-ai/333f5abdbabf383d.md

总结

本文主要是Matplotlib从入门到精通系列第1篇,本文介绍了Matplotlib的历史,绘图元素的概念以及Matplotlib的多个层级,同时介绍了较好的参考文档置于博客前面,读者可以重点查看参考链接。本系列的目的是可以完整的完成Matplotlib从入门到精通。

Matplotlib历史

MATLAB简介:


MATlAB是美国MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、量化金融与风险管理、机器人,控制系统等领域。MATLAB在数值计算方面首屈一指,也是使用最广泛的科研绘图软件之一。优点:编程效率高 便于矩阵计算。缺点:循环效率低 封装性不好。

matplotlib简介


Matplotlib 是 Python 的绘图库。 Matplotlib 由 John D. Hunter 在 2002 年开始编写,提供了一个套面向绘图对象编程的 API 接口,能够很轻松地实现各种图像的绘制,并且它可以配合 Python GUI 工具(如 PyQt、Tkinter 等)在应用程序中嵌入图形。同时 Matplotlib 也支持以脚本的形式嵌入到 IPython shell、Jupyter 笔记本、web 应用服务器中使用。它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。
初开发的Matplotlib,仅支持绘制2d图形,后来随着版本的不断更新,Matplotlib在二维绘图的基础上,构建了一部分较为实用的3D绘图程序包,通过调用该程序包一些接口可以绘制3D散点图、3D曲面图、3D线框图等

seaborn简介


Seaborn是一种开源的数据可视化工具,它在Matplotlib的基础上进行了更高级的API封装,因此可以进行更复杂的图形设计和输出。Seaborn是Matplotlib的重要补充,可以自主设置在Matplotlib中被默认的各种参数,而且它能高度兼容NumPy与Pandas数据结构以及Scipy与statsmodels等统计模式。
Seaborn是一种开源的数据可视化工具,它在Matplotlib的基础上进行了更高级的API封装,因此可以进行更复杂的图形设计和输出。

Matplotlib特点

官网:https://matplotlib.org/
Matplotlib: Visualization with Python
Matplotlib is a comprehensive library for creating static, animated, and interactive visualizations in Python. Matplotlib makes easy things easy and hard things possible.

Create publication quality plots.
Make interactive figures that can zoom, pan, update.
Customize visual style and layout.
Export to many file formats .
Embed in JupyterLab and Graphical User Interfaces.
Use a rich array of third-party packages built on Matplotlib.

Matplotlib安装

Python 包管理器 pip 安装

pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

Linux安装

·sudo apt-get install python-matplotlib
·sudo yum install python-matplotlib     

Jupyter安装

!pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

Python 编程环境

import matplotlib 
matplotlib.__version__ 
'3.7.0'  

绘图元素

核心概念

一个完整的matplotlib图像通常会包括以下四个层级,这些层级也被称为容器(container)

Figure:顶层级,用来容纳所有绘图元素
Axes:matplotlib宇宙的核心,容纳了大量元素用来构造一幅幅子图,一个figure可以由一个或多个子图组成
Axis:axes的下属层级,用于处理所有和坐标轴,网格有关的元素
Tick:axis的下属层级,用来处理所有和刻度有关的元素

Figure:指整个图形,您可以把它理解成一张画布,它包括了所有的子元素Axes,一组特殊的Artists(如标题,图例,色彩,轴等),以及嵌套的子图;

The whole figure. The Figure keeps track of all the child Axes, a
group of ‘special’ Artists (titles, figure legends, colorbars, etc),
and even nested subfigures. The easiest way to create a new Figure is with pyplot:

fig = plt.figure()  # an empty figure with no Axes
fig, ax = plt.subplots()  # a figure with a single Axes
fig, axs = plt.subplots(2, 2)  # a figure with a 2x2 grid of Axes

Axes:绘制 2D 图像的实际区域,也称为轴域区,或者绘图区;

An Axes is an Artist attached to a Figure that contains a region for
plotting data, and usually includes two (or three in the case of 3D)
Axis objects (be aware of the difference between Axes and Axis) that
provide ticks and tick labels to provide scales for the data in the
Axes. Each Axes also has a title (set via set_title()), an x-label
(set via set_xlabel()), and a y-label set via set_ylabel()). The Axes
class and its member functions are the primary entry point to working
with the OOP interface, and have most of the plotting methods defined on them (e.g. ax.plot(), shown above, uses the plot method)

Axis:指坐标系中的垂直轴与水平轴,包含轴的长度大小(图中轴长为 7)、轴标签(指 x 轴,y轴)和刻度标签;

These objects set the scale and limits and generate ticks (the marks on the Axis) and ticklabels (strings labeling the ticks). The location of the ticks is determined by a Locator object and the ticklabel strings are formatted by a Formatter. The combination of the correct Locator and Formatter gives very fine control over the tick locations and labels.

Artist:您在画布上看到的所有元素都属于 Artist 对象,比如文本对象(title、xlabel、ylabel)、Line2D 对象(用于绘制2D图像)等。

Basically, everything visible on the Figure is an Artist (even Figure, Axes, and Axis objects). This includes Text objects, Line2D objects, collections objects, Patch objects, etc. When the Figure is rendered, all of the Artists are drawn to the canvas. Most Artists are tied to an Axes; such an Artist cannot be shared by multiple Axes, or moved from one to another.

下面这幅图是如何设置对应的元素。

绘图接口

matplotlib提供了两种最常用的绘图接口

1.显式创建figure和axes,在上面调用绘图方法,也被称为OO模式(object-oriented style)
2.依赖pyplot自动创建figure和axes,并绘图

OO模式

from matplotlib import pyplot as plt 
import matplotlib as mpl
import numpy as np 

x = np.linspace(0, 2, 100)

fig, ax = plt.subplots()  
ax.plot(x, x, label='linear')  
ax.plot(x, x**2, label='quadratic')  
ax.plot(x, x**3, label='cubic')  
ax.set_xlabel('x label') 
ax.set_ylabel('y label') 
ax.set_title("Simple Plot")  
ax.legend() 
plt.show()

输出为:

依赖pyplot模式

from matplotlib import pyplot as plt 
import matplotlib as mpl
import numpy as np 

x = np.linspace(0, 2, 100)

# fig, ax = plt.subplots()  
# ax.plot(x, x, label='linear')  
# ax.plot(x, x**2, label='quadratic')  
# ax.plot(x, x**3, label='cubic')  
# ax.set_xlabel('x label') 
# ax.set_ylabel('y label') 
# ax.set_title("Simple Plot")  
# ax.legend() 

plt.plot(x, x, label='linear') 
plt.plot(x, x**2, label='quadratic')  
plt.plot(x, x**3, label='cubic')
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()

plt.show()

基本流程:

1.导入依赖

from matplotlib import pyplot as plt 
import matplotlib as mpl
import numpy as np 

2.定义x轴和y轴数据

x = np.linspace(0,20,200)  #等差数列
y =  0.5*np.cos(2*x)*x+2.5*x  #x相关的函数

3.设置绘图样式

# 设置绘图样式,这一步不是必须的,样式也可以在绘制图像是进行设置
mpl.rc('lines', linewidth=4, linestyle='-.')

4.定义布局

# 定义布局, 这一模块的扩展参考第三章进一步学习
fig, ax = plt.subplots() 

5.绘制图像

# 绘制图像, 这一模块的扩展参考第二章进一步学习
ax.plot(x, y, label='linear')  

6.添加标签文字图例

# step6 添加标签,文字和图例,这一模块的扩展参考第四章进一步学习
ax.set_xlabel('x label') 
ax.set_ylabel('y label') 
ax.set_title("Simple Plot")  
ax.set_xlim(15,20) # x轴的刻度范围
ax.set_ylim(30,60) # y轴的刻度范围
ax.legend(labels='p',loc = 'upper right') ;

plt.show() # 

完整代码:

# 1.导入依赖定义x轴和y轴数据
from matplotlib import pyplot as plt 
import matplotlib as mpl
import numpy as np 

#2.定义x轴和y轴数据
x = np.linspace(0,20,200)  #等差数列
y =  0.5*np.cos(2*x)*x+2.5*x  #x相关的函数

#3.设置绘图样式
# 设置绘图样式,这一步不是必须的,样式也可以在绘制图像是进行设置
mpl.rc('lines', linewidth=4, linestyle='-.')


#4.定义布局
# 定义布局, 这一模块的扩展参考第三章进一步学习
fig, ax = plt.subplots() 


#5.绘制图像
# 绘制图像, 这一模块的扩展参考第二章进一步学习
ax.plot(x, y, label='linear')  

# 6.添加标签文字图例
# step6 添加标签,文字和图例,这一模块的扩展参考第四章进一步学习
ax.set_xlabel('x label') 
ax.set_ylabel('y label') 
ax.set_title("Simple Plot")  
ax.set_xlim(15,20) # x轴的刻度范围
ax.set_ylim(30,60) # y轴的刻度范围
ax.legend(labels='p',loc = 'upper right') 

plt.show() # 

输出为:

有关Matplotlib从入门到精通01-matplotlib简介与绘图基本流程的更多相关文章

  1. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  2. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  3. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  4. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  5. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  6. 【Java入门】使用Java实现文件夹的遍历 - 2

    遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg

  7. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  8. HBase Region 简介和建议数量&大小 - 2

    Region是HBase数据管理的基本单位,region有一点像关系型数据的分区。region中存储这用户的真实数据,而为了管理这些数据,HBase使用了RegionSever来管理region。Region的结构hbaseregion的大小设置默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分。刚拆分时,两个子Region都位于当前的RegionServer,但处于负载均衡的考虑,HMaster有可能会将某个Region转移给其他的RegionServer。RegionSplit时机:当1个region中的某个Store下所有StoreFile

  9. ruby-on-rails - 使用 HTTParty 的非常基本的 Rails 4.1 API 调用 - 2

    Rails相对较新。我正在尝试调用一个API,它应该向我返回一个唯一的URL。我的应用程序中捆绑了HTTParty。我已经创建了一个UniqueNumberController,并且我已经阅读了几个HTTParty指南,直到我想要什么,但也许我只是有点迷路,真的不知道该怎么做。基本上,我需要做的就是调用API,获取它返回的URL,然后将该URL插入到用户的数据库中。谁能给我指出正确的方向或与我分享一些代码? 最佳答案 假设API为JSON格式并返回如下数据:{"url":"http://example.com/unique-url"

  10. ruby-on-rails - Rails 基本 Base64 身份验证 - 2

    我正在尝试复制此GETcurl请求:curl-D--XGET-H"Authorization:BasicdGVzdEB0YXByZXNlYXJjaC5jb206NGMzMTg2Mjg4YWUyM2ZkOTY2MWNiNWRmY2NlMTkzMGU="-H"Content-Type:application/json"http://staging.example.com/api/v1/campaigns在Ruby中,通过电子邮件+apikey生成身份验证:auth="Basic"+Base64::encode64("test@example.com:4c3186288ae23fd9661c

随机推荐