Python Matplotlib初阶使用入门教程

目录
  • 0. 前言
  • 1. 创建Figure的两种基本方法
    • 1.1 第1种方法
    • 1.2 第2种方法
  • 2. Figure的解剖图及各种基本概念
    • 2.1 Figure
    • 2.2 Axes
    • 2.3 Axis
    • 2.4 Artist
  • 3. 绘图函数的输入
  • 4. 面向对象接口与pyplot接口
  • 5. 绘图复用实用函数例

0. 前言

本文介绍Python Matplotlib库的入门求生级使用方法。

为了方便以下举例说明,我们先导入需要的几个库。以下代码在Jupyter Notebook中运行。

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

1. 创建Figure的两种基本方法

1.1 第1种方法

注意,Figure在Matplotlib中是一个专有名词(后面会有解释),Matplotlib把你的数据以图的形式绘制在Figure(比如说,windows, Jupyter wgets, etc.)中。创建一个Figure的基本方式之一就是使用pyplot.subplots.
如下所示,我们用pyplot.subplots创建了一个Figure,其中包含一个axes(同样,这是一个Matplotlib专有名词,后面再进行解释),然后再利用axes.plot画图。

fig, ax = plt.subplots()  # Create a figure containing a single axes.
x    = np.arange(100)
Fs   = 100  # 100Hz sampling rate
Fsin = 2    # 2Hz
y = np.sin(2*np.pi*Fsin*(1/Fs)*x)
ax.plot(x, y)  # Plot some data on the axes.

以上代码画了一个正弦波的波形。

1.2 第2种方法

许多其它的绘图工具库或者语言并不要求你必须显式地(explicity)先创建一个Figure以及axes,比如说在Matlab中,你直接如下所示一样直接调用plot()函数就一步到位地得到所想要的图,如果现成的axes的话,matlab会为你创建一个.

plot([1, 2, 3, 4], [1, 4, 2, 3]) % MATLAB plot.

事实上,你也可以以这种方式使用Matplotlib。对于每一个axes的绘图方法,matplotlib.pyplot模块中都有一个对应的函数执行在当前axes上画一个图的功能,如果还没有已经创建好的axes的话,就先为你创建一个Figure和axes,正如在Matlab中一样。因此以上例子可以更简洁地写为:

plt.plot(x, y)  # Call plt.plot() directly

同样会得到以上相同的图。

2. Figure的解剖图及各种基本概念

上图出自Ref1。图中给出了matplotlib中Figure(没有想好这个到底应该怎么翻译。本来想是不是可以译成画布,但是画布对应英文中的Canvas。而Figure的说明中明确指出了Figure包含了Canvas,如果说Canvas是指画布的话,那Figure其实是指整个一幅画。还是不勉强吧,直接用英语单词好了)

2.1 Figure

The whole figure.整幅画或整个图。Figure保持其中所有的child axes的信息,以及一些特殊的artists (titles, figure legends, etc)(这里artist又是很难翻译的一个词,指的是标题、图例等图的说明性信息对象),以及画布(canvas)。
可以说Figure是幕后的大Boss管理着所有的信息,是它真正执行为你绘制图画的动作。但是作为用户,它反而是不太显眼的,对你来说多少有点隐形的样子。一个Figure中可以包含任意多个axes,通常至少包含一个。

以下是创建Figure的几种方式,其中前两种在上面的例子已经介绍,也是常用的。
最后一种是创建一个空的Figure,可以在之后给它添加axes。这种做法不常见,属于高阶用法,方便高阶用户进行更加灵活的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
fig = plt.figure()  # an empty figure with no Axes

2.2 Axes

Axes原本是axis(坐标)的复数,所以可以翻译成坐标系?就这么理解着吧。一个给定的Figure可以包含多个axes,但是一个axes对象只能存在于一个Figure中。(按坐标系理解的话,故名思意)一个Axes包含多个axis,比如说在2D(2维)的图中有两个坐标轴,在3D(3维)图中有三个坐标轴。
在一个axes中可以通过以下一些方法来设置图的一些属性:
set_xlim(),set_ylim():分别用于设置x轴、y轴的表示范围
set_title():设置图的标题
set_xlabel(),set_ylabel(): 分别用于设置x轴和y轴的标签

Axes类和它的成员函数是matplolib的面向对象的界面的主要入口(关于面向对象接口与pyplot接口参见后面的说明)

2.3 Axis

这个就是我们常说的坐标轴。不再赘述。事实上,越解释越糊涂。。。有兴趣的小伙伴可以看看matplotlib文档的原始说明,反正我是越看越晕。。。还不如直接看代码例直到怎么使用就可以了。

2.4 Artist

Basically, everything you can see on the figure is an artist (even the Figure, Axes, and Axis objects). This includes Text objects, Line2D objects, collections objects, Patch objects ... (you get the ea). 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.

晕菜。。。同上,还不如直接看代码例直到怎么使用就可以了^-^

3. 绘图函数的输入

所有的绘图函数都接受numpy.array or numpy.ma.masked_array作为输入。
像pandas中的数据对象以及numpy.matrix等类似于数组('array-like')的对象如果直接用于绘图函数的输入的话有可能会产生意想不到的结果。所以最好把它们先转换成numpy.array对象再传递给绘图函数。

# For example, to convert a pandas.DataFrame
a = pd.DataFrame(np.random.rand(4, 5), columns = list('abcde'))
a_asarray = a.values

# and to convert a numpy.matrix
b = np.matrix([[1, 2], [3, 4]])
b_asarray = np.asarray(b)

4. 面向对象接口与pyplot接口

如上所述,有两种基本的使用Matplotlib的方法。

(1) 显式地创建Figure和axes,然后调用方法作用于它们,这个称之为面向对象风格。

(2) 直接调用pyplot进行绘图,这个姑且称之为快捷风格吧

面向对象风格的使用方法示例:

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

# Note that even in the OO-style, we use `.pyplot.figure` to create the figure.
fig, ax = plt.subplots()  # Create a figure and an axes.
ax.plot(x, x, label='linear')  # Plot some data on the axes.
ax.plot(x, x**2, label='quadratic')  # Plot more data on the axes...
ax.plot(x, x**3, label='cubic')  # ... and some more.
ax.set_xlabel('x label')  # Add an x-label to the axes.
ax.set_ylabel('y label')  # Add a y-label to the axes.
ax.set_title("Simple Plot")  # Add a title to the axes.
ax.legend()  # Add a legend.

快捷(pyplot)风格的使用方法示例:

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

plt.plot(x, x, label='linear')  # Plot some data on the (implicit) axes.
plt.plot(x, x**2, label='quadratic')  # etc.
plt.plot(x, x**3, label='cubic')
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()

以上代码中同时给出了两种风格中的label、title、legend等设置的方法或函数使用例。

以上两段代码示例产生同样的绘图效果:

此外,还有第三种方法,用于在GUI应用中的嵌入式Matplotlib。这个属于进阶用法,在本文就不做介绍了。

面向对象风格和pyplot风格功能相同同样好用,你可以选择使用任何一种风格。但是最好选定其中一种使用,不要昏庸。一般来说,建议仅在交互式绘图(比如说在Jupyter notebook)中使用pyplot风格,而在面向非交互式绘图中则推荐使用面向对象风格。

注意,在一些比较老的代码例中,你还可以看到使用pylab接口。但是现在不建议这样用了(This approach is strongly discouraged nowadays and deprecated)。这里提一嘴只是因为偶尔你还可能看到它,但是,在新的代码不要用就好了。

5. 绘图复用实用函数例

通常我们会发现需要重复绘制很多相类似的图,只是采用不同的数据而已。为了提高效率减少错误,可以考虑将一些绘图处理封装成一个函数,以便于重复使用,避免过多的冗余代码。以下是一个这样的模板例子:

def my_plotter(ax, data1, data2, param_dict):
    """
    A helper function to make a graph
    Parameters
    ----------
    ax : Axes
        The axes to draw to
    data1 : array
       The x data
    data2 : array
       The y data
    param_dict : dict
       Dictionary of kwargs to pass to ax.plot
    Returns
    -------
    out : list
        list of artists added
    """
    out = ax.plot(data1, data2, **param_dict)
    return out

然后你可以以如下方式使用:

x = np.linspace(0, 5, 20)
fig, ax = plt.subplots()
x2 = x**2
x3 = x**3
my_plotter(ax, x, x2, {'marker': 'o'})
my_plotter(ax, x, x3, {'marker': 'd'})

或者,如果你需要多个子图的话,

x = np.linspace(0, 5, 20)
x2 = x**2
x3 = x**3
fig, (ax1, ax2) = plt.subplots(1, 2)
my_plotter(ax1, x, x2, {'marker': 'x'})
my_plotter(ax2, x, x3, {'marker': 'o'})

fig, ax = plt.subplots(1, 2)
my_plotter(ax[0], x, x2, {'marker': 'x'})
my_plotter(ax[1], x, x3, {'marker': 'o'})

注意,如以上代码例所示,当创建了多个子图时,有两种引用axes的方式。第一种方式中,创建时直接将两个axes(每个子图对应一个axes)赋给ax1和ax2。第一种方式中,创建时直接将两个axes赋给一个axes数组ax,然后以ax[0]和ax[1]的格式进行引用。

Ref1: Usage Gue — Matplotlib 3.4.3 documentation

到此这篇关于Python Matplotlib初阶使用入门的文章就介绍到这了,更多相关Python Matplotlib使用入门内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python Matplotlib数据可视化(1):简单入门

    1 matplot入门指南 matplotlib是Python科学计算中使用最多的一个可视化库,功能丰富,提供了非常多的可视化方案,基本能够满足各种场景下的数据可视化需求.但功能丰富从另一方面来说也意味着概念.方法.参数繁多,让许多新手望而却步. 据我了解,大部分人在对matplotlib接触不深时都是边画图边百度,诸如这类的问题,我想大家都似曾相识:Python如何画散点图,matplotlib怎么将坐标轴标签旋转45度,怎么设置图例字体大小等等.无论针对哪一个问题,往往都有多种解决方法,搜索

  • Python Matplotlib库入门指南

    Matplotlib简介 Matplotlib是一个Python工具箱,用于科学计算的数据可视化.借助它,Python可以绘制如Matlab和Octave多种多样的数据图形.最初是模仿了Matlab图形命令, 但是与Matlab是相互独立的. 通过Matplotlib中简单的接口可以快速的绘制2D图表 初试Matplotlib Matplotlib中的pyplot子库提供了和matlab类似的绘图API. 复制代码 代码如下: import matplotlib.pyplot as plt  

  • Python中的Matplotlib模块入门教程

    1 关于 Matplotlib 模块 Matplotlib 是一个由 John Hunter 等开发的,用以绘制二维图形的 Python 模块.它利用了 Python 下的数值计算模块 Numeric 及 Numarray,克隆了许多 Matlab 中的函数, 用以帮助用户轻松地获得高质量的二维图形.Matplotlib 可以绘制多种形式的图形包括普通的线图,直方图,饼图,散点图以及误差线图等:可以比较方便的定制图形的各种属性比如图线的类型,颜色,粗细,字体的大小等:它能够很好地支持一部分 Te

  • Python 绘图库 Matplotlib 入门教程

    运行环境 由于这是一个Python语言的软件包,因此需要你的机器上首先安装好Python语言的环境.关于这一点,请自行在网络上搜索获取方法. 关于如何安装Matplotlib请参见这里:Matplotlib Installing. 笔者推荐大家通过pip的方式进行安装,具体方法如下: sudo pip3 install matplotlib 本文中的源码和测试数据可以在这里获取:matplotlib_tutorial 本文的代码示例会用到另外一个Python库:NumPy.建议读者先对NumPy

  • Python编程使用matplotlib挑钻石seaborn画图入门教程

    目录 scatter_plot lmplot jointplot 挑钻石第二弹 seaborn是matplotlib的补充包,提供了一系列高颜值的figure,并且集成了多种在线数据集,通过sns.load_dataset()进行调用,可供学习,如果网络不稳定,可下载到本地,然后在调用的时候使用把cache设为True. scatter_plot 官方的示例就很不错,绘制了diamonds数据集中的钻石数据.diamonds中总共包含十项数据,分别是重量/克拉.切割水平.颜色.透明度.深度.ta

  • 基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解

    Pyplot matplotlib.pyplot是一个命令型函数集合,它可以让我们像使用MATLAB一样使用matplotlib.pyplot中的每一个函数都会对画布图像作出相应的改变,如创建画布.在画布中创建一个绘图区.在绘图区上画几条线.给图像添加文字说明等.下面我们就通过实例代码来领略一下他的魅力. import matplotlib.pyplot as plt plt.plot([1,2,3,4]) plt.ylabel('some numbers') plt.show() 上图是我们通

  • Python Matplotlib初阶使用入门教程

    目录 0. 前言 1. 创建Figure的两种基本方法 1.1 第1种方法 1.2 第2种方法 2. Figure的解剖图及各种基本概念 2.1 Figure 2.2 Axes 2.3 Axis 2.4 Artist 3. 绘图函数的输入 4. 面向对象接口与pyplot接口 5. 绘图复用实用函数例 0. 前言 本文介绍Python Matplotlib库的入门求生级使用方法. 为了方便以下举例说明,我们先导入需要的几个库.以下代码在Jupyter Notebook中运行. %matplotl

  • Python pyecharts模块安装与入门教程

    目录 pyecharts产生背景 一.pyecharts模块安装 二.pyecharts入门 1.基础折线图 2.pyecharts配置选项 pyecharts产生背景 Echarts是由百度开源的数据可视化,凭借良好的交互性和精巧的图表设计,得到众多开发者的认可,而python很适合用于数据处理,数据分析遇到数据可视化时pyecharts就产生了. 官网链接:https://pyecharts.org/#/ 画廊pyecharts-gallery pyecharts支持的图表众多,官方提供了画

  • Python中Scrapy框架的入门教程分享

    目录 前言 安装Scrapy 创建一个Scrapy项目 创建一个爬虫 运行爬虫 结论 前言 Scrapy是一个基于Python的Web爬虫框架,可以快速方便地从互联网上获取数据并进行处理.它的设计思想是基于Twisted异步网络框架,可以同时处理多个请求,并且可以使用多种处理数据的方式,如提取数据.存储数据等. 本教程将介绍如何使用Scrapy框架来编写一个简单的爬虫,从而让您了解Scrapy框架的基本使用方法. 安装Scrapy 首先,您需要在您的计算机上安装Scrapy框架.您可以使用以下命

  • python实现的正则表达式功能入门教程【经典】

    本文讲述了python实现的正则表达式功能.分享给大家供大家参考,具体如下: 前文: 首先,什么叫正则表达式(Regular Expression)? 例如我们要判断字符串"adi_e32fv,Ls"里面是否含有子串"e32f",又例如我们在一个含百万个姓名的txt文件中找姓"王",名字以"五"结尾的名字,然后打印出来.结果为:"王五"."王小五"."王大五".&qu

  • Python面向对象思想与应用入门教程【类与对象】

    本文实例讲述了Python面向对象思想与应用.分享给大家供大家参考,具体如下: 面向对象思想 1.面向对象的设计思想 面向对象是基于万物皆对象这个哲学观点. 2.面向对象和面向过程的区别 面向过程 在生活中: 它是一种看待问题的思维方式,在思考问题的时候,着眼问题是怎样一步一步解决的,然后亲力亲为去解决问题[类似于公司里的执行者]. 在程序中: ​ 代码是从上而下顺序执行,各个模块之间的关系尽可能简单,在功能上相对独立,程序的流程在写程序的时候就已经决定. 面向对象 在生活中: 它是另一种看待问

  • Python Numpy库常见用法入门教程

    本文实例讲述了Python Numpy库常见用法.分享给大家供大家参考,具体如下: 1.简介 Numpy是一个常用的Python科学技术库,通过它可以快速对数组进行操作,包括形状操作.排序.选择.输入输出.离散傅立叶变换.基本线性代数,基本统计运算和随机模拟等.许多Python库和科学计算的软件包都使用Numpy数组作为操作对象,或者将传入的Python数组转化为Numpy数组,因此在Python中操作数据离不开Numpy. Numpy的核心是ndarray对象,由Python的n维数组封装而来

  • Python 音视频剪辑快速入门教程

    目录 一.引言 二.Moviepy 简介 三.Moviepy 安装 四.音视频的加载和保存 五.音视频数据的访问 六.音视频变换 1.Clip 的 fl 方法 2.Clip 的 fl_time 方法 3.剪辑颜色变换 4.剪辑大小变换 5.剪辑内容变换 七.剪辑合成 1.概述 2.将多个剪辑拼接 3.多个剪辑同屏播放 4.将一系列图像构造成视频 5.其他几种生成视频方法简介 八.小结 一.引言 在这个短视频和自媒体大行其道的年代,音视频剪辑成为了大佬们的必备工具,现在有很多音视频剪辑的软件,如剪

  • python库pydantic的简易入门教程

    目录 一.简介 二.安装 三.常见模型 1.BaseModel 基本模型 2.递归模型 3.GenericModel 通用模型(泛型): 四.常用类型 五.验证器 六.配置 七.与 mypy 一起使用 总结 一.简介 pydantic 库是 python 中用于数据接口定义检查与设置管理的库. pydantic 在运行时强制执行类型提示,并在数据无效时提供友好的错误. 它具有如下优点: 与 IDE/linter 完美搭配,不需要学习新的模式,只是使用类型注解定义类的实例 多用途,BaseSett

  • Python科学计算之NumPy入门教程

    前言 NumPy是Python用于处理大型矩阵的一个速度极快的数学库.它允许你在Python中做向量和矩阵的运算,而且很多底层的函数都是用C写的,你将获得在普通Python中无法达到的运行速度.这是由于矩阵中每个元素的数据类型都是一样的,这也就减少了运算过程中的类型检测. 矩阵基础 在 numpy 包中我们用数组来表示向量,矩阵和高阶数据结构.他们就由数组构成,一维就用一个数组表示,二维就是数组中包含数组表示. 创建 # coding: utf-8 import numpy as np a =

  • Python的ORM框架SQLAlchemy入门教程

    SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合:而对象集合的抽象又重要于表和行. 一 安装 SQLAlchemy 复制代码 代码如下: pip install sqlalchemy 导入如果没有报错则安装成功 复制代码 代码如下: >>> import sqlalchemy>>> sqlalchemy.__version__'0.9.1'>>> 二 使用 sqlalchemy对数据库操作 1. 定义元信息,绑定到引擎 复制代码 代

随机推荐